aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2015-03-20 14:09:11 +0000
committerSean Whitton <spwhitton@spwhitton.name>2015-03-20 14:09:11 +0000
commit5f2c7ae801deb49b55f7f574253d02dbd4b78e5d (patch)
tree6e1b76c61624b513c11c502e12fcc0a0572267f4
parent4114bd359d3cedcf6680c22594863151f7ab6f93 (diff)
downloadsariulclocks-5f2c7ae801deb49b55f7f574253d02dbd4b78e5d.tar.gz
readScoresFile and writeScoresFile rewritten in terms of new monad
-rw-r--r--src/Utils/ScoresFile.hs31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/Utils/ScoresFile.hs b/src/Utils/ScoresFile.hs
index 936a5dc..eac386c 100644
--- a/src/Utils/ScoresFile.hs
+++ b/src/Utils/ScoresFile.hs
@@ -14,6 +14,8 @@ import Control.Monad (liftM)
import Data.List.Split (splitOn)
import Data.Maybe (fromJust)
import System.FilePath ((</>))
+import Control.Monad.SariulClocks
+import Control.Monad.Trans (liftIO)
scoresToCSV :: ScoresList -> String
scoresToCSV = unlines . foldr step []
@@ -33,22 +35,27 @@ scoresFromCSV csv = foldr step [] (lines csv)
classString:scoreString:timeString:[] = splitOn "," line
theClass = fromJust $ lookupSariulClass ((read . (:[]) . head) classString) ((read . (:[]) . last) classString)
--- read from scores-XX.csv where XX is largest timestamp
-readScoresFile :: IO (Maybe ScoresList)
+-- try to read from scores-XX.csv where XX is largest timestamp
+readScoresFile :: SariulScoresMonad a => a (Maybe ScoresList)
readScoresFile = do
- curDir <- getCurrentDirectory
+ curDir <- liftIO getCurrentDirectory
let dataDir = curDir </> "data"
- filenames <- liftM (reverse . sort . filter isCSV) $ getDirectoryContents dataDir
- case filenames of
- [] -> return Nothing
- _ -> Just . scoresFromCSV <$> readFile (dataDir </> head filenames)
+ filenames <- liftM (reverse . sort . filter isCSV) $ liftIO $ getDirectoryContents dataDir
+ if null filenames
+ then return Nothing
+ else do
+ -- let scores = liftM scoresFromCSV $ liftIO $ readFile (dataDir </> head filenames)
+ scores <- liftIO $ scoresFromCSV <$> readFile (dataDir </> head filenames)
+ putScores scores
+ return $ Just scores
where isCSV path = takeExtension path == ".csv"
-- writes to score-XX.csv where XX is unix timestamp: a simple-minded logging
-writeScoresFile :: ScoresList -> IO ()
-writeScoresFile scores = do
- curDir <- getCurrentDirectory
+writeScoresFile :: SariulScoresMonad a => a ()
+writeScoresFile = do
+ scores <- getScores
+ curDir <- liftIO getCurrentDirectory
let dataDir = curDir </> "data"
- timestamp <- round <$> getPOSIXTime
+ timestamp <- liftM round $ liftIO getPOSIXTime
let filename = dataDir </> ("scores-" ++ show timestamp ++ ".csv")
- writeFile filename (scoresToCSV scores)
+ liftIO $ writeFile filename (scoresToCSV scores)