--- src/google-cal-helper.py~	2007-04-01 14:51:03.000000000 -0400
+++ src/google-cal-helper.py	2007-04-01 14:51:05.000000000 -0400
@@ -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.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
 
 
@@ -197,11 +238,15 @@
 		self.addElementContent(doc, event, 'Summary', self.title)
 		self.addElementContent(doc, event, 'Description', self.content)
 
-		self.addElementContent(doc, event, 'DateStarted', xsdateToOsync(self.dtstart))
-		self.addElementContent(doc, event, 'DateEnd', xsdateToOsync(self.dtend))
+                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):
