diff options
-rw-r--r-- | org-clubhouse.el | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/org-clubhouse.el b/org-clubhouse.el index cb878a4d72f8..8163fa3d342a 100644 --- a/org-clubhouse.el +++ b/org-clubhouse.el @@ -692,39 +692,39 @@ children of that headline into tasks in the task list of the story." :data (json-encode `((description . ,title))))) (defun org-clubhouse-push-task-list (&optional parent-clubhouse-id child-elts) - "Writes each child element of the current clubhouse element as a task list -item of the associated clubhouse ID. + "Writes each child of the element at point as a task list item. -when called as (org-clubhouse-push-task-list PARENT-CLUBHOUSE-ID CHILD-ELTS), +When called as (org-clubhouse-push-task-list PARENT-CLUBHOUSE-ID CHILD-ELTS), allows manually passing a clubhouse ID and list of org-element plists to write" (interactive) (let* ((elt (org-element-and-children-at-point)) (parent-clubhouse-id (or parent-clubhouse-id (org-element-extract-clubhouse-id elt))) (child-elts (or child-elts (plist-get elt :children))) - ;; (story (org-clubhouse-get-story parent-clubhouse-id)) - ;; (existing-tasks (alist-get 'tasks story)) - ;; (task-exists - ;; (lambda (task-name) - ;; (some (lambda (task) - ;; (string-equal task-name (alist-get 'description task))) - ;; (existing-tasks)))) - ) - (dolist (child-elt child-elts) - (let ((task-name (plist-get child-elt :title))) - ;; (unless (task-exists task-name) - (let ((task (org-clubhouse-create-task - task-name - :story-id parent-clubhouse-id))) - ;; TODO this doesn't currently work, since the act of populating the - ;; previous task bumps up the char start of the next task - ;; (org-clubhouse-populate-created-task child-elt task) - ) - ;; ) - )))) - -(defun org-clubhouse-populate-created-task (elt task) - (let ((elt-start (plist-get elt :begin)) + (story (org-clubhouse-get-story parent-clubhouse-id)) + (existing-tasks (alist-get 'tasks story)) + (task-exists + (lambda (task-name) + (cl-some (lambda (task) + (string-equal task-name (alist-get 'description task))) + existing-tasks))) + (elts-with-starts + (-map (lambda (e) (cons (set-marker (make-marker) + (plist-get e :begin)) + e)) + child-elts))) + (dolist (child-elt-and-start elts-with-starts) + (let* ((start (car child-elt-and-start)) + (child-elt (cdr child-elt-and-start)) + (task-name (plist-get child-elt :title))) + (unless (funcall task-exists task-name) + (let ((task (org-clubhouse-create-task + task-name + :story-id parent-clubhouse-id))) + (org-clubhouse-populate-created-task child-elt task start))))))) + +(defun org-clubhouse-populate-created-task (elt task &optional begin) + (let ((elt-start (or begin (plist-get elt :begin))) (task-id (alist-get 'id task)) (story-id (alist-get 'story_id task))) |