Add the autoSync
config property to automatically sync contexts after relevant issues change.
This commit is contained in:
parent
0361d1b869
commit
76225d1c50
22
src/pit.nim
22
src/pit.nim
@ -81,6 +81,7 @@ when isMainModule:
|
|||||||
|
|
||||||
trace "context initiated"
|
trace "context initiated"
|
||||||
|
|
||||||
|
var updatedIssues = newSeq[Issue]()
|
||||||
var propertiesOption = none(TableRef[string,string])
|
var propertiesOption = none(TableRef[string,string])
|
||||||
var exclPropsOption = none(TableRef[string,seq[string]])
|
var exclPropsOption = none(TableRef[string,seq[string]])
|
||||||
var tagsOption = none(seq[string])
|
var tagsOption = none(seq[string])
|
||||||
@ -136,7 +137,7 @@ when isMainModule:
|
|||||||
else: newSeq[string]())
|
else: newSeq[string]())
|
||||||
|
|
||||||
ctx.cfg.tasksDir.store(issue, state)
|
ctx.cfg.tasksDir.store(issue, state)
|
||||||
|
updatedIssues.add(issue)
|
||||||
stdout.writeLine formatIssue(issue)
|
stdout.writeLine formatIssue(issue)
|
||||||
|
|
||||||
elif args["reorder"]:
|
elif args["reorder"]:
|
||||||
@ -163,6 +164,7 @@ when isMainModule:
|
|||||||
for k,v in propsOption.get:
|
for k,v in propsOption.get:
|
||||||
issue[k] = v
|
issue[k] = v
|
||||||
edit(issue)
|
edit(issue)
|
||||||
|
updatedIssues.add(issue)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
let issue = ctx.cfg.tasksDir.loadIssueById(editRef)
|
let issue = ctx.cfg.tasksDir.loadIssueById(editRef)
|
||||||
@ -170,6 +172,7 @@ when isMainModule:
|
|||||||
for k,v in propertiesOption.get:
|
for k,v in propertiesOption.get:
|
||||||
issue[k] = v
|
issue[k] = v
|
||||||
edit(issue)
|
edit(issue)
|
||||||
|
updatedIssues.add(issue)
|
||||||
|
|
||||||
elif args["tag"]:
|
elif args["tag"]:
|
||||||
if tagsOption.isNone: raise newException(Exception, "no tags given")
|
if tagsOption.isNone: raise newException(Exception, "no tags given")
|
||||||
@ -180,6 +183,7 @@ when isMainModule:
|
|||||||
var issue = ctx.cfg.tasksDir.loadIssueById(id)
|
var issue = ctx.cfg.tasksDir.loadIssueById(id)
|
||||||
issue.tags = deduplicate(issue.tags & newTags)
|
issue.tags = deduplicate(issue.tags & newTags)
|
||||||
issue.store()
|
issue.store()
|
||||||
|
updatedIssues.add(issue)
|
||||||
|
|
||||||
elif args["untag"]:
|
elif args["untag"]:
|
||||||
let tagsToRemove: seq[string] =
|
let tagsToRemove: seq[string] =
|
||||||
@ -193,6 +197,7 @@ when isMainModule:
|
|||||||
proc (tag: string): bool = not tagsToRemove.anyIt(it == tag))
|
proc (tag: string): bool = not tagsToRemove.anyIt(it == tag))
|
||||||
else: issue.tags = @[]
|
else: issue.tags = @[]
|
||||||
issue.store()
|
issue.store()
|
||||||
|
updatedIssues.add(issue)
|
||||||
|
|
||||||
elif args["start"] or args["todo-today"] or args["done"] or
|
elif args["start"] or args["todo-today"] or args["done"] or
|
||||||
args["pending"] or args["todo"] or args["suspend"]:
|
args["pending"] or args["todo"] or args["suspend"]:
|
||||||
@ -216,10 +221,12 @@ when isMainModule:
|
|||||||
let nextIssue = ctx.cfg.tasksDir.nextRecurrence(issue.getRecurrence.get, issue)
|
let nextIssue = ctx.cfg.tasksDir.nextRecurrence(issue.getRecurrence.get, issue)
|
||||||
ctx.cfg.tasksDir.store(nextIssue, TodoToday)
|
ctx.cfg.tasksDir.store(nextIssue, TodoToday)
|
||||||
info "created the next recurrence:"
|
info "created the next recurrence:"
|
||||||
|
updatedIssues.add(nextIssue)
|
||||||
stdout.writeLine formatIssue(nextIssue)
|
stdout.writeLine formatIssue(nextIssue)
|
||||||
|
|
||||||
|
|
||||||
issue.changeState(ctx.cfg.tasksDir, targetState)
|
issue.changeState(ctx.cfg.tasksDir, targetState)
|
||||||
|
updatedIssues.add(issue)
|
||||||
|
|
||||||
if ctx.triggerPtk or args["--ptk"]:
|
if ctx.triggerPtk or args["--ptk"]:
|
||||||
if targetState == Current:
|
if targetState == Current:
|
||||||
@ -244,6 +251,7 @@ when isMainModule:
|
|||||||
issue.setDateTime("hide-until", parseDate($args["<date>"]))
|
issue.setDateTime("hide-until", parseDate($args["<date>"]))
|
||||||
|
|
||||||
issue.store()
|
issue.store()
|
||||||
|
updatedIssues.add(issue)
|
||||||
|
|
||||||
elif args["delegate"]:
|
elif args["delegate"]:
|
||||||
|
|
||||||
@ -251,6 +259,7 @@ when isMainModule:
|
|||||||
issue["delegated-to"] = $args["<delegated-to>"]
|
issue["delegated-to"] = $args["<delegated-to>"]
|
||||||
|
|
||||||
issue.store()
|
issue.store()
|
||||||
|
updatedIssues.add(issue)
|
||||||
|
|
||||||
elif args["delete"] or args["rm"]:
|
elif args["delete"] or args["rm"]:
|
||||||
for id in @(args["<id>"]):
|
for id in @(args["<id>"]):
|
||||||
@ -263,6 +272,7 @@ when isMainModule:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
issue.delete
|
issue.delete
|
||||||
|
updatedIssues.add(issue)
|
||||||
|
|
||||||
elif args["list"]:
|
elif args["list"]:
|
||||||
|
|
||||||
@ -385,6 +395,7 @@ when isMainModule:
|
|||||||
finally: close(propIn)
|
finally: close(propIn)
|
||||||
|
|
||||||
issue.store()
|
issue.store()
|
||||||
|
updatedIssues.add(issue)
|
||||||
|
|
||||||
elif args["get-binary-property"]:
|
elif args["get-binary-property"]:
|
||||||
let issue = ctx.cfg.tasksDir.loadIssueById($(args["<id>"]))
|
let issue = ctx.cfg.tasksDir.loadIssueById($(args["<id>"]))
|
||||||
@ -425,6 +436,15 @@ when isMainModule:
|
|||||||
|
|
||||||
sync(syncCtx, args["--dry-run"])
|
sync(syncCtx, args["--dry-run"])
|
||||||
|
|
||||||
|
# after doing stuff, sync if auto-sync is requested
|
||||||
|
if ctx.cfg.autoSync:
|
||||||
|
for syncTarget in ctx.cfg.syncTargets:
|
||||||
|
let syncCtx = initSyncContext(ctx.cfg, syncTarget)
|
||||||
|
if anyIt(
|
||||||
|
updatedIssues,
|
||||||
|
it.hasProp("context") and it["context"] == syncCtx.issueContext):
|
||||||
|
sync(syncCtx, false)
|
||||||
|
|
||||||
except CatchableError:
|
except CatchableError:
|
||||||
fatal getCurrentExceptionMsg()
|
fatal getCurrentExceptionMsg()
|
||||||
debug getCurrentException().getStackTrace()
|
debug getCurrentException().getStackTrace()
|
||||||
|
@ -33,6 +33,7 @@ type
|
|||||||
PitConfig* = ref object
|
PitConfig* = ref object
|
||||||
tasksDir*: string
|
tasksDir*: string
|
||||||
contexts*: TableRef[string, string]
|
contexts*: TableRef[string, string]
|
||||||
|
autoSync*: bool
|
||||||
syncTargets*: seq[JsonNode]
|
syncTargets*: seq[JsonNode]
|
||||||
cfg*: CombinedConfig
|
cfg*: CombinedConfig
|
||||||
|
|
||||||
@ -459,6 +460,7 @@ proc loadConfig*(args: Table[string, Value] = initTable[string, Value]()): PitCo
|
|||||||
|
|
||||||
result = PitConfig(
|
result = PitConfig(
|
||||||
cfg: cfg,
|
cfg: cfg,
|
||||||
|
autoSync: parseBool(cfg.getVal("auto-sync", "false")),
|
||||||
contexts: newTable[string,string](),
|
contexts: newTable[string,string](),
|
||||||
tasksDir: cfg.getVal("tasks-dir", ""),
|
tasksDir: cfg.getVal("tasks-dir", ""),
|
||||||
syncTargets: cfg.getJson("sync-targets", newJArray()).getElems)
|
syncTargets: cfg.getJson("sync-targets", newJArray()).getElems)
|
||||||
|
@ -4,11 +4,11 @@ import timeutils, uuids, zero_functional
|
|||||||
import ./formatting, ./libpit
|
import ./formatting, ./libpit
|
||||||
|
|
||||||
type
|
type
|
||||||
PbmVsbSyncContext = object
|
PbmVsbSyncContext* = object
|
||||||
|
apiBaseUrl*: string
|
||||||
|
apiToken*: string
|
||||||
|
issueContext*: string
|
||||||
pit: PitConfig
|
pit: PitConfig
|
||||||
apiBaseUrl: string
|
|
||||||
apiToken: string
|
|
||||||
issueContext: string
|
|
||||||
http: HttpClient
|
http: HttpClient
|
||||||
|
|
||||||
ServerTask* = object
|
ServerTask* = object
|
||||||
|
Loading…
x
Reference in New Issue
Block a user