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