Gnus development mailing list
 help / color / mirror / Atom feed
* PATCH: bugfix and improvements for gnus-icalendar
@ 2013-11-25 22:52 Jan Tatarik
  2013-11-28 21:05 ` Adam Sjøgren
  0 siblings, 1 reply; 4+ messages in thread
From: Jan Tatarik @ 2013-11-25 22:52 UTC (permalink / raw)
  To: ding

[-- Attachment #1: Type: text/plain, Size: 177 bytes --]

Hi,

the first patch fixes an issue with the list of required event
participants that gets exported to org. The first required participant's
name was being omitted by mistake.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: fix_req_participants.patch --]
[-- Type: text/x-diff, Size: 1240 bytes --]

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index ac8fc5b5d3a905a73f07e8fe07e29eca6a76f24a..2d0a96cc7755bd70b9db952fece2744f9db05fa0 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-25  Jan Tatarik  <jan.tatarik@gmail.com>
+
+	* gnus-icalendar.el (gnus-icalendar-event-from-ical): Fix bug causing
+	the first required event participant to be omitted.
+
 2013-11-21  Jan Tatarik  <jan.tatarik@gmail.com>
 
 	* gnus-icalendar.el (gnus-icalendar-additional-identities): New.
diff --git a/lisp/gnus-icalendar.el b/lisp/gnus-icalendar.el
index 56c56f3dd466975da7b23edd257058ff63fb8bfd..ef7bdb890dd531b6f88d5fda7b2bd09eb7c8c3e7 100644
--- a/lisp/gnus-icalendar.el
+++ b/lisp/gnus-icalendar.el
@@ -204,7 +204,7 @@
                                     "TRUE")
                      :participation-required (string= (plist-get (cadr attendee) 'ROLE)
                                                       "REQ-PARTICIPANT")
-                     :req-participants (cdar attendee-names)
+                     :req-participants (car attendee-names)
                      :opt-participants (cadr attendee-names)))
          (event-class (cond
                        ((string= method "REQUEST") 'gnus-icalendar-event-request)

[-- Attachment #3: Type: text/plain, Size: 242 bytes --]


The second patch fixes an issue with calendar events for which the user
is neither required nor optional participant. Both the article buffer
and the org entry will now show the proper attendance status
(required/optional/non-participant).


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: opt_reply.patch --]
[-- Type: text/x-diff, Size: 5873 bytes --]

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  <jan.tatarik@gmail.com>
+
+	* 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  <jan.tatarik@gmail.com>
 
 	* 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)

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: PATCH: bugfix and improvements for gnus-icalendar
  2013-11-25 22:52 PATCH: bugfix and improvements for gnus-icalendar Jan Tatarik
@ 2013-11-28 21:05 ` Adam Sjøgren
  2013-11-28 21:45   ` Jan Tatarik
  0 siblings, 1 reply; 4+ messages in thread
From: Adam Sjøgren @ 2013-11-28 21:05 UTC (permalink / raw)
  To: ding

Jan Tatarik <jan.tatarik@gmail.com> writes:

> the first patch [...]

> The second patch [...]

Regardless of what order I apply them in, I always get a conflict in
gnus-icalendar.el when handling the last patch.

Could you perhaps make the patches so they don't collide?

Maybe I'm just dense when applying them...


  Best regards,

    Adam

-- 
 "I think I've learned by now                                 Adam Sjøgren
  There's never an easy way"                             asjo@koldfront.dk




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: PATCH: bugfix and improvements for gnus-icalendar
  2013-11-28 21:05 ` Adam Sjøgren
@ 2013-11-28 21:45   ` Jan Tatarik
  2013-11-28 22:46     ` Adam Sjøgren
  0 siblings, 1 reply; 4+ messages in thread
From: Jan Tatarik @ 2013-11-28 21:45 UTC (permalink / raw)
  To: ding

[-- Attachment #1: Type: text/plain, Size: 470 bytes --]

On Thu, Nov 28 2013, Adam Sjøgren wrote:

> Jan Tatarik <jan.tatarik@gmail.com> writes:

>> the first patch [...]

>> The second patch [...]

> Regardless of what order I apply them in, I always get a conflict in
> gnus-icalendar.el when handling the last patch.

> Could you perhaps make the patches so they don't collide?

> Maybe I'm just dense when applying them...

Sorry, haven't tried myself before submitting them.

Here you go, all in one.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: opt_reply.patch --]
[-- Type: text/x-diff, Size: 5401 bytes --]

diff --git a/lisp/gnus-icalendar.el b/lisp/gnus-icalendar.el
index 56c56f3dd466975da7b23edd257058ff63fb8bfd..5f152921b663850918be8bfcb3a76f5e69bc1d6d 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,15 +196,18 @@
          (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")
-                     :req-participants (cdar attendee-names)
+                     :rsvp (string= (plist-get (cadr attendee) 'RSVP) "TRUE")
+                     :participation-type participation-type
+                     :req-participants (car attendee-names)
                      :opt-participants (cadr attendee-names)))
          (event-class (cond
                        ((string= method "REQUEST") 'gnus-icalendar-event-request)
@@ -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)
+                                         "You are not listed as an attendee"
+                                       (capitalize (symbol-name participation-type))))
                       ("Method" ,method))))
 
        (when (and (not (gnus-icalendar-event-reply-p event)) rsvp)

[-- Attachment #3: Type: text/plain, Size: 379 bytes --]


The Changelog entry:

2013-11-25	Jan Tatarik	 <jan.tatarik@gmail.com>

	* 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. Fix bug causing
	the first required event participant to be omitted.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: PATCH: bugfix and improvements for gnus-icalendar
  2013-11-28 21:45   ` Jan Tatarik
@ 2013-11-28 22:46     ` Adam Sjøgren
  0 siblings, 0 replies; 4+ messages in thread
From: Adam Sjøgren @ 2013-11-28 22:46 UTC (permalink / raw)
  To: ding

Jan Tatarik <jan.tatarik@gmail.com> writes:

> Here you go, all in one.

Thanks; applied.


  Best regards,

    Adam

-- 
 "There are slight differences between the two, but           Adam Sjøgren
  ultimately the choice between them is largely a        asjo@koldfront.dk
  matter of style (with the former being preferable)."




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-11-28 22:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-11-25 22:52 PATCH: bugfix and improvements for gnus-icalendar Jan Tatarik
2013-11-28 21:05 ` Adam Sjøgren
2013-11-28 21:45   ` Jan Tatarik
2013-11-28 22:46     ` Adam Sjøgren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).