Skip to content

Commit

Permalink
Multiple fixes - show task, comments, task details
Browse files Browse the repository at this point in the history
  • Loading branch information
chaitanyagupta committed Nov 18, 2018
1 parent 6739331 commit a4d0991
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 25 deletions.
84 changes: 69 additions & 15 deletions deftask-cli.lisp
Expand Up @@ -285,28 +285,34 @@
:arg-parser #'identity
:meta-var "DETAIL"))

(defun print-task (task &key detailed project-labels project-members)
(defun print-task (task &key times labels assignees description project-labels project-members)
(termcolor:with-color (:style :bright)
(format t "#~D" (assocrv :task-id task)))
(format t "~:[~;~] ~A~%" (string= (assocrv :state task) "open") (assocrv :title task))
(when detailed
(flet ((show-time (time-string field-name)
(let ((time (local-time:parse-timestring time-string)))
(format t "~A ~A" field-name (relative-time time)))))
(when times
(let* ((creator-id (assocrv :creator task))
(creator (if project-members
(assocrv :user (find creator-id project-members :key (assocrv-fn '(:user :user-id))))
(deftask:get-user creator-id)))
(created-at (local-time:parse-timestring (assocrv :created-at task)))
(updated-at (local-time:parse-timestring (assocrv :updated-at task))))
(termcolor:with-color (:style :dim)
(write-string " ")
(show-time (assocrv :created-at task) "Created")
(write-string ", ")
(show-time (assocrv :updated-at task) "last updated")
(terpri)))
(format t " Created by ~A ~A~%"
(assocrv :name creator)
(relative-time created-at)))
(when (not (roughly-same-time-p created-at updated-at))
(termcolor:with-color (:style :dim)
(format t " Last updated ~A~%" (relative-time updated-at))))))
(when labels
(when-let (label-ids (assocrv :label-ids task))
(setf project-labels (or project-labels (deftask:get-labels)))
(let* ((task-labels (mapcar (lambda (label-id)
(find label-id project-labels :key (assocrv-fn :label-id)))
label-ids))
(task-label-names (mapcar (assocrv-fn :name) task-labels)))
(termcolor:with-color (:style :dim)
(format t " Labels: ~{~A~^, ~}~%" task-label-names))))
(format t " Labels: ~{~A~^, ~}~%" task-label-names)))))
(when assignees
(when-let (assignee-ids (assocrv :assignee-ids task))
(setf project-members (or project-members
(deftask:get-project-members deftask:*project-id*)))
Expand All @@ -315,7 +321,12 @@
assignee-ids))
(assignee-names (mapcar (assocrv-fn '(:user :name)) assignees)))
(termcolor:with-color (:style :dim)
(format t " Assignees: ~{~A~^, ~}~%" assignee-names))))))
(format t " Assignees: ~{~A~^, ~}~%" assignee-names)))))
(when description
(when-let (task-description (assocrv :description task))
(terpri)
(write-string task-description)
(terpri))))

(defun subcommand-ls (argv)
(with-options-and-free-args (*ls-opts* argv)
Expand All @@ -324,9 +335,10 @@
(get-project-config-value :order-by)
"updated-at-desc"))
(page (or (get-opt-value :page) 1))
(response (deftask:list-tasks :query (get-opt-value :query)
(response (deftask:get-tasks :query (get-opt-value :query)
:order-by order-by
:page page))
:page page
:page-info t))
(tasks (assocrv :tasks response))
(labels (when (some (assocrv-fn :label-ids) tasks)
(deftask:get-labels)))
Expand All @@ -349,11 +361,53 @@
(dolist (task tasks)
(if (or (null detail) (string= detail "detailed"))
(print-task task
:detailed t
:times t
:labels t
:assignees t
:project-labels labels
:project-members members)
(print-task task)))))))

