aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2015-03-30 18:52:28 +0900
committerSean Whitton <spwhitton@spwhitton.name>2015-03-30 18:52:28 +0900
commit6daae7e04ca436954cede8b407e488719354614a (patch)
treef4ade114548a25ffaa3dd917ac1e7a9af41e8688
parent84bd15607d50636a5fe8fe74bb1ade43a423ae59 (diff)
downloadsrem-6daae7e04ca436954cede8b407e488719354614a.tar.gz
finish event cache user interface
-rw-r--r--src/Utility/EventCache.hs47
-rw-r--r--srem.cabal1
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
diff --git a/srem.cabal b/srem.cabal
index 371a881..80fac73 100644
--- a/srem.cabal
+++ b/srem.cabal
@@ -19,5 +19,6 @@ executable srem
, modular-arithmetic
, time
, filepath
+ , split
hs-source-dirs: src
default-language: Haskell2010