diff options
-rw-r--r-- | rt-liberation.el | 87 |
1 files changed, 12 insertions, 75 deletions
diff --git a/rt-liberation.el b/rt-liberation.el index c8c4904..591c4bd 100644 --- a/rt-liberation.el +++ b/rt-liberation.el @@ -83,9 +83,6 @@ "^Type: \\(EmailRecord\\|CommentEmailRecord\\|Correspond\\)" "Regular expression for correspondence sections.") -(defvar rt-liber-rt-binary "~/rt-X.Y.Z/bin/rt" - "Location of the RT CLI binary.") - (defvar rt-liber-rt-version "X.Y.Z" "Version of the RT CLI.") @@ -183,7 +180,8 @@ server.") (defvar rt-liber-field-dictionary '((owner . "Owner") (queue . "Queue") - (status . "Status")) + (status . "Status") + (priority . "Priority")) "Mapping between field symbols and RT field strings. The field symbols provide the programmer with a consistent way of @@ -341,27 +339,9 @@ AFTER date after predicate." ;;; -------------------------------------------------------- -;;; Query runner +;;; Parse Answer ;;; -------------------------------------------------------- -(defun rt-liber-query-runner (op query-string) - "Run OP query against the server with QUERY-STRING." - (message "started '%s' query at %s..." op (current-time-string)) - (condition-case excep - (with-temp-buffer - (if (and (not (rt-liber-version-< rt-liber-rt-version - "3.8.2")) - (string= op "show")) - (call-process rt-liber-rt-binary nil t nil - op "-l" query-string) - (call-process rt-liber-rt-binary nil t nil - op query-string)) - (message "query ended at %s" (current-time-string)) - (buffer-string)) - (file-error - (error "could not find the RT binary at: %s" rt-liber-rt-binary)) - (error "an unhandled exception occured: %s" excep))) - (defun rt-liber-parse-answer (answer-string parser-f) "Operate on ANSWER-STRING with PARSER-F." (with-temp-buffer @@ -621,7 +601,7 @@ AFTER date after predicate." "Key map for ticket viewer.") (define-derived-mode rt-liber-viewer-mode nil - "RT Liberation Viewer" + "RT Liberation Viewer" "Major Mode for viewing RT tickets. \\{rt-liber-viewer-mode-map}" (set @@ -1129,14 +1109,13 @@ string then that will be the name of the new buffer." (define-key map (kbd "A") 'rt-liber-browser-ancillary-text) (define-key map (kbd "SPC") 'scroll-up) (define-key map (kbd "DEL") 'scroll-down) - (define-key map (kbd "m") 'rt-liber-browser-move) (define-key map (kbd "M") 'rt-liber-mark-ticket-at-point) (define-key map (kbd "P") 'rt-liber-browser-prioritize) map) "Key map for ticket browser.") (define-derived-mode rt-liber-browser-mode nil - "RT Liberation Browser" + "RT Liberation Browser" "Major Mode for browsing RT tickets. \\{rt-liber-browser-mode-map}" (set (make-local-variable 'revert-buffer-function) @@ -1235,49 +1214,10 @@ string then that will be the name of the new buffer." custom-field-symbol rt-liber-custom-field-dictionary)) -(defun rt-liber-command-runner (op arg-string) - "Run OP command against the server with ARG-STRING." - (message "started '%s' command at %s..." op (current-time-string)) - (condition-case excep - (with-temp-buffer - (call-process-shell-command rt-liber-rt-binary nil t nil - op arg-string) - (message "command ended at %s" (current-time-string)) - (buffer-string)) - (file-error - (error "could not find the RT binary at: %s" rt-liber-rt-binary)) - (error "an unhandled exception occured: %s" excep))) - (defun rt-liber-command-runner-parser-f () "Display command return status from the server to the user." (message (buffer-string))) -(defun rt-liber-command-set-status (id status) - "Set ticket ID status to be STATUS." - (let ((command (rt-liber-command-get-command-string 'edit)) - (args - (format "ticket/%s set status=%s" id status))) - (rt-liber-parse-answer - (rt-liber-command-runner command args) - 'rt-liber-command-runner-parser-f))) - -(defun rt-liber-command-set-priority (id priority) - "Set ticket ID priority to be PRIORITY." - (let ((command (rt-liber-command-get-command-string 'edit)) - (args - (format "ticket/%s set priority=%s" - id - (if (= priority 0) - ;; this is to work around a weird bug in RT - ;; (3.8.8) in which the CLI command to set the - ;; priority to 0 doesn't work, but sending 00 - ;; does - "00" - (format "%d" priority))))) - (rt-liber-parse-answer - (rt-liber-command-runner command args) - 'rt-liber-command-runner-parser-f))) - (defun rt-liber-command-set-status-deleted (id) "Set the status of ticket ID to `deleted'." (rt-liber-rest-command-set @@ -1316,9 +1256,14 @@ string then that will be the name of the new buffer." (defun rt-liber-browser-prioritize (n) "Assigng current ticket priority N." (interactive "nPriority (number): ") - (rt-liber-command-set-priority + (rt-liber-rest-command-set (rt-liber-browser-ticket-id-at-point) - n) + (rt-liber-get-field-string 'priority) + ;; Work around the strangeness of RT. RT doesn't accept "0" as + ;; string to set priority to 0, but does accept "00". + (if (< 0 n) + (format "%s" n) + "00")) (rt-liber-browser-refresh-and-return)) (defun rt-liber-browser-assign (name) @@ -1355,14 +1300,6 @@ string then that will be the name of the new buffer." (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: ") - (rt-liber-command-set-queue - (rt-liber-browser-ticket-id-at-point) - queue) - (rt-liber-browser-refresh)) - (defun rt-liber-browser-take-ticket-at-point () "Assign the ticket under point to `rt-liber-username'." (interactive) |