[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] [emacs] 04/07: New option `icalendar-export-alarms'.
From: |
Ulf Jasper |
Subject: |
[Emacs-diffs] [emacs] 04/07: New option `icalendar-export-alarms'. |
Date: |
Mon, 17 Nov 2014 20:18:22 +0000 |
branch: master
commit 16b5f507688b32b78843620417bb2176b3131752
Author: Ulf Jasper <address@hidden>
Date: Mon Nov 17 20:51:26 2014 +0100
New option `icalendar-export-alarms'.
---
lisp/ChangeLog | 9 +++
lisp/calendar/icalendar.el | 28 ++++++----
test/ChangeLog | 8 +++
test/automated/icalendar-tests.el | 105 +++++++++++++++++++++++++++++++++----
4 files changed, 128 insertions(+), 22 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 9d22d76..2bca643 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2014-11-17 Ulf Jasper <address@hidden>
+
+ * calendar/icalendar.el (icalendar-export-alarms): New
+ customizable variable.
+ (icalendar-export-region): Export alarms as specified in
+ `icalendar-export-alarms'.
+ (icalendar--create-ical-alarm, icalendar--do-create-ical-alarm):
+ New functions for exporting alarms.
+
2014-11-16 Ulf Jasper <address@hidden>
* calendar/icalendar.el (icalendar--convert-tz-offset): Return
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index dddcc64..af9b2a4 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -270,8 +270,7 @@ other sexp entries are enumerated in any case."
(defcustom icalendar-export-alarms
nil
- "Determine if and how alarms are included in exported diary events.
-FIXME"
+ "Determine if and how alarms are included in exported diary events."
:version "25.1"
:type '(choice (const :tag "Do not include alarms in export"
nil)
@@ -304,7 +303,6 @@ FIXME"
;; ======================================================================
(require 'calendar)
(require 'diary-lib)
-(require 'appt)
;; ======================================================================
;; misc
@@ -1115,7 +1113,7 @@ FExport diary data into iCalendar file: ")
(icalendar--create-uid
entry-full contents))))
(setq alarm (icalendar--create-ical-alarm
- (car contents-n-summary))))
+ (cdr contents-n-summary))))
(setq result (concat result header contents alarm
"\nEND:VEVENT")))
(if (consp cns-cons-or-list)
@@ -1292,33 +1290,41 @@ Returns an alist."
(if uid (cons 'uid uid) nil))))))))
(defun icalendar--create-ical-alarm (summary)
+ "Return VALARM blocks for the given SUMMARY."
(when icalendar-export-alarms
(let* ((advance-time (car icalendar-export-alarms))
(alarm-specs (cadr icalendar-export-alarms))
(fun (lambda (spec)
(icalendar--do-create-ical-alarm advance-time spec
summary))))
- (mapconcat fun alarm-specs "\n"))))
+ (mapconcat fun alarm-specs ""))))
(defun icalendar--do-create-ical-alarm (advance-time alarm-spec summary)
+ "Return a VALARM block.
+Argument ADVANCE-TIME is a number giving the time when the alarm
+fires (minutes before the respective event). Argument ALARM-SPEC
+is a list which must be one of '(audio), '(display) or
+'(email (ADDRESS1 ...)), see `icalendar-export-alarms'. Argument
+SUMMARY is a string which contains a short description for the
+alarm."
(let* ((action (car alarm-spec))
- (act (format "ACTION:%s\n"
+ (act (format "\nACTION:%s"
(cdr (assoc action '((audio . "AUDIO")
(display . "DISPLAY")
(email . "EMAIL"))))))
- (tri (format "TRIGGER:-PT%dM\n" advance-time))
+ (tri (format "\nTRIGGER:-PT%dM" advance-time))
(des (if (memq action '(display email))
- (format "DESCRIPTION:%s\n" summary)
+ (format "\nDESCRIPTION:%s" summary)
""))
(sum (if (eq action 'email)
- (format "SUMMARY:%s\n" summary)
+ (format "\nSUMMARY:%s" summary)
""))
(att (if (eq action 'email)
(mapconcat (lambda (i)
- (format "ATTENDEE:MAILTO:%s\n" i))
+ (format "\nATTENDEE:MAILTO:%s" i))
(cadr alarm-spec) "")
"")))
- (concat "BEGIN:VALARM\n" act tri des sum att "END:VALARM")))
+ (concat "\nBEGIN:VALARM" act tri des sum att "\nEND:VALARM")))
;; subroutines for icalendar-export-region
(defun icalendar--convert-ordinary-to-ical (nonmarker entry-main)
diff --git a/test/ChangeLog b/test/ChangeLog
index 4a6f005..5290ef3 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,11 @@
+2014-11-17 Ulf Jasper <address@hidden>
+
+ * automated/icalendar-tests.el (icalendar-tests--test-export): New
+ optional parameter `alarms'.
+ (icalendar-export-alarms): New test for exporting icalendar
+ alarms.
+ (icalendar-tests--test-cycle): Let `icalendar-export-alarms' be nil.
+
2014-11-16 Ulf Jasper <address@hidden>
* automated/icalendar-tests.el (icalendar--parse-vtimezone): Add
diff --git a/test/automated/icalendar-tests.el
b/test/automated/icalendar-tests.el
index 3e2fecf..ddff155 100644
--- a/test/automated/icalendar-tests.el
+++ b/test/automated/icalendar-tests.el
@@ -503,33 +503,25 @@ END:VEVENT
;; restore time-zone even if something went terribly wrong
(setenv "TZ" tz))) )
-(ert-deftest icalendar--create-ical-alarm ()
- "Test `icalendar--create-ical-alarms'."
- (let ((icalendar-export-alarms))
- ;; testcase: no alarms
- (setq icalendar-export-alarm nil)
- (should (equal nil
- (icalendar--create-ical-alarm "sumsum")))))
-
-
;; ======================================================================
;; Export tests
;; ======================================================================
(defun icalendar-tests--test-export (input-iso input-european input-american
- expected-output)
+ expected-output &optional
alarms)
"Perform an export test.
Argument INPUT-ISO iso style diary string.
Argument INPUT-EUROPEAN european style diary string.
Argument INPUT-AMERICAN american style diary string.
Argument EXPECTED-OUTPUT expected iCalendar result string.
+Optional argument ALARMS the value of `icalendar-export-alarms' for this test.
European style input data must use german month names. American
and ISO style input data must use english month names."
(let ((tz (getenv "TZ"))
(calendar-date-style 'iso)
(icalendar-recurring-start-year 2000)
- (icalendar-export-alarms nil))
+ (icalendar-export-alarms alarms))
(unwind-protect
(progn
;;; (message "Current time zone: %s" (current-time-zone))
@@ -763,6 +755,97 @@ RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20010706
SUMMARY:block no end time
"))
+(ert-deftest icalendar-export-alarms ()
+ "Perform export test with different settings for exporting alarms."
+ ;; no alarm
+ (icalendar-tests--test-export
+ "2014 Nov 17 19:30 no alarm"
+ "17 Nov 2014 19:30 no alarm"
+ "Nov 17 2014 19:30 no alarm"
+ "DTSTART;VALUE=DATE-TIME:20141117T193000
+DTEND;VALUE=DATE-TIME:20141117T203000
+SUMMARY:no alarm
+"
+ nil)
+
+ ;; 10 minutes in advance, audio
+ (icalendar-tests--test-export
+ "2014 Nov 17 19:30 audio alarm"
+ "17 Nov 2014 19:30 audio alarm"
+ "Nov 17 2014 19:30 audio alarm"
+ "DTSTART;VALUE=DATE-TIME:20141117T193000
+DTEND;VALUE=DATE-TIME:20141117T203000
+SUMMARY:audio alarm
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER:-PT10M
+END:VALARM
+"
+ '(10 ((audio))))
+
+ ;; 20 minutes in advance, display
+ (icalendar-tests--test-export
+ "2014 Nov 17 19:30 display alarm"
+ "17 Nov 2014 19:30 display alarm"
+ "Nov 17 2014 19:30 display alarm"
+ "DTSTART;VALUE=DATE-TIME:20141117T193000
+DTEND;VALUE=DATE-TIME:20141117T203000
+SUMMARY:display alarm
+BEGIN:VALARM
+ACTION:DISPLAY
+TRIGGER:-PT20M
+DESCRIPTION:display alarm
+END:VALARM
+"
+ '(20 ((display))))
+
+ ;; 66 minutes in advance, email
+ (icalendar-tests--test-export
+ "2014 Nov 17 19:30 email alarm"
+ "17 Nov 2014 19:30 email alarm"
+ "Nov 17 2014 19:30 email alarm"
+ "DTSTART;VALUE=DATE-TIME:20141117T193000
+DTEND;VALUE=DATE-TIME:20141117T203000
+SUMMARY:email alarm
+BEGIN:VALARM
+ACTION:EMAIL
+TRIGGER:-PT66M
+DESCRIPTION:email alarm
+SUMMARY:email alarm
+ATTENDEE:MAILTO:address@hidden
+ATTENDEE:MAILTO:address@hidden
+END:VALARM
+"
+ '(66 ((email ("address@hidden" "address@hidden")))))
+
+ ;; 2 minutes in advance, all alarms
+ (icalendar-tests--test-export
+ "2014 Nov 17 19:30 all alarms"
+ "17 Nov 2014 19:30 all alarms"
+ "Nov 17 2014 19:30 all alarms"
+ "DTSTART;VALUE=DATE-TIME:20141117T193000
+DTEND;VALUE=DATE-TIME:20141117T203000
+SUMMARY:all alarms
+BEGIN:VALARM
+ACTION:EMAIL
+TRIGGER:-PT2M
+DESCRIPTION:all alarms
+SUMMARY:all alarms
+ATTENDEE:MAILTO:address@hidden
+ATTENDEE:MAILTO:address@hidden
+END:VALARM
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER:-PT2M
+END:VALARM
+BEGIN:VALARM
+ACTION:DISPLAY
+TRIGGER:-PT2M
+DESCRIPTION:all alarms
+END:VALARM
+"
+ '(2 ((email ("address@hidden" "address@hidden")) (audio) (display)))))
+
;; ======================================================================
;; Import tests
;; ======================================================================
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] [emacs] 04/07: New option `icalendar-export-alarms'.,
Ulf Jasper <=