1.1 --- a/actions/EventAggregatorSummary.py Sun Mar 29 21:01:49 2009 +0200
1.2 +++ b/actions/EventAggregatorSummary.py Sun Mar 29 22:34:33 2009 +0200
1.3 @@ -4,13 +4,15 @@
1.4
1.5 @copyright: 2008, 2009 by Paul Boddie <paul@boddie.org.uk>
1.6 @copyright: 2000-2004 Juergen Hermann <jh@web.de>,
1.7 - 2005-2008 MoinMoin:ThomasWaldmann,
1.8 + 2003-2008 MoinMoin:ThomasWaldmann,
1.9 + 2004-2006 MoinMoin:AlexanderSchremmer,
1.10 2007 MoinMoin:ReimarBauer.
1.11 @license: GNU GPL (v2 or later), see COPYING.txt for details.
1.12 """
1.13
1.14 from MoinMoin.action import ActionBase
1.15 from MoinMoin import config
1.16 +from MoinMoin.Page import Page
1.17 import EventAggregatorSupport
1.18
1.19 Dependencies = ['pages']
1.20 @@ -118,6 +120,12 @@
1.21
1.22 pass
1.23
1.24 +def getQuotedText(text):
1.25 +
1.26 + "Return the 'text' quoted for iCalendar purposes."
1.27 +
1.28 + return text.replace(";", r"\;").replace(",", r"\,")
1.29 +
1.30 def write_resource(request):
1.31
1.32 """
1.33 @@ -157,18 +165,42 @@
1.34
1.35 for event_page, event_details in all_shown_events:
1.36
1.37 + # Get the summary and timestamp details.
1.38 +
1.39 event_summary = EventAggregatorSupport.getEventSummary(event_page, event_details)
1.40
1.41 + # Get the initial revision of the page.
1.42 +
1.43 + revisions = event_page.getRevList()
1.44 + event_page_initial = Page(request, event_page.page_name, rev=revisions[-1])
1.45 +
1.46 + # Get the created and last modified times.
1.47 +
1.48 + created = EventAggregatorSupport.getPageDate(event_page_initial)
1.49 + last_modified = EventAggregatorSupport.getPageDate(event_page)
1.50 + sequence = len(revisions) - 1
1.51 +
1.52 # Output the event details.
1.53
1.54 request.write("BEGIN:VEVENT\r\n")
1.55 - request.write("SUMMARY:%s\r\n" % event_summary)
1.56 request.write("UID:%s\r\n" % request.getQualifiedURL(event_page.url(request)))
1.57 request.write("URL:%s\r\n" % request.getQualifiedURL(event_page.url(request)))
1.58 + request.write("DTSTAMP:%04d%02d%02dT%02d%02d%02dZ\r\n" % created[:6])
1.59 + request.write("LAST-MODIFIED:%04d%02d%02dT%02d%02d%02dZ\r\n" % last_modified[:6])
1.60 + request.write("SEQUENCE:%d\r\n" % sequence)
1.61 request.write("DTSTART;VALUE=DATE:%04d%02d%02d\r\n" % event_details["start"])
1.62 request.write("DTEND;VALUE=DATE:%04d%02d%02d\r\n" % EventAggregatorSupport.nextdate(event_details["end"]))
1.63 - if event_details.has_key("topics"):
1.64 - request.write("CATEGORIES:%s\r\n" % ",".join(event_details["topics"]))
1.65 + request.write("SUMMARY:%s\r\n" % getQuotedText(event_summary))
1.66 +
1.67 + # Optional details.
1.68 +
1.69 + if event_details.has_key("topics") or event_details.has_key("categories"):
1.70 + request.write("CATEGORIES:%s\r\n" % ",".join(
1.71 + [getQuotedText(topic) for topic in event_details.get("topics") or event_details.get("categories")]
1.72 + ))
1.73 + if event_details.has_key("location"):
1.74 + request.write("LOCATION:%s\r\n" % getQuotedText(event_details["location"]))
1.75 +
1.76 request.write("END:VEVENT\r\n")
1.77
1.78 request.write("END:VCALENDAR\r\n")