GitHub

@@ -8,7 +8,7 @@ import Protolude as P

8899

import Data.Hourglass

1010

import Data.Text as T

11-

import qualified Data.Time.ISO8601.Duration as Iso8601

11+

import qualified Data.Time.ISO8601.Duration as Iso

1212

import Data.ULID

1313

import Data.Coerce

1414

import Data.Yaml as Yaml

@@ -339,15 +339,18 @@ setReadyUtc conf connection datetime ids = do

339339

pure $ vsep docs

340340341341342-

waitFor :: Config -> Connection -> Duration -> [Text] -> IO (Doc AnsiStyle)

342+

waitFor

343+

:: Config -> Connection -> Iso.Duration -> [Text] -> IO (Doc AnsiStyle)

343344

waitFor conf connection duration ids = do

344345

docs <- forM ids $ \idSubstr ->

345346

execWithTask conf connection idSubstr $ \task -> do

346347

now <- timeCurrentP

347348

let

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

373376374377

waitTasks :: Config -> Connection -> [Text] -> IO (Doc AnsiStyle)

375378

waitTasks conf connection =

376-

waitFor conf connection $ mempty { durationHours = 72 }

379+

waitFor conf connection $

380+

Iso.DurationDate (Iso.DurDateDay (Iso.DurDay 3) Nothing)

377381378382379383

reviewTasksIn :: 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

385389

let

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 =

661667662668663669

repeatTasks ::

664-

Config -> Connection -> Duration -> [IdText] -> IO (Doc AnsiStyle)

670+

Config -> Connection -> Iso.Duration -> [IdText] -> IO (Doc AnsiStyle)

665671

repeatTasks 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)

684690685691

pure $ "📅 Set repeat duration of task" <+> prettyBody

686692

<+> "with id" <+> prettyId

687-

<+> "to" <+> dquotes (pretty $ durIso)

693+

<+> "to" <+> dquotes (pretty $ durationIsoText)

688694689695

pure $ vsep docs

690696691697692698

recurTasks ::

693-

Config -> Connection -> Iso8601.Duration -> [IdText] -> IO (Doc AnsiStyle)

699+

Config -> Connection -> Iso.Duration -> [IdText] -> IO (Doc AnsiStyle)

694700

recurTasks 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

697705

let

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

Read the original on github.com ↗