diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ac8fc5b5d3a905a73f07e8fe07e29eca6a76f24a..a81a5c73f4470e27c318fc3f3ddb3931b24a2f9a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2013-11-25 Jan Tatarik + + * gnus-icalendar.el (gnus-icalendar-event-from-ical) + (gnus-icalendar-event->org-entry) + (gnus-icalendar--update-org-event) + (gnus-icalendar-event->gnus-calendar): Distinguish between + required/optional/non-participant attendee status. + 2013-11-21 Jan Tatarik * gnus-icalendar.el (gnus-icalendar-additional-identities): New. diff --git a/lisp/gnus-icalendar.el b/lisp/gnus-icalendar.el index 56c56f3dd466975da7b23edd257058ff63fb8bfd..35097f28a4edac83b13e4c167dcbd4ce6c090a2b 100644 --- a/lisp/gnus-icalendar.el +++ b/lisp/gnus-icalendar.el @@ -92,10 +92,10 @@ :accessor gnus-icalendar-event:rsvp :initform nil :type (or null boolean)) - (participation-required :initarg :participation-required - :accessor gnus-icalendar-event:participation-required - :initform t - :type (or null boolean)) + (participation-type :initarg :participation-type + :accessor gnus-icalendar-event:participation-type + :initform 'non-participant + :type (or null t)) (req-participants :initarg :req-participants :accessor gnus-icalendar-event:req-participants :initform nil @@ -196,14 +196,17 @@ (attendee (when attendee-name-or-email (gnus-icalendar-event--find-attendee ical attendee-name-or-email))) (attendee-names (gnus-icalendar-event--get-attendee-names ical)) + (role (plist-get (cadr attendee) 'ROLE)) + (participation-type (pcase role + ("REQ-PARTICIPANT" 'required) + ("OPT-PARTICIPANT" 'optional) + (_ 'non-participant))) (args (list :method method :organizer organizer :start-time (gnus-icalendar-event--decode-datefield event 'DTSTART) :end-time (gnus-icalendar-event--decode-datefield event 'DTEND) - :rsvp (string= (plist-get (cadr attendee) 'RSVP) - "TRUE") - :participation-required (string= (plist-get (cadr attendee) 'ROLE) - "REQ-PARTICIPANT") + :rsvp (string= (plist-get (cadr attendee) 'RSVP) "TRUE") + :participation-type participation-type :req-participants (cdar attendee-names) :opt-participants (cadr attendee-names))) (event-class (cond @@ -451,7 +454,7 @@ Return nil for non-recurring EVENT." ("DT" . ,(gnus-icalendar-event:org-timestamp event)) ("ORGANIZER" . ,(gnus-icalendar-event:organizer event)) ("LOCATION" . ,(gnus-icalendar-event:location event)) - ("PARTICIPATION_REQUIRED" . ,(when (gnus-icalendar-event:participation-required event) "t")) + ("PARTICIPATION_TYPE" . ,(symbol-name (gnus-icalendar-event:participation-type event))) ("REQ_PARTICIPANTS" . ,(gnus-icalendar--format-participant-list (gnus-icalendar-event:req-participants event))) ("OPT_PARTICIPANTS" . ,(gnus-icalendar--format-participant-list (gnus-icalendar-event:opt-participants event))) ("RRULE" . ,(gnus-icalendar-event:recur event)) @@ -513,7 +516,7 @@ is searched." (when file (with-current-buffer (find-file-noselect file) (with-slots (uid summary description organizer location recur - participation-required req-participants opt-participants) event + participation-type req-participants opt-participants) event (let ((event-pos (org-find-entry-with-id uid))) (when event-pos (goto-char event-pos) @@ -555,7 +558,7 @@ is searched." (org-entry-put event-pos "DT" (gnus-icalendar-event:org-timestamp event)) (org-entry-put event-pos "ORGANIZER" organizer) (org-entry-put event-pos "LOCATION" location) - (org-entry-put event-pos "PARTICIPATION_REQUIRED" (when participation-required "t")) + (org-entry-put event-pos "PARTICIPATION_TYPE" (symbol-name participation-type)) (org-entry-put event-pos "REQ_PARTICIPANTS" (gnus-icalendar--format-participant-list req-participants)) (org-entry-put event-pos "OPT_PARTICIPANTS" (gnus-icalendar--format-participant-list opt-participants)) (org-entry-put event-pos "RRULE" recur) @@ -691,12 +694,14 @@ only makes sense to define names or email addresses." (cadr x)))) (with-slots (organizer summary description location recur uid - method rsvp participation-required) event + method rsvp participation-type) event (let ((headers `(("Summary" ,summary) ("Location" ,(or location "")) ("Time" ,(gnus-icalendar-event:org-timestamp event)) ("Organizer" ,organizer) - ("Attendance" ,(if participation-required "Required" "Optional")) + ("Attendance" ,(if (eq participation-type 'non-participant) + "Your are not listed as an attendee" + (capitalize (symbol-name participation-type)))) ("Method" ,method)))) (when (and (not (gnus-icalendar-event-reply-p event)) rsvp)