Add support for a project view like virtual-status-board.probatem.com

This commit is contained in:
2025-11-19 17:12:14 -06:00
parent 6ac068fe75
commit 5dd7a15bf4
5 changed files with 472 additions and 23 deletions

View File

@@ -6,7 +6,7 @@ import data_uri, docopt, json, timeutils, uuids
from nre import re
import strutils except alignLeft, capitalize, strip, toUpper, toLower
import pit/[cliconstants, formatting, libpit, sync_pbm_vsb]
import pit/[cliconstants, formatting, libpit, projects, sync_pbm_vsb]
export formatting, libpit
@@ -330,10 +330,14 @@ when isMainModule:
var listContexts = false
var listTags = false
var listProjects = false
var listMilestones = false
var statesOption = none(seq[IssueState])
var issueIdsOption = none(seq[string])
if args["contexts"]: listContexts = true
elif args["projects"]: listProjects = true
elif args["milestones"]: listMilestones = true
elif args["tags"]: listTags = true
elif args["<stateOrId>"]:
try:
@@ -381,6 +385,12 @@ when isMainModule:
let issue = ctx.cfg.tasksDir.loadIssueById(issueId)
stdout.writeLine formatIssue(issue)
# List projects
elif listProjects: ctx.listProjects(filterOption)
# List milestones
elif listMilestones: ctx.listMilestones(filterOption)
# List all issues
else:
trace "listing all issues"
@@ -393,6 +403,32 @@ when isMainModule:
showHidden = args["--show-hidden"],
verbose = ctx.verbose)
elif args["show"]:
if args["project-board"]:
ctx.showProjectBoard(filterOption)
discard
elif args["dupes"]:
ctx.loadAllIssues()
var idsToPaths = newTable[string, var seq[string]]()
for (state, issues) in pairs(ctx.issues):
for issue in issues:
let issueId = $issue.id
if idsToPaths.hasKey(issueId): idsToPaths[issueId].add(issue.filepath)
else: idsToPaths[issueId] = @[issue.filepath]
for (issueId, issuePaths) in pairs(idsToPaths):
if issuePaths.len < 2: continue
stdout.writeLine(issueId & ":\p " & issuePaths.join("\p ") & "\p\p")
else: # list specific Issues
for issueId in args["<id>"].mapIt($it):
let issue = ctx.cfg.tasksDir.loadIssueById(issueId)
stdout.writeLine formatIssue(issue)
elif args["add-binary-property"]:
let issue = ctx.cfg.tasksDir.loadIssueById($(args["<id>"]))
@@ -421,21 +457,6 @@ when isMainModule:
try: write(propOut, decodeDataUri(issue[$(args["<propName>"])]))
finally: close(propOut)
elif args["show-dupes"]:
ctx.loadAllIssues()
var idsToPaths = newTable[string, var seq[string]]()
for (state, issues) in pairs(ctx.issues):
for issue in issues:
let issueId = $issue.id
if idsToPaths.hasKey(issueId): idsToPaths[issueId].add(issue.filepath)
else: idsToPaths[issueId] = @[issue.filepath]
for (issueId, issuePaths) in pairs(idsToPaths):
if issuePaths.len < 2: continue
stdout.writeLine(issueId & ":\p " & issuePaths.join("\p ") & "\p\p")
elif args["sync"]:
if ctx.cfg.syncTargets.len == 0:
info "No sync targets configured"