diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2015-03-30 18:52:28 +0900 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2015-03-30 18:52:28 +0900 |
commit | 6daae7e04ca436954cede8b407e488719354614a (patch) | |
tree | f4ade114548a25ffaa3dd917ac1e7a9af41e8688 | |
parent | 84bd15607d50636a5fe8fe74bb1ade43a423ae59 (diff) | |
download | srem-6daae7e04ca436954cede8b407e488719354614a.tar.gz |
finish event cache user interface
-rw-r--r-- | src/Utility/EventCache.hs | 47 | ||||
-rw-r--r-- | srem.cabal | 1 |
2 files changed, 35 insertions, 13 deletions
diff --git a/src/Utility/EventCache.hs b/src/Utility/EventCache.hs index 6471a0f..1848488 100644 --- a/src/Utility/EventCache.hs +++ b/src/Utility/EventCache.hs @@ -5,27 +5,40 @@ module EventCache ( purgeOldEventCaches ) where import Control.Applicative ((<$>)) +import Control.Exception (IOException, catch) +import Control.Monad (filterM, forM_, when) import qualified Control.SremConfig as SremConfig +import Data.List.Split (splitOneOf) import Data.Time.Calendar import Data.Time.Clock -import System.Directory (doesFileExist) +import System.Directory (doesFileExist, getDirectoryContents, + removeFile) import System.FilePath ((</>)) import Types.Reminder import Utility.Emacs -purgeOldEventCaches :: IO [Reminder] -purgeOldEventCaches = undefined +-- TODO: lockfiles? -appendManualEventCache :: IO () -appendManualEventCache = do - date <- cacheFileDateString +-- #### User interface functions + +purgeOldEventCaches :: IO () +purgeOldEventCaches = do + files <- (SremConfig.getCacheDirectory + >>= getDirectoryContents) + `catch` ((\_ -> return []) :: IOException -> IO [FilePath]) + today <- todaysCacheFileDateString + forM_ files $ \file -> + when (fileIsOldCache file) $ removeFile file + +appendManualEventCache :: Reminder -> Day -> IO () +appendManualEventCache r d = do dir <- SremConfig.getCacheDirectory - let path = dir </> "manual_" ++ date ++ ".csv" - undefined + let path = dir </> "manual_" ++ (showGregorian d) ++ ".csv" + appendFile path $ makeEventsCSV [r] readEmacsEventCache :: IO [Reminder] readEmacsEventCache = do - date <- cacheFileDateString + date <- todaysCacheFileDateString dir <- SremConfig.getCacheDirectory let path = dir </> "emacs_" ++ date ++ ".csv" doesFileExist path >>= \alreadyThere -> @@ -38,10 +51,15 @@ readEmacsEventCache = do readManualEventCache :: IO [Reminder] readManualEventCache = do - date <- cacheFileDateString + date <- todaysCacheFileDateString dir <- SremConfig.getCacheDirectory let path = dir </> "manual_" ++ date ++ ".csv" - undefined + doesFileExist path >>= \alreadyThere -> + if alreadyThere + then readEventsCSV path + else return [] + +-- #### Internal functions readEventsCSV :: FilePath -> IO [Reminder] readEventsCSV = undefined @@ -52,8 +70,11 @@ parseEventsCSV = undefined makeEventsCSV :: [Reminder] -> String makeEventsCSV = undefined -cacheFileDateString :: IO String -cacheFileDateString = showGregorian . utctDay <$> getCurrentTime +todaysCacheFileDateString :: IO String +todaysCacheFileDateString = showGregorian . utctDay <$> getCurrentTime + +fileIsOldCache :: FilePath -> Bool +fileIsOldCache = undefined -- getEventCacheLock :: IO [Reminder] -- getEventCacheLock = undefined @@ -19,5 +19,6 @@ executable srem , modular-arithmetic , time , filepath + , split hs-source-dirs: src default-language: Haskell2010 |