diff options
Diffstat (limited to 'src/Utils/ScoresFile.hs')
-rw-r--r-- | src/Utils/ScoresFile.hs | 31 |
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) |