(defun print-comment (comment &key project-members)
(let* ((creator-id (assocrv :creator comment))
(creator (find creator-id project-members
:key (assocrv-fn '(:user :user-id)))))
(unless creator
(error "Couldn't find member with id: ~A" creator-id))
(termcolor:with-color (:style :dim)
(format t "Comment #~A by ~A~%"
(assocrv :comment-id comment)
(assocrv '(:user :name) creator)))
(termcolor:with-color (:style :dim)
(let ((created-at (local-time:parse-timestring (assocrv :created-at comment)))
(updated-at (local-time:parse-timestring (assocrv :updated-at comment))))
(format t "Created ~A" (relative-time created-at))
(when (not (roughly-same-time-p created-at updated-at))
(format t " (updated ~A)" (relative-time updated-at)))
(terpri)))
(terpri)
(write-string (assocrv :body comment))
(terpri)))

(defun subcommand-show (argv)
(with-token-and-project-id
(let* ((task-id (second argv))
(task (deftask:get-task task-id))
(comments (deftask:get-comments task-id))
(project-members (deftask:get-project-members deftask:*project-id*)))
(print-task task
:times t
:labels t
:assignees t
:description t
:project-members project-members)
(when comments
(dolist (comment comments)
(termcolor:with-color (:style :dim)
(write-string "---"))
(terpri)
(print-comment comment :project-members project-members))))))

(defun subcommand-close (argv)
(with-options-and-free-args (*main-opts* argv)
(with-token-and-project-id
Expand Down
25 changes: 16 additions & 9 deletions deftask.lisp
Expand Up @@ -4,8 +4,8 @@
#:current-user #:get-user
#:get-org #:get-org-members #:get-orgs
#:*project-id* #:get-project #:get-project-members #:get-projects
#:deftask #:list-tasks #:get-task #:close-task #:open-task #:edit-task
#:comment #:edit-comment
#:deftask #:get-tasks #:get-task #:close-task #:open-task #:edit-task
#:get-comments #:comment #:edit-comment
#:get-labels))

(in-package #:deftask)
Expand Down Expand Up @@ -56,7 +56,7 @@
`(("name" . ,name)))))

(defun get-orgs ()
(api-request :get #?"/orgs"))
(assocrv :orgs (api-request :get #?"/orgs")))

(defvar *project-id*)

Expand All @@ -81,12 +81,15 @@
,@(alist-for-sequence "label-id" label-ids)
,@(alist-for-sequence "assignee-id" assignee-ids))))

(defun list-tasks (&key query page order-by (project-id *project-id*))
(api-request :get #?"/projects/$(project-id)/tasks"
`(("query" . ,query)
("page" . ,(when page (format nil "~A" page)))
("order-by" . ,(when order-by
(string-downcase order-by))))))
(defun get-tasks (&key query page order-by page-info (project-id *project-id*))
(let ((response (api-request :get #?"/projects/$(project-id)/tasks"
`(("query" . ,query)
("page" . ,(when page (format nil "~A" page)))
("order-by" . ,(when order-by
(string-downcase order-by)))))))
(if page-info
response
(assocrv :tasks response))))

(defun get-task (task-id &key (project-id *project-id*))
(api-request :get #?"/projects/$(project-id)/tasks/$(task-id)"))
Expand All @@ -104,6 +107,10 @@
`(("title" . ,title)
("description" . ,description))))

(defun get-comments (task-id &key (project-id *project-id*))
(assocrv :comments
(api-request :get #?"/projects/$(project-id)/tasks/$(task-id)/comments")))

(defun comment (task-id body &key (project-id *project-id*))
(api-request :post #?"/projects/$(project-id)/tasks/$(task-id)/comments"
`(("body" . ,body))))
Expand Down
5 changes: 4 additions & 1 deletion utils.lisp
@@ -1,7 +1,7 @@
(defpackage #:deftask-utils
(:use #:cl)
(:export #:assocr #:assocrv #:assocrv-fn
#:relative-time))
#:relative-time #:roughly-same-time-p))

(in-package #:deftask-utils)

Expand Down Expand Up @@ -54,3 +54,6 @@
(cl-l10n:with-locale (find-locale locale)
;; FIXME: pattern should be locale specific
(format nil "~:[~;in ~]~A" sentencep (cl-l10n:format-date nil t1 :pattern "MMM yyyy")))))))

(defun roughly-same-time-p (t1 t2)
(< (abs (local-time:timestamp-difference t1 t2)) 1))

0 comments on commit a4d0991

Please sign in to comment.