[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master ba7b6c9 05/11: Excorporate: Add some helper functions to O
From: |
Thomas Fitzsimmons |
Subject: |
[elpa] master ba7b6c9 05/11: Excorporate: Add some helper functions to Org backend |
Date: |
Thu, 24 Sep 2020 21:54:52 -0400 (EDT) |
branch: master
commit ba7b6c921676d35d90c7f0c8dec235e67565c4ec
Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
Commit: Thomas Fitzsimmons <fitzsim@fitzsim.org>
Excorporate: Add some helper functions to Org backend
* packages/excorporate/excorporate-org.el
(exco-org--item-identifier-at-point): New helper function.
(exco-org--handle-response): New macro.
(exco-org--remove-element): New helper function.
(exco-org-cancel-meeting): Call new helper macro and functions.
(exco-org-delete-appointment): Likewise.
---
packages/excorporate/excorporate-org.el | 90 ++++++++++++++++-----------------
1 file changed, 44 insertions(+), 46 deletions(-)
diff --git a/packages/excorporate/excorporate-org.el
b/packages/excorporate/excorporate-org.el
index 78d04ff..25b7986 100644
--- a/packages/excorporate/excorporate-org.el
+++ b/packages/excorporate/excorporate-org.el
@@ -41,6 +41,12 @@
(string-match "Calendar (\\(.*\\))$" headline)
(car (read-from-string (match-string 1 headline)))))
+(defun exco-org--item-identifier-at-point ()
+ "Return the item identifier associated with point."
+ (car
+ (read-from-string
+ (org-entry-get (car (org-get-property-block)) "Identifier"))))
+
(defun exco-org--is-meeting ()
"Return t if the entry at point is a meeting, not an appointment."
(save-excursion
@@ -78,6 +84,32 @@
(t
(error "Did not recognize error")))))
+(defmacro exco-org--handle-response (response
+ response-type success failure &rest forms)
+ "Handle a server response RESPONSE.
+RESPONSE-TYPE is one of CreateItemResponseMessage or
+DeleteItemResponseMessage. SUCCESS and FAILURE are strings added
+to the success and failure messages to the user. FORMS are what
+to do, starting from point being in the calendar entry being
+operated on."
+ `(let ((response-code (exco-extract-value '(ResponseMessages
+ ,response-type
+ ResponseCode)
+ ,response)))
+ (if (equal response-code "NoError")
+ (progn ,@forms (message "excorporate-org: Successfully %s" ,success))
+ (message "excorporate-org: Failed to %s: %S" ,failure ,response))))
+
+(defun exco-org--remove-element ()
+ "Remove the element at point."
+ (with-current-buffer (get-buffer-create excorporate-org-buffer-name)
+ (save-excursion
+ (org-back-to-heading)
+ (let* ((inhibit-read-only t)
+ (element (org-element-at-point))
+ (begin (org-element-property :begin element))
+ (end (org-element-property :end element)))
+ (delete-region begin end)))))
(defun exco-org-cancel-meeting ()
"Cancel the meeting at point, prompting for a cancellation message."
(interactive)
@@ -85,8 +117,7 @@
(error (concat "This looks like an appointment,"
" try `exco-org-delete-appointment' instead.")))
(let ((identifier (exco-org--connection-identifier-at-point))
- (item-identifier
- (org-entry-get (car (org-get-property-block)) "Identifier")))
+ (item-identifier (exco-org--item-identifier-at-point)))
;; Make sure the meeting owner matches the connection owner before
;; attempting to cancel the meeting.
(unless (exco-org--organizer-matches-connection)
@@ -94,29 +125,13 @@
" meetings for which you are the organizer")))
(when item-identifier
(exco-calendar-item-meeting-cancel
- identifier
- (car (read-from-string item-identifier))
+ identifier item-identifier
(read-from-minibuffer "Cancellation message: ")
(lambda (identifier response)
- (let ((response-code
- (exco-extract-value '(ResponseMessages
- CreateItemResponseMessage
- ResponseCode)
- response)))
- (if (equal response-code "NoError")
- (with-current-buffer (get-buffer-create
- excorporate-org-buffer-name)
- (save-excursion
- (org-back-to-heading)
- (let* ((inhibit-read-only t)
- (element (org-element-at-point))
- (begin (org-element-property :begin element))
- (end (org-element-property :end element)))
- (kill-region begin end)
- (message
- "excorporate-org: Successfully cancelled meeting"))))
- (message "excorporate-org: Failed to cancel meeting: %S"
- response-code))))))))
+ (exco-org--handle-response
+ response CreateItemResponseMessage
+ "cancelled meeting" "cancel meeting"
+ (exco-org--remove-element)))))))
(defun exco-org-delete-appointment ()
"Delete the appointment at point."
@@ -124,32 +139,15 @@
(when (exco-org--is-meeting)
(error "This looks like a meeting, try `exco-org-cancel-meeting' instead"))
(let ((identifier (exco-org--connection-identifier-at-point))
- (item-identifier
- (org-entry-get (car (org-get-property-block)) "Identifier")))
+ (item-identifier (exco-org--item-identifier-at-point)))
(when item-identifier
(exco-calendar-item-appointment-delete
- identifier
- (car (read-from-string item-identifier))
+ identifier item-identifier
(lambda (identifier response)
- (let ((response-code
- (exco-extract-value '(ResponseMessages
- DeleteItemResponseMessage
- ResponseCode)
- response)))
- (if (equal response-code "NoError")
- (with-current-buffer (get-buffer-create
- excorporate-org-buffer-name)
- (save-excursion
- (org-back-to-heading)
- (let* ((inhibit-read-only t)
- (element (org-element-at-point))
- (begin (org-element-property :begin element))
- (end (org-element-property :end element)))
- (kill-region begin end)
- (message
- "excorporate-org: Successfully deleted appointment"))))
- (message "excorporate-org: Failed to delete appointment: %S"
- response-code))))))))
+ (exco-org--handle-response
+ response DeleteItemResponseMessage
+ "deleted appointment" "delete appointment"
+ (exco-org--remove-element)))))))
(defun exco-org-initialize-buffer ()
"Add initial text to the destination buffer."
- [elpa] master updated (fdfd986 -> 9ce646f), Thomas Fitzsimmons, 2020/09/24
- [elpa] master ba7b6c9 05/11: Excorporate: Add some helper functions to Org backend,
Thomas Fitzsimmons <=
- [elpa] master 9ce646f 11/11: Excorporate: Document API usage in manual, Thomas Fitzsimmons, 2020/09/24
- [elpa] master 030ea89 02/11: Excorporate: Adjust some documentation strings, Thomas Fitzsimmons, 2020/09/24
- [elpa] master a078150 01/11: Excorporate: Support replying to meeting requests, Thomas Fitzsimmons, 2020/09/24
- [elpa] master 05bd7d0 03/11: Excorporate: Change organizer representation, Thomas Fitzsimmons, 2020/09/24
- [elpa] master 5281378 04/11: Excorporate: Add an organizer resolver function, Thomas Fitzsimmons, 2020/09/24
- [elpa] master 5df7dfd 06/11: Excorporate: Simplify organizer handling in Org backend, Thomas Fitzsimmons, 2020/09/24
- [elpa] master 3bd310b 07/11: Excorporate: Support replying to meeting requests in Org buffer, Thomas Fitzsimmons, 2020/09/24
- [elpa] master 57020a8 08/11: Excorporate: Fix some byte compiler warnings, Thomas Fitzsimmons, 2020/09/24
- [elpa] master 064a111 09/11: Excorporate: Require Org 9.0 or newer, Thomas Fitzsimmons, 2020/09/24
- [elpa] master 137f24e 10/11: Excorporate: Document new interactive functions, Thomas Fitzsimmons, 2020/09/24