From 5dc7165c1c67c420300ee6c1837a1eec0aaa475c Mon Sep 17 00:00:00 2001 From: Yoni Rabkin Date: Wed, 25 Mar 2015 12:17:04 -0400 Subject: Port status changes to REST interface. --- rt-liberation-rest.el | 10 +++++++++- rt-liberation.el | 38 +++++++++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/rt-liberation-rest.el b/rt-liberation-rest.el index af8c1a5..dec5b57 100644 --- a/rt-liberation-rest.el +++ b/rt-liberation-rest.el @@ -244,6 +244,7 @@ (defun rt-liber-rest-edit-runner (ticket-id field value) "Run edit comment to set FIELD to VALUE." (message "started edit command at %s..." (current-time-string)) + (message "ticket #%s, %s <- %s" ticket-id field value) (let ((request-data (format "content=%s: %s" (url-hexify-string field) @@ -260,7 +261,14 @@ rt-liber-rest-username rt-liber-rest-password))) (rt-liber-rest-handle-response response-buffer))) - (message "command ended at %s" (current-time-string))) + (message "edit command ended at %s" (current-time-string))) + +(defun rt-liber-rest-command-set-status (id status) + "Set ticket ID status to be STATUS." + (let ((field (rt-liber-get-field-string 'status))) + (rt-liber-parse-answer + (rt-liber-rest-edit-runner id field status) + 'rt-liber-command-runner-parser-f))) (provide 'rt-liberation-rest) diff --git a/rt-liberation.el b/rt-liberation.el index a266123..849dec2 100644 --- a/rt-liberation.el +++ b/rt-liberation.el @@ -181,7 +181,8 @@ specific strings which would produce the desired effect in the server.") (defvar rt-liber-field-dictionary - '((owner . "Owner")) + '((owner . "Owner") + (status . "Status")) "Mapping between field symbols and RT field strings. The field symbols provide the programmer with a consistent way of @@ -190,7 +191,8 @@ referring to RT fields.") (defvar rt-liber-status-dictionary '((deleted . "deleted") (resolved . "resolved") - (open . "open")) + (open . "open") + (new . "new")) "Mapping between status symbols and status strings. The status symbols provide the programmer with a consistent way @@ -550,13 +552,14 @@ AFTER date after predicate." (defun rt-liber-get-field-string (field-symbol) (when (not field-symbol) (error "null field symbol")) + (cdr (assoc field-symbol rt-liber-field-dictionary))) - (defun rt-liber-ticket-owner-only (ticket-alist) - "Return the string value of the ticket owner." - (when (not ticket-alist) - (error "null ticket-alist")) - (cdr (assoc (rt-liber-get-field-string 'owner)) - ticket-alist))) +(defun rt-liber-ticket-owner-only (ticket-alist) + "Return the string value of the ticket owner." + (when (not ticket-alist) + (error "null ticket-alist")) + (cdr (assoc (rt-liber-get-field-string 'owner) + ticket-alist))) (defun rt-liber-viewer-visit-in-browser () "Visit this ticket in the RT Web interface." @@ -1147,6 +1150,7 @@ string then that will be the name of the new buffer." (define-key map (kbd "a") 'rt-liber-browser-assign) (define-key map (kbd "r") 'rt-liber-browser-resolve) (define-key map (kbd "o") 'rt-liber-browser-open) + (define-key map (kbd "N") 'rt-liber-browser-new) (define-key map (kbd "t") 'rt-liber-browser-take-ticket-at-point) (define-key map (kbd "A") 'rt-liber-browser-ancillary-text) (define-key map (kbd "SPC") 'scroll-up) @@ -1316,17 +1320,22 @@ If FIELD already exists, update to VALUE." (defun rt-liber-command-set-status-deleted (id) "Set the status of ticket ID to `deleted'." - (rt-liber-command-set-status + (rt-liber-rest-command-set-status id (rt-liber-command-get-status-string 'deleted))) +(defun rt-liber-command-set-status-new (id) + "Set the status of ticket ID to `new'." + (rt-liber-rest-command-set-status + id (rt-liber-command-get-status-string 'new))) + (defun rt-liber-command-set-status-resolved (id) "Set the status of ticket ID to `resolved'." - (rt-liber-command-set-status + (rt-liber-rest-command-set-status id (rt-liber-command-get-status-string 'resolved))) (defun rt-liber-command-set-status-open (id) "Set the status of ticket ID to `open'." - (rt-liber-command-set-status + (rt-liber-rest-command-set-status id (rt-liber-command-get-status-string 'open))) ;; This is brittle because the server doesn't respond with a code but @@ -1394,6 +1403,13 @@ If FIELD already exists, update to VALUE." (rt-liber-browser-ticket-id-at-point)) (rt-liber-browser-refresh-and-return)) +(defun rt-liber-browser-new () + "Change the current ticket's status to `new'." + (interactive) + (rt-liber-command-set-status-new + (rt-liber-browser-ticket-id-at-point)) + (rt-liber-browser-refresh-and-return)) + (defun rt-liber-browser-move (queue) "Move the current ticket to a different queue." (interactive "sQueue: ") -- cgit v1.2.3