--- libopensync-plugin-google-calendar-0.22/src/google-cal-helper.py 2007-03-27 12:18:21.000000000 -0400
+++ libopensync-plugin-google-calendar-0.22-r1/src/google-cal-helper.py 2007-11-30 20:14:20.000000000 -0500
@@ -138,6 +138,41 @@
sys.stderr.write("xs to osync: %s => %s\n" % (s, r))
return r
+GDEND_RE = re.compile("DTEND;[^:]*:(\S+)")
+def gdRecurToEnd(recur):
+ m = GDEND_RE.search(recur)
+ if m is None:
+ raise DateConversionError("failed to find end in \"%s\"" % recur)
+ start = m.group(1)
+ year = start[0:4]
+ month = start[4:6]
+ day = start[6:8]
+ hour = start[9:11]
+ min = start[11:13]
+ sec = start[13:15]
+ return "%s-%2s-%2sT%2s:%2s:%2s" % (year, month, day, hour, min, sec)
+
+GDSTART_RE = re.compile("DTSTART;[^:]*:(\S+)")
+def gdRecurToStart(recur):
+ m = GDSTART_RE.search(recur)
+ if m is None:
+ raise DateConversionError("failed to find start in \"%s\"" % recur)
+ start = m.group(1)
+ year = start[0:4]
+ month = start[4:6]
+ day = start[6:8]
+ hour = start[9:11]
+ min = start[11:13]
+ sec = start[13:15]
+ return "%s-%2s-%2sT%2s:%2s:%2s" % (year, month, day, hour, min, sec)
+
+GDRECUR_RE = re.compile("RRULE:(\S+)")
+def gdRecurToORecur(recur):
+ m = GDRECUR_RE.search(recur)
+ if m is None:
+ raise DateConversionError("failed to find rule in \"%s\"" % recur)
+ return m.group(1)
+
class GCalRequestError(Exception):
def __init__(self, response):
self.response = response
@@ -159,13 +194,19 @@
self.id = self.elementValue('atom:id/text()')
self.editUri = self.elementValue('atom:link[@rel="edit"]/@href')
self.content = self.elementValue('atom:content[@type="text"]/text()')
+ self.dtrecur = self.elementValue('gd:recurrence/text()')
+ if self.dtrecur:
+ pass
+ self.dtstart = gdRecurToStart(self.dtrecur)
+ self.dtend = gdRecurToEnd(self.dtrecur)
+ self.dtrecur = gdRecurToORecur(self.dtrecur)
+ else:
self.dtstart = self.elementValue('gd:when/@startTime')
self.dtend = self.elementValue('gd:when/@endTime')
self.eventStatus = self.elementValue('gd:eventStatus/@value')
self.whereString = self.elementValue('gd:where/@valueString')
- #FIXME: Handle recurrency
#FIXME: Handle gd:eventStatus
@@ -199,9 +240,13 @@
self.addElementContent(doc, event, 'DateStarted', xsdateToOsync(self.dtstart))
self.addElementContent(doc, event, 'DateEnd', xsdateToOsync(self.dtend))
+ if self.dtrecur:
+ self.addElementContent(doc, event, 'RecurrenceRule',
+ self.dtrecur)
+
self.addElementContent(doc, event, 'Location', self.whereString)
- #TODO: UID, editUri, dtstart, dtend, recurrency, eventStatus
+ #TODO: UID, editUri, dtstart, dtend, eventStatus
return doc.toxml(encoding='utf-8')
def dumpGdata(self):