{- git-annex scheduled activities log - - Copyright 2013 Joey Hess - - Licensed under the GNU GPL version 3 or higher. -} module Logs.Schedule ( scheduleLog, scheduleSet, scheduleGet, scheduleMap, getLastRunTimes, setLastRunTime, ) where import qualified Data.Map as M import qualified Data.Set as S import Data.Time.Clock.POSIX import Data.Time.LocalTime import Common.Annex import Types.ScheduledActivity import qualified Annex.Branch import Logs import Logs.UUIDBased scheduleSet :: UUID -> [ScheduledActivity] -> Annex () scheduleSet uuid@(UUID _) activities = do ts <- liftIO getPOSIXTime Annex.Branch.change scheduleLog $ showLog id . changeLog ts uuid val . parseLog Just where val = intercalate "; " $ map fromScheduledActivity activities scheduleSet NoUUID _ = error "unknown UUID; cannot modify" scheduleMap :: Annex (M.Map UUID [ScheduledActivity]) scheduleMap = simpleMap . parseLogWithUUID parser <$> Annex.Branch.get scheduleLog where parser _uuid = Just . mapMaybe toScheduledActivity . split "; " scheduleGet :: UUID -> Annex (S.Set ScheduledActivity) scheduleGet u = do m <- scheduleMap return $ maybe S.empty S.fromList (M.lookup u m) getLastRunTimes :: Annex (M.Map ScheduledActivity LocalTime) getLastRunTimes = do f <- fromRepo gitAnnexScheduleState liftIO $ fromMaybe M.empty <$> catchDefaultIO Nothing (readish <$> readFile f) setLastRunTime :: ScheduledActivity -> LocalTime -> Annex () setLastRunTime activity lastrun = do f <- fromRepo gitAnnexScheduleState liftIO . writeFile f . show . M.insert activity lastrun =<< getLastRunTimes