diff --git a/pit.nimble b/pit.nimble index f0832cb..7508068 100644 --- a/pit.nimble +++ b/pit.nimble @@ -1,6 +1,6 @@ # Package -version = "4.12.0" +version = "4.13.0" author = "Jonathan Bernard" description = "Personal issue tracker." license = "MIT" diff --git a/src/pit.nim b/src/pit.nim index b0ecbfe..7bc4aab 100644 --- a/src/pit.nim +++ b/src/pit.nim @@ -233,7 +233,11 @@ proc list(ctx: CliContext, filter: Option[IssueFilter], state: Option[IssueState for s in [Pending, Todo]: if ctx.issues.hasKey(s) and ctx.issues[s].len > 0: - stdout.write ctx.formatSection(ctx.issues[s], s, indent, verbose) + let visibleIssues = ctx.issues[s].filterIt( + not (it.hasProp("hide-until") and + it.getDateTime("hide-until") > getTime().local)) + + stdout.write ctx.formatSection(visibleIssues, s, indent, verbose) when isMainModule: @@ -241,17 +245,18 @@ when isMainModule: let doc = """ Usage: pit ( new | add) [] [options] - pit list contexts + pit list contexts [options] pit list [] [options] pit ( start | done | pending | todo-today | todo | suspend ) ... [options] - pit edit ... + pit edit ... [options] pit tag ... [options] pit untag ... [options] - pit reorder + pit reorder [options] pit delegate - pit ( delete | rm ) ... - pit add-binary-property - pit get-binary-property + pit hide-until [options] + pit ( delete | rm ) ... [options] + pit add-binary-property [options] + pit get-binary-property [options] Options: @@ -423,6 +428,13 @@ Options: elif targetState == Done or targetState == Pending: discard execShellCmd("ptk stop") + elif args["hide-until"]: + + let issue = ctx.tasksDir.loadIssueById($(args[""])) + issue.setDateTime("hide-until", parseDate($args[""])) + + issue.store() + elif args["delegate"]: let issue = ctx.tasksDir.loadIssueById($(args[""])) diff --git a/src/pitpkg/private/libpit.nim b/src/pitpkg/private/libpit.nim index 5131b7b..07ea095 100644 --- a/src/pitpkg/private/libpit.nim +++ b/src/pitpkg/private/libpit.nim @@ -105,6 +105,23 @@ proc groupBy*(issues: seq[Issue], propertyKey: string): TableRef[string, seq[Iss result[key].add(i) +## Parse and format dates +const DATE_FORMATS = [ + "MM/dd", + "MM-dd", + "yyyy-MM-dd", + "yyyy/MM/dd", + "yyyy-MM-dd'T'hh:mm:ss" +] +proc parseDate*(d: string): DateTime = + var errMsg = "" + for df in DATE_FORMATS: + try: return d.parse(df) + except: + errMsg &= "\n\tTried " & df & " with " & d + continue + raise newException(ValueError, "Unable to parse input as a date: " & d & errMsg) + ## Parse and format issues proc fromStorageFormat*(id: string, issueTxt: string): Issue = type ParseState = enum ReadingSummary, ReadingProps, ReadingDetails diff --git a/src/pitpkg/version.nim b/src/pitpkg/version.nim index a457e3d..1dce412 100644 --- a/src/pitpkg/version.nim +++ b/src/pitpkg/version.nim @@ -1 +1 @@ -const PIT_VERSION* = "4.12.0" \ No newline at end of file +const PIT_VERSION* = "4.13.0" \ No newline at end of file