@@ -8,7 +8,7 @@ import Protolude as P
8899import Data.Hourglass
1010import Data.Text as T
11-import qualified Data.Time.ISO8601.Duration as Iso8601
11+import qualified Data.Time.ISO8601.Duration as Iso
1212import Data.ULID
1313import Data.Coerce
1414import Data.Yaml as Yaml
@@ -339,15 +339,18 @@ setReadyUtc conf connection datetime ids = do
339339pure $ vsep docs
340340341341342-waitFor :: Config -> Connection -> Duration -> [Text] -> IO (Doc AnsiStyle)
342+waitFor
343+:: Config -> Connection -> Iso.Duration -> [Text] -> IO (Doc AnsiStyle)
343344waitFor conf connection duration ids = do
344345 docs <- forM ids $ \idSubstr ->
345346 execWithTask conf connection idSubstr $ \task -> do
346347 now <- timeCurrentP
347348let
348349 taskUlid@(TaskUlid idText) = primaryKey task
349350 nowAsText = (pack . timePrint (utcFormat conf)) now
350- threeDays = (pack . timePrint (utcFormat conf)) (now `timeAdd` duration)
351+ threeDays = (pack . timePrint (utcFormat conf))
352+ (utcTimeToDateTime $ Iso.addDuration duration $
353+ dateTimeToUtcTime $ timeFromElapsedP now)
351354 prettyBody = dquotes (pretty $ Task.body task)
352355 prettyId = dquotes (pretty idText)
353356@@ -373,18 +376,21 @@ waitFor conf connection duration ids = do
373376374377waitTasks :: Config -> Connection -> [Text] -> IO (Doc AnsiStyle)
375378waitTasks conf connection =
376- waitFor conf connection $ mempty { durationHours = 72 }
379+ waitFor conf connection $
380+Iso.DurationDate (Iso.DurDateDay (Iso.DurDay 3) Nothing)
377381378382379383reviewTasksIn :: Config -> Connection
380--> Duration -> [Text] -> IO (Doc AnsiStyle)
381-reviewTasksIn conf connection days ids = do
384+-> Iso.Duration -> [Text] -> IO (Doc AnsiStyle)
385+reviewTasksIn conf connection duration ids = do
382386 docs <- forM ids $ \idSubstr -> do
383387 execWithTask conf connection idSubstr $ \task -> do
384388 now <- timeCurrentP
385389let
386390 taskUlid@(TaskUlid idText) = primaryKey task
387- xDays = (pack . timePrint (utcFormat conf)) (now `timeAdd` days)
391+ xDays = (pack . timePrint (utcFormat conf))
392+ (utcTimeToDateTime $ Iso.addDuration duration $
393+ dateTimeToUtcTime $ timeFromElapsedP now)
388394 prettyBody = dquotes (pretty $ Task.body task)
389395 prettyId = dquotes (pretty idText)
390396 warningStart = "⚠️ Task" <+> prettyBody <+> "with id" <+> prettyId
@@ -498,14 +504,14 @@ createNextRecurrence conf connection task = do
498504 isoDurEither =
499505 durTextEither
500506<&> encodeUtf8
501->>= Iso8601.parseDuration
507+>>= Iso.parseDuration
502508503509 showEither e = e
504510& (either (const Nothing) Just)
505511<&> utcTimeToDateTime
506512<&> showDateTime
507513508- nextDueMb = liftA2 Iso8601.addDuration isoDurEither
514+ nextDueMb = liftA2 Iso.addDuration isoDurEither
509515 (maybeToEither "Task has no due UTC" (dueUtcMb <&> dateTimeToUtcTime))
510516511517 runBeamSqlite connection $ do
@@ -519,13 +525,13 @@ createNextRecurrence conf connection task = do
519525 , Task.due_utc = val_ $ nextDueMb & showEither
520526521527 , Task.awake_utc = val_ $
522- (liftA2 Iso8601.addDuration isoDurEither
528+ (liftA2 Iso.addDuration isoDurEither
523529 (maybeToEither "Task has no awake UTC"
524530 ((Task.awake_utc task) >>= parseUtc <&> dateTimeToUtcTime)))
525531& showEither
526532527533 , Task.ready_utc = val_ $
528- (liftA2 Iso8601.addDuration isoDurEither
534+ (liftA2 Iso.addDuration isoDurEither
529535 (maybeToEither "Task has no ready UTC"
530536 ((Task.ready_utc task) >>= parseUtc <&> dateTimeToUtcTime)))
531537& showEither
@@ -661,9 +667,9 @@ durationToIso dur =
661667662668663669repeatTasks ::
664-Config -> Connection -> Duration -> [IdText] -> IO (Doc AnsiStyle)
670+Config -> Connection -> Iso.Duration -> [IdText] -> IO (Doc AnsiStyle)
665671repeatTasks conf connection duration ids = do
666-let durIso = durationToIso duration
672+let durationIsoText = decodeUtf8 $ Iso.formatDuration duration
667673668674 docs <- forM ids $ \idSubstr ->
669675 execWithTask conf connection idSubstr $ \task -> do
@@ -677,28 +683,29 @@ repeatTasks conf connection duration ids = do
677683 runBeamSqlite connection $ runUpdate $
678684 update (_tldbTasks taskLiteDb)
679685 (\task_ -> mconcat
680- [ (Task.repetition_duration task_) <-. val_ (Just durIso)
686+ [ (Task.repetition_duration task_) <-. val_ (Just durationIsoText)
681687 , (Task.group_ulid task_) <-. val_ (Just groupUlid)
682688 ])
683689 (\task_ -> primaryKey task_ ==. val_ taskUlid)
684690685691pure $ "📅 Set repeat duration of task" <+> prettyBody
686692<+> "with id" <+> prettyId
687-<+> "to" <+> dquotes (pretty $ durIso)
693+<+> "to" <+> dquotes (pretty $ durationIsoText)
688694689695pure $ vsep docs
690696691697692698recurTasks ::
693-Config -> Connection -> Iso8601.Duration -> [IdText] -> IO (Doc AnsiStyle)
699+Config -> Connection -> Iso.Duration -> [IdText] -> IO (Doc AnsiStyle)
694700recurTasks conf connection duration ids = do
701+let durationIsoText = decodeUtf8 $ Iso.formatDuration duration
702+695703 docs <- forM ids $ \idSubstr ->
696704 execWithTask conf connection idSubstr $ \task -> do
697705let
698706 taskUlid@(TaskUlid idText) = primaryKey task
699707 prettyBody = dquotes (pretty $ Task.body task)
700708 prettyId = dquotes (pretty idText)
701- durationIsoText = decodeUtf8 $ Iso8601.formatDuration duration
702709703710 groupUlid <- formatUlid getULID
704711