summaryrefslogtreecommitdiff
path: root/Types/ScheduledActivity.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-10-08 17:44:20 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-10-08 17:44:20 -0400
commit1f9d51686923f7e8add63e53fad4950fdd43a46b (patch)
tree743932035dbc85cda13f0e1da64f6716456508f5 /Types/ScheduledActivity.hs
parent62ba14fe517bab8a14a05ff1be14fc148947fc10 (diff)
remove duration from Schedule
Diffstat (limited to 'Types/ScheduledActivity.hs')
-rw-r--r--Types/ScheduledActivity.hs28
1 files changed, 20 insertions, 8 deletions
diff --git a/Types/ScheduledActivity.hs b/Types/ScheduledActivity.hs
index dc37fe173..e29050d8e 100644
--- a/Types/ScheduledActivity.hs
+++ b/Types/ScheduledActivity.hs
@@ -9,30 +9,42 @@ module Types.ScheduledActivity where
import Common
import Utility.Scheduled
+import Utility.HumanTime
import Types.UUID
data ScheduledActivity
- = ScheduledSelfFsck Schedule
- | ScheduledRemoteFsck UUID Schedule
+ = ScheduledSelfFsck Schedule Duration
+ | ScheduledRemoteFsck UUID Schedule Duration
deriving (Eq, Read, Show, Ord)
+getSchedule :: ScheduledActivity -> Schedule
+getSchedule (ScheduledSelfFsck s _) = s
+getSchedule (ScheduledRemoteFsck _ s _) = s
+
+getDuration :: ScheduledActivity -> Duration
+getDuration (ScheduledSelfFsck _ d) = d
+getDuration (ScheduledRemoteFsck _ _ d) = d
+
fromScheduledActivity :: ScheduledActivity -> String
-fromScheduledActivity (ScheduledSelfFsck s) =
- "fsck self " ++ fromSchedule s
-fromScheduledActivity (ScheduledRemoteFsck u s) =
- "fsck " ++ fromUUID u ++ fromSchedule s
+fromScheduledActivity (ScheduledSelfFsck s d) = unwords
+ [ "fsck self", fromDuration d, fromSchedule s ]
+fromScheduledActivity (ScheduledRemoteFsck u s d) = unwords
+ [ "fsck", fromUUID u, fromDuration d, fromSchedule s ]
toScheduledActivity :: String -> Maybe ScheduledActivity
toScheduledActivity = eitherToMaybe . parseScheduledActivity
parseScheduledActivity :: String -> Either String ScheduledActivity
parseScheduledActivity s = case words s of
- ("fsck":"self":rest) -> qualified $ ScheduledSelfFsck
+ ("fsck":"self":d:rest) -> qualified $ ScheduledSelfFsck
<$> parseSchedule (unwords rest)
- ("fsck":u:rest) -> qualified $ ScheduledRemoteFsck
+ <*> getduration d
+ ("fsck":u:d:rest) -> qualified $ ScheduledRemoteFsck
<$> pure (toUUID u)
<*> parseSchedule (unwords rest)
+ <*> getduration d
_ -> qualified $ Left "unknown activity"
where
qualified (Left e) = Left $ e ++ " in \"" ++ s ++ "\""
qualified v = v
+ getduration d = maybe (Left $ "failed to parse duration \""++d++"\"") Right (parseDuration d)