You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-pda/libopensync-plugin-google-c.../files/libopensync-plugin-google-c...

86 lines
2.8 KiB

http://bugs.gentoo.org/185475
http://www.opensync.org/changeset/1898
--- a/src/google-cal-helper.py
+++ b/src/google-cal-helper.py
@@ -138,6 +138,41 @@ def xsdateToOsync(s):
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 @@ class GCalEntry:
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.dtstart = self.elementValue('gd:when/@startTime')
- self.dtend = self.elementValue('gd:when/@endTime')
+ 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 @@ class GCalEntry:
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):