Files @ c656b2f37001
Branch filter:

Location: ohnobinki_overlay/app-pda/libopensync-plugin-google-calendar/files/recurrent_events.patch

binki
media-libs/openal: removed -- outdated
--- 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):