From debbugs-submit-bounces@debbugs.gnu.org Fri Jul 30 16:40:25 2010 Received: (at submit) by debbugs.gnu.org; 30 Jul 2010 20:40:25 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OewNT-00010g-S2 for submit@debbugs.gnu.org; Fri, 30 Jul 2010 16:40:24 -0400 Received: from mail.gnu.org ([199.232.76.166] helo=mx10.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OerRQ-0007IK-OX for submit@debbugs.gnu.org; Fri, 30 Jul 2010 11:24:10 -0400 Received: from lists.gnu.org ([199.232.76.165]:51395) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1OerRg-000555-C1 for submit@debbugs.gnu.org; Fri, 30 Jul 2010 11:24:24 -0400 Received: from [140.186.70.92] (port=37329 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OerRJ-0007b4-Ir for bug-gnu-emacs@gnu.org; Fri, 30 Jul 2010 11:24:24 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00, DATE_IN_PAST_12_24, T_RP_MATCHES_RCVD autolearn=no version=3.3.1 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OerR0-0003Zb-9K for bug-gnu-emacs@gnu.org; Fri, 30 Jul 2010 11:23:56 -0400 Received: from ita4fw1.itasoftware.com ([63.107.91.99]:10494 helo=ita4mta2.internal.itasoftware.com) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OerR0-0003Yw-4I for bug-gnu-emacs@gnu.org; Fri, 30 Jul 2010 11:23:42 -0400 Received: from leng-speters (lb1.dc4nat177.dc4.internal.itasoftware.com [10.4.199.177]) by ita4mta2.internal.itasoftware.com (Postfix) with ESMTP id E0B2519D805F for ; Fri, 30 Jul 2010 11:23:40 -0400 (EDT) Received: by leng-speters (Postfix, from userid 1000) id AFCA45D038C; Thu, 29 Jul 2010 15:13:10 -0400 (EDT) To: bug-gnu-emacs@gnu.org Sent-via: bug-gnu-emacs@gnu.org Subject: [PATCH] icalendar.el: Handle multiple BYDAY values in a WEEKLY RRULE. Message-Id: <20100729191310.AFCA45D038C@leng-speters> Date: Thu, 29 Jul 2010 15:13:10 -0400 (EDT) From: speters@itasoftware.com (Stephen Peters) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-Spam-Score: -2.4 (--) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Fri, 30 Jul 2010 16:40:22 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.7 (---) When trying to use icalendar-import-file to create a diary file from my work calendar, I noticed that recurring events for multiple days in a week were not properly handled. Here's an example .ics file, including both timed and all-day events: ----------z.ics---------- BEGIN:VCALENDAR VERSION:2.0 BEGIN:VTIMEZONE TZID:America/New_York BEGIN:STANDARD DTSTART:19710101T020000 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD BEGIN:DAYLIGHT DTSTART:19710101T020000 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT CLASS:PUBLIC DTEND;TZID=America/New_York:20100421T120000 DTSTAMP:20100525T141214Z DTSTART;TZID=America/New_York:20100421T113000 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,TH,FR SEQUENCE:1 STATUS:CONFIRMED SUMMARY:Scrum TRANSP:OPAQUE UID:8814e3f9-7482-408f-996c-3bfe486a1262 END:VEVENT BEGIN:VEVENT CLASS:PUBLIC DTSTAMP:20100525T141214Z DTSTART;VALUE=DATE:20100422 DTEND;VALUE=DATE:20100423 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH SEQUENCE:1 SUMMARY:Tues + Thurs thinking TRANSP:OPAQUE UID:8814e3f9-7482-408f-996c-3bfe486a1263 END:VEVENT END:VCALENDAR ==========z.ics========== Using icalendar-import-file on this .ics file will create diary entries that only repeat once a week, not the multiple days per week that are indicated. To fix this, I'm submitting a patch to icalendar.el which will parse multiple days from the BYDAY property and use it to create a diary entry based on the calendar-day-of-week value. Please note that this also changes the icalendar--split-value function so that it doesn't stop at the first comma in VALUE-STRING. diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el index a07402a..f7ae466 100644 --- a/lisp/calendar/icalendar.el +++ b/lisp/calendar/icalendar.el @@ -427,7 +427,7 @@ children." (goto-char (point-min)) (while (re-search-forward - "\\([A-Za-z0-9-]+\\)=\\(\\([^;,:]+\\)\\|\"\\([^\"]+\\)\"\\);?" + "\\([A-Za-z0-9-]+\\)=\\(\\([^;:]+\\)\\|\"\\([^\"]+\\)\"\\);?" nil t) (setq param-name (intern (match-string 1))) (setq param-value (match-string 2)) @@ -744,6 +744,19 @@ Note that this silently ignores seconds." ;; Error: -1)) +(defun icalendar--get-weekday-numbers (abbrevweekdays) + "Return the list of numbers for the comma-separated ABBREVWEEKDAYS." + (let* ((num -1) + (weekday-alist (mapcar (lambda (day) + (progn + (setq num (1+ num)) + (cons (downcase day) num))) + icalendar--weekday-array))) + (delq nil + (mapcar (lambda (abbrevday) + (cdr (assoc abbrevday weekday-alist))) + (split-string (downcase abbrevweekdays) ","))))) + (defun icalendar--get-weekday-abbrev (weekday) "Return the abbreviated WEEKDAY." (catch 'found @@ -2057,39 +2070,47 @@ END-T is the event's end time in diary format." )) ) (cond ((string-equal frequency "WEEKLY") - (if (not start-t) - (progn - ;; weekly and all-day - (icalendar--dmsg "weekly all-day") - (if until - (setq result - (format - (concat "%%%%(and " - "(diary-cyclic %d %s) " - "(diary-block %s %s))") - (* interval 7) - dtstart-conv - dtstart-conv - (if count until-1-conv until-conv) - )) - (setq result - (format "%%%%(and (diary-cyclic %d %s))" - (* interval 7) - dtstart-conv)))) - ;; weekly and not all-day - (let* ((byday (cadr (assoc 'BYDAY rrule-props))) - (weekday - (icalendar--get-weekday-number byday))) + (let* ((byday (cadr (assoc 'BYDAY rrule-props))) + (weekdays + (icalendar--get-weekday-numbers byday)) + (weekday-clause + (when (> (length weekdays) 1) + (format "(memq (calendar-day-of-week date) '%s) " + weekdays)))) + (if (not start-t) + (progn + ;; weekly and all-day + (icalendar--dmsg "weekly all-day") + (if until + (setq result + (format + (concat "%%%%(and " + "%s" + "(diary-block %s %s))") + (or weekday-clause + (format "(diary-cyclic %d %s) " + (* interval 7) + dtstart-conv)) + (if count until-1-conv until-conv) + )) + (setq result + (format "%%%%(and %s(diary-cyclic %d %s))" + (or weekday-clause "") + (if weekday-clause 1 (* interval 7)) + dtstart-conv)))) + ;; weekly and not all-day (icalendar--dmsg "weekly not-all-day") (if until (setq result (format (concat "%%%%(and " - "(diary-cyclic %d %s) " + "%s" "(diary-block %s %s)) " "%s%s%s") - (* interval 7) - dtstart-conv + (or weekday-clause + (format "(diary-cyclic %d %s) " + (* interval 7) + dtstart-conv)) dtstart-conv until-conv (or start-t "") @@ -2100,10 +2121,11 @@ END-T is the event's end time in diary format." ;; DTEND;VALUE=DATE-TIME:20030919T113000 (setq result (format - "%%%%(and (diary-cyclic %s %s)) %s%s%s" - (* interval 7) - dtstart-conv - (or start-t "") + "%%%%(and %s(diary-cyclic %d %s)) %s%s%s" + (or weekday-clause "") + (if weekday-clause 1 (* interval 7)) + dtstart-conv + (or start-t "") (if end-t "-" "") (or end-t ""))))))) ;; yearly ((string-equal frequency "YEARLY") From debbugs-submit-bounces@debbugs.gnu.org Sun Aug 08 14:00:55 2010 Received: (at 6766) by debbugs.gnu.org; 8 Aug 2010 18:00:55 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OiAB1-0003CV-Up for submit@debbugs.gnu.org; Sun, 08 Aug 2010 14:00:55 -0400 Received: from mo-p05-ob.rzone.de ([81.169.146.180]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OiAB0-0003CP-8V for 6766@debbugs.gnu.org; Sun, 08 Aug 2010 14:00:51 -0400 X-RZG-AUTH: :OWACVUW4a/MW23Dy3JvWYzB9ib5hHLJRJ2XqtRyYWgVkgkqLLeiGkYcRTCZ8+n4= X-RZG-CLASS-ID: mo05 Received: from ubuntulf (p54B0B957.dip.t-dialin.net [84.176.185.87]) by post.strato.de (mrclete mo60) (RZmta 23.4) with ESMTP id x00335m78FIrJr ; Sun, 8 Aug 2010 20:01:24 +0200 (MEST) From: Ulf Jasper To: speters@itasoftware.com (Stephen Peters) Subject: Re: [PATCH] icalendar.el: Handle multiple BYDAY values in a WEEKLY RRULE. Date: Sun, 08 Aug 2010 20:01:23 +0200 Message-ID: <84k4o19e6k.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.96 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Score: -1.6 (-) X-Debbugs-Envelope-To: 6766 Cc: 6766@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -1.5 (-) Applied your patch and added unit test using your ics data. Thanks! Ulf From debbugs-submit-bounces@debbugs.gnu.org Mon Aug 09 14:15:05 2010 Received: (at 6766-done) by debbugs.gnu.org; 9 Aug 2010 18:15:05 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OiWsL-0000g1-4A for submit@debbugs.gnu.org; Mon, 09 Aug 2010 14:15:05 -0400 Received: from mo-p05-ob.rzone.de ([81.169.146.182]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OiWsJ-0000fO-3k for 6766-done@debbugs.gnu.org; Mon, 09 Aug 2010 14:15:04 -0400 X-RZG-AUTH: :OWACVUW4a/MW23Dy3JvWYzB9ib5hHLJRJ2XqtRyYWgVkgkqLLeiGkYQYTSZ1/hLy X-RZG-CLASS-ID: mo05 Received: from ubuntulf (p54B0D683.dip.t-dialin.net [84.176.214.131]) by post.strato.de (mrclete mo35) (RZmta 23.4) with ESMTP id a002aem79HQDyr ; Mon, 9 Aug 2010 20:15:43 +0200 (MEST) From: Ulf Jasper To: 6766-done@debbugs.gnu.org Subject: please close bug#6766 References: <84k4o19e6k.fsf@web.de> Date: Mon, 09 Aug 2010 20:15:42 +0200 In-Reply-To: <84k4o19e6k.fsf@web.de> (Ulf Jasper's message of "Sun, 08 Aug 2010 20:01:23 +0200") Message-ID: <84r5i7d54h.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Score: -2.5 (--) X-Debbugs-Envelope-To: 6766-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.5 (--) thanks From debbugs-submit-bounces@debbugs.gnu.org Mon Aug 09 20:04:22 2010 Received: (at 6766) by debbugs.gnu.org; 10 Aug 2010 00:04:22 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OicKL-0003Oa-Rj for submit@debbugs.gnu.org; Mon, 09 Aug 2010 20:04:22 -0400 Received: from fencepost.gnu.org ([140.186.70.10]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OicKK-0003OV-GX for 6766@debbugs.gnu.org; Mon, 09 Aug 2010 20:04:20 -0400 Received: from rgm by fencepost.gnu.org with local (Exim 4.69) (envelope-from ) id 1OicL0-0005Of-RY; Mon, 09 Aug 2010 20:05:02 -0400 To: Ulf Jasper Subject: Re: bug#6766: [PATCH] icalendar.el: Handle multiple BYDAY values in a WEEKLY RRULE. References: <20100729191310.AFCA45D038C@leng-speters> <84k4o19e6k.fsf@web.de> From: Glenn Morris X-Spook: Dateline Chobetsu Aldergrove Plame ICE KGB Defcon InfoSec X-Ran: .eA[[~39w(?&,a6K4q7Q;)Kc X-Hue: green X-Debbugs-No-Ack: yes X-Attribution: GM Date: Mon, 09 Aug 2010 20:05:02 -0400 Message-ID: User-Agent: Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Score: -6.2 (------) X-Debbugs-Envelope-To: 6766 Cc: 6766@debbugs.gnu.org, Stephen Peters X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -6.2 (------) Ulf Jasper wrote: > Applied your patch and added unit test using your ics data. When applying changes written by other people, please make the ChangeLog entry in their name, not yours. Also, at first glance this is not a tiny change and so would need some copyright paperwork. From unknown Tue Sep 09 18:21:46 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Tue, 07 Sep 2010 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator