Ticket #473: gcal-recurrency.patch
| File gcal-recurrency.patch, 3.4 KB (added by srwalter, 6 years ago) |
|---|
-
src/google-cal-helper.py
old new 138 138 sys.stderr.write("xs to osync: %s => %s\n" % (s, r)) 139 139 return r 140 140 141 GDEND_RE = re.compile("DTEND;[^:]*:(\S+)") 142 def gdRecurToEnd(recur): 143 m = GDEND_RE.search(recur) 144 if m is None: 145 raise DateConversionError("failed to find end in \"%s\"" % recur) 146 start = m.group(1) 147 year = start[0:4] 148 month = start[4:6] 149 day = start[6:8] 150 hour = start[9:11] 151 min = start[11:13] 152 sec = start[13:15] 153 return "%s-%2s-%2sT%2s:%2s:%2s" % (year, month, day, hour, min, sec) 154 155 GDSTART_RE = re.compile("DTSTART;[^:]*:(\S+)") 156 def gdRecurToStart(recur): 157 m = GDSTART_RE.search(recur) 158 if m is None: 159 raise DateConversionError("failed to find start in \"%s\"" % recur) 160 start = m.group(1) 161 year = start[0:4] 162 month = start[4:6] 163 day = start[6:8] 164 hour = start[9:11] 165 min = start[11:13] 166 sec = start[13:15] 167 return "%s-%2s-%2sT%2s:%2s:%2s" % (year, month, day, hour, min, sec) 168 169 GDRECUR_RE = re.compile("RRULE:(\S+)") 170 def gdRecurToORecur(recur): 171 m = GDRECUR_RE.search(recur) 172 if m is None: 173 raise DateConversionError("failed to find rule in \"%s\"" % recur) 174 return m.group(1) 175 141 176 class GCalRequestError(Exception): 142 177 def __init__(self, response): 143 178 self.response = response … … 159 194 self.id = self.elementValue('atom:id/text()') 160 195 self.editUri = self.elementValue('atom:link[@rel="edit"]/@href') 161 196 self.content = self.elementValue('atom:content[@type="text"]/text()') 162 self.dtstart = self.elementValue('gd:when/@startTime') 163 self.dtend = self.elementValue('gd:when/@endTime') 197 self.dtrecur = self.elementValue('gd:recurrence/text()') 198 if self.dtrecur: 199 pass 200 self.dtstart = gdRecurToStart(self.dtrecur) 201 self.dtend = gdRecurToEnd(self.dtrecur) 202 self.dtrecur = gdRecurToORecur(self.dtrecur) 203 else: 204 self.dtstart = self.elementValue('gd:when/@startTime') 205 self.dtend = self.elementValue('gd:when/@endTime') 164 206 165 207 self.eventStatus = self.elementValue('gd:eventStatus/@value') 166 208 self.whereString = self.elementValue('gd:where/@valueString') 167 209 168 #FIXME: Handle recurrency169 210 #FIXME: Handle gd:eventStatus 170 211 171 212 … … 197 238 self.addElementContent(doc, event, 'Summary', self.title) 198 239 self.addElementContent(doc, event, 'Description', self.content) 199 240 200 self.addElementContent(doc, event, 'DateStarted', xsdateToOsync(self.dtstart)) 201 self.addElementContent(doc, event, 'DateEnd', xsdateToOsync(self.dtend)) 241 self.addElementContent(doc, event, 'DateStarted', xsdateToOsync(self.dtstart)) 242 self.addElementContent(doc, event, 'DateEnd', xsdateToOsync(self.dtend)) 243 if self.dtrecur: 244 self.addElementContent(doc, event, 'RecurrenceRule', 245 self.dtrecur) 246 202 247 self.addElementContent(doc, event, 'Location', self.whereString) 203 248 204 #TODO: UID, editUri, dtstart, dtend, recurrency,eventStatus249 #TODO: UID, editUri, dtstart, dtend, eventStatus 205 250 return doc.toxml(encoding='utf-8') 206 251 207 252 def dumpGdata(self):
