branch: externals/rt-liberation
commit b1a1dc690b2baaef9058882668d9945217e53353
Author: Yoni Rabkin <y...@rabkins.net>
Commit: Yoni Rabkin <y...@rabkins.net>

    * rt-liberation.el: prep for mail
---
 rt-liberation.el | 45 +++++++++++++++++++++++++++++++++++++--------
 1 file changed, 37 insertions(+), 8 deletions(-)

diff --git a/rt-liberation.el b/rt-liberation.el
index af2eb26..b364839 100644
--- a/rt-liberation.el
+++ b/rt-liberation.el
@@ -1350,19 +1350,19 @@ ASSOC-BROWSER if non-nil should be a ticket browser."
     section))
 
 (defun rt-liber-viewer2-format-content (content)
+  "Wrangle RT's content format."
   (with-temp-buffer
     (insert content)
-
     (goto-char (point-min))
     (if (re-search-forward "^This transaction appears to have no content" 
(point-max) t)
-       ""
-      ;; remove leading blank lines
+       "" ; make no content mean... no content
+      ;; trim leading blank lines
       (save-excursion
        (goto-char (point-min))
        (re-search-forward "[[:graph:]]" (point-max) t)
        (forward-line -1)
        (flush-lines "^[[:space:]]+$" (point-min) (point)))
-      ;; remove trailing blank lines
+      ;; trim trailing blank lines
       (save-excursion
        (goto-char (point-max))
        (re-search-backward "[[:graph:]]" (point-min) t)
@@ -1381,8 +1381,25 @@ ASSOC-BROWSER if non-nil should be a ticket browser."
       (buffer-substring (point-min)
                        (point-max)))))
 
+(defun rt-liber-viewer2-clean-content (section)
+  "Format section content for email."
+  (with-temp-buffer
+    (insert (rt-liber-viewer2-format-content
+            (alist-get 'Content section)))
+    (goto-char (point-min))
+    (while (re-search-forward "^    " (point-max) t)
+      (replace-match ""))
+    ;; fill
+    (let ((paragraph-separate ">[[:space:]]+$"))
+      (fill-region (point-min)
+                  (point-max)))
+    ;; finally
+    (buffer-substring (point-min)
+                     (point-max))))
+
 (defun rt-liber-viewer2-display-section (section)
-  (let ((ticket-id (alist-get 'Ticket section))
+  (let ((start     (point))
+       (ticket-id (alist-get 'Ticket section))
        (creator   (alist-get 'Creator section))
        (date      (alist-get 'Created section))
        (type      (alist-get 'Type section))
@@ -1390,7 +1407,8 @@ ASSOC-BROWSER if non-nil should be a ticket browser."
        (oldvalue  (alist-get 'OldValue section))
        (newvalue  (alist-get 'NewValue section))
        (field     (alist-get 'Field section))
-       (start     (point)))
+       (s-content (rt-liber-viewer2-format-content
+                   (alist-get 'Content section))))
     (when (not (or (string= type "CommentEmailRecord")
                   (string= type "EmailRecord")))
       (insert
@@ -1427,8 +1445,7 @@ ASSOC-BROWSER if non-nil should be a ticket browser."
            ;; catch-all
            (t
             (insert
-             (format "\n%s\n"
-                     (rt-liber-viewer2-format-content content))))))))
+             (format "\n%s\n" s-content)))))))
 
 (defun rt-liber-viewer2-display-history (contents)
   (let ((section-list (rt-liber-viewer-parse-history contents)))
@@ -1495,6 +1512,18 @@ ASSOC-BROWSER if non-nil should be a ticket browser."
       (goto-char prev)
       (forward-line -1))))
 
+(defun rt-liber-viewer2-answer ()
+  (interactive)
+  (let ((section (rt-liber-viewer2-get-section-data)))
+    (when (not section)
+      (error "no section found"))
+    (if (not (featurep 'rt-liberation-gnus))
+       (error "rt-liberation-gnus feature not found")
+      (rt-liber-gnus-compose
+       rt-liber-gnus-address
+       rt-liber-ticket-local
+       `((contents . ,(rt-liber-viewer2-clean-content section)))))))
+
 (defconst rt-liber-viewer2-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map (kbd "q") 'rt-liber-viewer2-mode-quit)

Reply via email to