Mailing list archives: August 2004

Site index · List index
Message listThread · Author · Date
lt;/span><span class="cx"> # no existing matches, see if one can be generated: for occurrence in self.getOccurrencesBetween(recurrenceID,recurrenceID): </span><span class="lines">@@ -680,17 +667,22 @@ </span><span class="cx"> # no match return None </span><span class="rem">- def _movePreviousRuleEnd(self, master, recurrenceID): - """Make sure the previous rule doesn't recreate or overlap with self.""" - newend = recurrenceID - timedelta(minutes=1) </span><span class="add">+ def moveRuleEndBefore(self, end): + """Make self's rules end one minute before recurrenceID. + + Change to rules triggers cleanRule, so if any modifications need to + be preserved, they should be moved before moveRuleEndBefore is called. + + """ + newend = end - timedelta(minutes=1) </span><span class="cx"> #change the rule, onValueChanged will trigger cleanRule for master </span><span class="rem">- for rule in master.rruleset.getAttributeValue('rrules',default=[]): </span><span class="add">+ for rule in self.rruleset.getAttributeValue('rrules',default=[]): </span><span class="cx"> if not rule.hasLocalAttributeValue('until') or \ datetimeOp(rule.calculatedUntil(), '>', newend): rule.until = newend rule.untilIsDate = False </span><span class="rem">- # TODO: enable support for RDATEs when making THISANDFUTURE changes </span><span class="add">+ # TODO: enable support for RDATEs and EXDATEs when making THISANDFUTURE changes </span><span class="cx"> #previousMod.rruleset.rdates = [rdate for rdate in \ # previousMod.rruleset.getAttributeValue('rdates', default=[])\ # if datetimeOp(rdate, '>', newend)] </span><span class="lines">@@ -707,13 +699,15 @@ </span><span class="cx"> if flagStart is None: del self._ignoreValueChanges </span><span class="rem">- def _propagateChange(self, modification, first, master): </span><span class="add">+ def _propagateChange(self, modification): </span><span class="cx"> """Move later modifications to self.""" </span><span class="rem">- #TODO: icalUID and rruleset changes - if datetimeOp(modification.startTime, '>=', self.startTime): </span><span class="add">+ if modification.occurrenceFor != self and \ + datetimeOp(modification.recurrenceID, '>', self.startTime): </span><span class="cx"> # future 'this' modifications in master should move to self modification.modificationFor = self modification.occurrenceFor = self </span><span class="add">+ modification.rruleset = self.rruleset + modification.icalUID = self.icalUID </span><span class="cx"> def changeThisAndFuture(self, attr=None, value=None): """Modify this and all future events.""" </span><span class="lines">@@ -747,14 +741,21 @@ </span><span class="cx"> # determine what type of change to make if attr == 'rruleset': # rule change, thus a destructive change self.cleanFuture() </span><span class="rem">- if self == master: # self is master, nothing to do </span><span class="add">+ if self.recurrenceID == master.startTime and self.modificationFor == master: + # A THIS modification to master, make it the new master + self.moveCollections(master, self) + self.modificationFor = None + self.occurrenceFor = self + self.recurrenceID = self.startTime + master.deleteAll() + elif self == master: # self is master, nothing to do </span><span class="cx"> pass elif self.isGenerated: makeThisAndFutureMod() </span><span class="rem">- self._movePreviousRuleEnd(master, recurrenceID) </span><span class="add">+ master.moveRuleEndBefore(recurrenceID) </span><span class="cx"> elif self.modificationFor is not None:# changing 'this' modification makeThisAndFutureMod() </span><span class="rem">- self._movePreviousRuleEnd(master, recurrenceID) </span><span class="add">+ master.moveRuleEndBefore(recurrenceID) </span><span class="cx"> else: #propagate changes forward if self.modificationFor is not None: #preserve self as a THIS modification </span><span class="lines">@@ -792,11 +793,13 @@ </span><span class="cx"> else: # self was a THIS modification to the master, setattr needs # to be called on master </span><span class="rem">- master.changeNoModification(attr, value) - # if startTime changed, sync master's recurrenceID up with - # its new startTime </span><span class="cx"> if attr == 'startTime': </span><span class="rem">- master.recurrenceID = master.startTime </span><span class="add">+ newStart = master.startTime + startTimeDelta + master.changeNoModification('startTime', newStart) + master.changeNoModification('recurrenceID', newStart) + self.recurrenceID = newStart + else: + master.changeNoModification(attr, value) </span><span class="cx"> else: # change applies to an event which isn't a modification if self.isGenerated: </span><span class="lines">@@ -808,17 +811,20 @@ </span><span class="cx"> master._deleteGeneratedOccurrences() if master.modifications: </span><span class="rem">- for modification in master.modifications: - self.occurrenceFor._propagateChange(modification, first, - master) </span><span class="add">+ for mod in master.modifications: + self.occurrenceFor._propagateChange(mod) </span><span class="cx"> # change recurrenceIDs for modifications if startTime change </span><span class="rem">- if attr == 'startTime' and \ - datetimeOp(modification.startTime, '>=', self.startTime): - modification.changeNoModification('recurrenceID', - modification.recurrenceID + startTimeDelta) </span><span class="add">+ if attr == 'startTime' and mod.modificationFor == self: + mod.changeNoModification('recurrenceID', + mod.recurrenceID + startTimeDelta) </span><span class="cx"> if not isFirst: </span><span class="rem">- self._movePreviousRuleEnd(master, recurrenceID) - </span><span class="add">+ master.moveRuleEndBefore(recurrenceID) + + # if modifications were moved from master to self, they may have the + # same recurrenceID as a (spurious) generated event, so delete + # generated occurrences. + + self._deleteGeneratedOccurrences() </span><span class="cx"> self._getFirstGeneratedOccurrence(True) del self._ignoreValueChanges </span><span class="lines">@@ -915,18 +921,13 @@ </span><span class="cx"> logger.debug("got first generated occurrence, %s", gen.serializeMods().getvalue()) # make sure masters get modificationRecurrenceID set </span><span class="rem">- if self is self.getFirstInRule(): </span><span class="add">+ if self == self.getFirstInRule(): </span><span class="cx"> self.modificationRecurrenceID = self.startTime self.recurrenceID = self.startTime </span><span class="rem">- # this kludge should be replaced with the new domain attribute aspect -## elif name not in """modifications modificationFor occurrences -## occurrenceFor modifies isGenerated recurrenceID -## _ignoreValueChanges modificationRecurrenceID queries -## contentsOwner TPBSelectedItemOwner TPBDetailItemOwner -## itemCollectionInclusions -## """.split(): - # this won't work with stamping, temporary solution to allow testing </span><span class="add">+ # the chaReminderDelta(self): """ Returns the difference between startTime and reminderTime, a timedelta """ try: </span><span class="rem">- return self.reminderTime - self.getEffectiveStartTime() </span><span class="add">+ return datetimeOp(self.reminderTime, '-', + self.getEffectiveStartTime()) </span><span class="cx"> except AttributeError: return None </span><span class="lines">@@ -476,7 +477,8 @@ </span><span class="cx"> # Adjust the reminder first, while we still have the old time. try: </span><span class="rem">- self.reminderTime = self.reminderTime - (self.startTime - dateTime) </span><span class="add">+ self.reminderTime = self.reminderTime - datetimeOp( + self.startTime, '-', dateTime) </span><span class="cx"> except AttributeError: pass </span> </pre> </div> </div> </body> </html> Sat, 18 Sep, 17:42
rg Tue, 20 Dec, 12:56
is oundation.org> Sun, 22 Jun, 20:09
k...@springfed.com commits] (heikki) [15609] Bug 11149 Help > Getting Started menu entry, r=pbossut. Mon, 23 Mar, 10:21
od lass="cx"> # no match return None </span><span class="rem">- def _movePreviousRuleEnd(self, master, recurrenceID): - """Make sure the previous rule doesn't recreate or overlap with self.""" - newend = recurrenceID - timedelta(minutes=1) </span><span class="add">+ def moveRuleEndBefore(self, end): + """Make self's rules end one minute before recurrenceID. + + Change to rules triggers cleanRule, so if any modifications need to + be preserved, they should be moved before moveRuleEndBefore is called. + + """ + newend = end - timedelta(minutes=1) </span><span class="cx"> #change the rule, onValueChanged will trigger cleanRule for master </span><span class="rem">- for rule in master.rruleset.getAttributeValue('rrules',default=[]): </span><span class="add">+ for rule in self.rruleset.getAttributeValue('rrules',default=[]): </span><span class="cx"> if not rule.hasLocalAttributeValue('until') or \ datetimeOp(rule.calculatedUntil(), '>', newend): rule.until = newend rule.untilIsDate = False </span><span class="rem">- # TODO: enable support for RDATEs when making THISANDFUTURE changes </span><span class="add">+ # TODO: enable support for RDATEs and EXDATEs when making THISANDFUTURE changes </span><span class="cx"> #previousMod.rruleset.rdates = [rdate for rdate in \ # previousMod.rruleset.getAttributeValue('rdates', default=[])\ # if datetimeOp(rdate, '>', newend)] </span><span class="lines">@@ -707,13 +699,15 @@ </span><span class="cx"> if flagStart is None: del self._ignoreValueChanges </span><span class="rem">- def _propagateChange(self, modification, first, master): </span><span class="add">+ def _propagateChange(self, modification): </span><span class="cx"> """Move later modifications to self.""" </span><span class="rem">- #TODO: icalUID and rruleset changes - if datetimeOp(modification.startTime, '>=', self.startTime): </span><span class="add">+ if modification.occurrenceFor != self and \ + datetimeOp(modification.recurrenceID, '>', self.startTime): </span><span class="cx"> # future 'this' modifications in master should move to self modification.modificationFor = self modification.occurrenceFor = self </span><span class="add">+ modification.rruleset = self.rruleset + modification.icalUID = self.icalUID </span><span class="cx"> def changeThisAndFuture(self, attr=None, value=None): """Modify this and all future events.""" </span><span class="lines">@@ -747,14 +741,21 @@ </span><span class="cx"> # determine what type of change to make if attr == 'rruleset': # rule change, thus a destructive change self.cleanFuture() </span><span class="rem">- if self == master: # self is master, nothing to do </span><span class="add">+ if self.recurrenceID == master.startTime and self.modificationFor == master: + # A THIS modification to master, make it the new master + self.moveCollections(master, self) + self.modificationFor = None + self.occurrenceFor = self + self.recurrenceID = self.startTime + master.deleteAll() + elif self == master: # self is master, nothing to do </span><span class="cx"> pass elif self.isGenerated: makeThisAndFutureMod() </span><span class="rem">- self._movePreviousRuleEnd(master, recurrenceID) </span><span class="add">+ master.moveRuleEndBefore(recurrenceID) </span><span class="cx"> elif self.modificationFor is not None:# changing 'this' modification makeThisAndFutureMod() </span><span class="rem">- self._movePreviousRuleEnd(master, recurrenceID) </span><span class="add">+ master.moveRuleEndBefore(recurrenceID) </span><span class="cx"> else: #propagate changes forward if self.modificationFor is not None: #preserve self as a THIS modification </span><span class="lines">@@ -792,11 +793,13 @@ </span><span class="cx"> else: # self was a THIS modification to the master, setattr needs # to be called on master </span><span class="rem">- master.changeNoModification(attr, value) - # if startTime changed, sync master's recurrenceID up with - # its new startTime </span><span class="cx"> if attr == 'startTime': </span><span class="rem">- master.recurrenceID = master.startTime </span><span class="add">+ newStart = master.startTime + startTimeDelta + master.changeNoModification('startTime', newStart) + master.changeNoModification('recurrenceID', newStart) + self.recurrenceID = newStart + else: + master.changeNoModification(attr, value) </span><span class="cx"> else: # change applies to an event which isn't a modification if self.isGenerated: </span><span class="lines">@@ -808,17 +811,20 @@ </span><span class="cx"> master._deleteGeneratedOccurrences() if master.modifications: </span><span class="rem">- for modification in master.modifications: - self.occurrenceFor._propagateChange(modification, first, - master) </span><span class="add">+ for mod in master.modifications: + self.occurrenceFor._propagateChange(mod) </span><span class="cx"> # change recurrenceIDs for modifications if startTime change </span><span class="rem">- if attr == 'startTime' and \ - datetimeOp(modification.startTime, '>=', self.startTime): - modification.changeNoModification('recurrenceID', - modification.recurrenceID + startTimeDelta) </span><span class="add">+ if attr == 'startTime' and mod.modificationFor == self: + mod.changeNoModification('recurrenceID', + mod.recurrenceID + startTimeDelta) </span><span class="cx"> if not isFirst: </span><span class="rem">- self._movePreviousRuleEnd(master, recurrenceID) - </span><span class="add">+ master.moveRuleEndBefore(recurrenceID) + + # if modifications were moved from master to self, they may have the + # same recurrenceID as a (spurious) generated event, so delete + # generated occurrences. + + self._deleteGeneratedOccurrences() </span><span class="cx"> self._getFirstGeneratedOccurrence(True) del self._ignoreValueChanges </span><span class="lines">@@ -915,18 +921,13 @@ </span><span class="cx"> logger.debug("got first generated occurrence, %s", gen.serializeMods().getvalue()) # make sure masters get modificationRecurrenceID set </span><span class="rem">- if self is self.getFirstInRule(): </span><span class="add">+ if self == self.getFirstInRule(): </span><span class="cx"> self.modificationRecurrenceID = self.startTime self.recurrenceID = self.startTime </span><span class="rem">- # this kludge should be replaced with the new domain attribute aspect -## elif name not in """modifications modificationFor occurrences -## occurrenceFor modifies isGenerated recurrenceID -## _ignoreValueChanges modificationRecurrenceID queries -## contentsOwner TPBSelectedItemOwner TPBDetailItemOwner -## itemCollectionInclusions -## """.split(): - # this won't work with stamping, temporary solution to allow testing </span><span class="add">+ # the changeName kludge should be replaced with the new domain attribute + # aspect, just using a fixed list of attributes which should trigger + # changeThis won't work with stamping </span><span class="cx"> elif changeName: if DEBUG: logger.debug("about to changeThis in onValueChanged(name=%s) for %s", name, str(self)) </span><span class="lines">@@ -946,54 +947,55 @@ </span><span class="cx"> first = self.getFirstInRule() self._deleteGeneratedOccurrences() if first.hasLocalAttributeValue('modifications'): </span><span class="add">+ until = first.rruleset.rrules.first().calculatedUntil() </span><span class="cx"> for mod in first.modifications: </span><span class="rem">- if mod.modifies == 'this': - # this won't work for complicated rrulesets - until = first.rruleset.rrules.first().calculatedUntil() - if until is not None \ - and datetimeOp(mod.recurrenceID, '>', until) \ - and mod != first: - mod._ignoreValueChanges = True - mod.delete() </span><span class="add">+ # this won't work for complicated rrulesets + if until != None and datetimeOp(mod.recurrenceID, '>', until): + mod._ignoreValueChanges = True + mod.delete() </span><span class="cx"> # create a backup first._getFirstGeneratedOccurrence(True) </span><span class="rem">- def removeFuture(self): </span><span class="add">+ def deleteFuture(self): </span><span class="cx"> """Delete self and all future occurrences and modifications.""" </span><span class="rem">- pass </span><span class="add">+ # changing the rule will delete self unless self is the master + master = self.getMaster() + if self.recurrenceID == master.startTime: + self.deleteAll() + else: + self.moveRuleEndBefore(self.recurrenceID) </span><span class="cx"> </span><span class="rem">- def _deleteThisAndFutureModification(self): - """Remove 'thisandfuture' modification and all its occurrences.""" </span><span class="add">+ def deleteThis(self): + """Exclude this occurrence from the recurrence rule.""" + if not getattr(self.rruleset, 'exdates', None): + self.rruleset.exdates=[] + self.rruleset.exdates.append(self.recurrenceID) + del self + + def deleteAll(self): + """Delete master, all its modifications, occurrences, and rules.""" </span><span class="cx"> for event in self.occurrences: if event == self: #don't delete self quite yet continue event._ignoreValueChanges = True event.delete(recursive=True) </span><span class="rem">- self.rruleset._ignoreValueChanges = True - self.rruleset.delete(recursive=True) </span><span class="add">+ rruleset = self.rruleset + rruleset._ignoreValueChanges = True + # we don't want rruleset's recursive delete to get self yet + del self.rruleset + rruleset.delete(recursive=True) </span><span class="cx"> self._ignoreValueChanges = True self.delete(recursive=True) def cleanFuture(self): """Delete all future occurrences and modifications.""" </span><span class="rem">- - def deleteLater(item): - if datetimeOp(item.startTime, '>', self.startTime): - item._ignoreValueChanges = True - item.delete() - </span><span class="cx"> master = self.getMaster() </span><span class="rem">- for mod in master.modifications or []: - if mod.modifies == 'thisandfuture': - if datetimeOp(mod.startTime, '>', self.startTime): - mod._deleteThisAndFutureModification() - else: - for event in mod.occurrences or []: - deleteLater(event) </span><span class="cx"> for event in master.occurrences: </span><span class="rem">- deleteLater(event) </span><span class="add">+ if datetimeOp(event.startTime, '>', self.startTime): + event._ignoreValueChanges = True + event.delete() </span><span class="cx"> self._getFirstGeneratedOccurrence(True) </span><span class="lines">@@ -1011,13 +1013,15 @@ </span><span class="cx"> # A THIS modification to master, make it the new master self.moveCollections(master, event) del event.rruleset </span><span class="rem">- event.recurrenceID = event.startTime </span><span class="add">+ del event.recurrenceID </span><span class="cx"> event.modificationFor = None event.occurrenceFor = event masterHadModification = True if masterHadModification: master.delete() </span><span class="add">+ else: + del master.recurrenceID </span><span class="cx"> def isCustomRule(self): </span></pre></div> <a id="trunkchandlerparcelsosafpimcalendarRecurrencepy"></a> <div class="modfile"><h4>Modified: trunk/chandler/parcels/osaf/pim/calendar/Recurrence.py (7506 => 7507)</h4> <pre class="diff"> <span class="info">--- trunk/chandler/parcels/osaf/pim/calendar/Recurrence.py 2005-09-27 23:02:46 UTC (rev 7506) +++ trunk/chandler/parcels/osaf/pim/calendar/Recurrence.py 2005-09-27 23:54:04 UTC (rev 7507) </span><span class="lines">@@ -198,6 +198,7 @@ </span><span class="cx"> value = coerceTimeZone(value, tzinfo) return value </span><span class="add">+ # TODO: more comments </span><span class="cx"> kwargs = dict((k, getattr(self, k, None)) for k in self.listNames + self.normalNames) for key in self.specialNames: </span><span class="lines">@@ -236,8 +237,8 @@ </span><span class="cx"> # Day tuples are (dayOrdinal, n-th week of the month), # 0 means all weeks listOfDayTuples=[(day, 0) for day in rrule._byweekday] </span><span class="rem">- if rrule._bynweekday: - listOfDayTuples.extend(tup for tup in rrule._bynweekday) </span><span class="add">+ if rrule._bynweekday is not None: + listOfDayTuples.extend(rrule._bynweekday) </span><span class="cx"> if len(listOfDayTuples) > 0: self.byweekday = [] for day, n in listOfDayTuples: </span><span class="lines">@@ -257,10 +258,11 @@ </span><span class="cx"> self.until = coerceTimeZone(until, ICUtzinfo.getDefault()) for key in self.listNames: </span><span class="add">+ # TODO: cache getattr(rrule, '_' + key) </span><span class="cx"> if getattr(rrule, '_' + key) is not None and \ (key not in self.interpretedNames or \ len(getattr(rrule, '_' + key)) > 1): </span><span class="rem">- # cast tuples to list, or will the repository do this for us? </span><span class="add">+ # cast tuples to list </span><span class="cx"> setattr(self, key, list(getattr(rrule, '_' + key))) # bymonthday and bymonth may be set automatically by dateutil, if so, # unset them </span><span class="lines">@@ -274,7 +276,6 @@ </span><span class="cx"> del self.bymonth </span><span class="rem">- </span><span class="cx"> def onValueChanged(self, name): """If the rule changes, update any associated events.""" if name in self.listNames + self.normalNames + self.specialNames: </span><span class="lines">@@ -317,9 +318,10 @@ </span><span class="cx"> def addRule(self, rule, rruleorexrule='rrule'): """Add an rrule or exrule, defaults to rrule.""" </span><span class="rem">- rulelist = getattr(self, rruleorexrule + 's', []) - rulelist.append(rule) - setattr(self, rruleorexrule + 's', rulelist) </span><span class="add">+ try: + getattr(self, rruleorexrule + 's').append(rule) + except AttributeError: + setattr(self, rruleorexrule + 's', [rule]) </span><span class="cx"> def createDateUtilFromRule(self, dtstart): """Return an appropriate dateutil.rrule.rruleset.""" </span><span class="lines">@@ -377,9 +379,11 @@ </span><span class="cx"> rule = list(self.rrules)[0] if rule.interval != 1: return True </span><span class="rem">- for attr in RecurrenceRule.listNames+("byweekday",): </span><span class="add">+ for attr in RecurrenceRule.listNames: </span><span class="cx"> if getattr(rule, attr): return True </span><span class="add">+ if rule.byweekday: + return True </span><span class="cx"> return False def getCustomDescription(self): </span></pre></div> <a id="trunkchandlerparcelsosafpimcalendartestsTestRecurringEventpy"></a> <div class="modfile"><h4>Modified: trunk/chandler/parcels/osaf/pim/calendar/tests/TestRecurringEvent.py (7506 => 7507)</h4> <pre class="diff"> <span class="info">--- trunk/chandler/parcels/osaf/pim/calendar/tests/TestRecurringEvent.py 2005-09-27 23:02:46 UTC (rev 7506) +++ trunk/chandler/parcels/osaf/pim/calendar/tests/TestRecurringEvent.py 2005-09-27 23:54:04 UTC (rev 7507) </span><span class="lines">@@ -290,6 +290,9 @@ </span><span class="cx"> self.assertEqual(len(list(third.occurrences)), 3) self.assertEqual(fourth.recurrenceID, fourth.startTime + timedelta(hours=1)) </span><span class="add">+ self.assertEqual(third.rruleset, fourth.rruleset) + self.assertEqual(third.icalUID, fourth.icalUID) + self.assertNotEqual(second.icalUID, third.icalUID) </span><span class="cx"> # make sure second's rruleset was updated self.assert_(list(second.rruleset.rrules)[0].until < thirdChangedStart) </span><span class="lines">@@ -413,7 +416,13 @@ </span><span class="cx"> self.assertNotEqual(self.event.icalUID, second.icalUID) self.assertEqual(second.icalUID, third.icalUID) self.assertEqual(third.modificationFor, second.occurrenceFor) </span><span class="rem">- </span><span class="add">+ + def testRdatesAndExdates(self): + pass + + def testDelete(self): + pass + </span><span class="cx"> def testNeverEndingEvents(self): ruleItem = RecurrenceRule(None, view=self.rep.view) ruleItem.freq = 'daily' </span></pre></div> <a id="trunkchandlerparcelsosafsharingICalendarpy"></a> <div class="modfile"><h4>Modified: trunk/chandler/parcels/osaf/sharing/ICalendar.py (7506 => 7507)</h4> <pre class="diff"> <span class="info">--- trunk/chandler/parcels/osaf/sharing/ICalendar.py 2005-09-27 23:02:46 UTC (rev 7506) +++ trunk/chandler/parcels/osaf/sharing/ICalendar.py 2005-09-27 23:54:04 UTC (rev 7507) </span><span class="lines">@@ -318,6 +318,8 @@ </span><span class="cx"> if not isinstance(item, AbstractCollection): print "Only a share or an item collection can be passed in" #@@@MOR Raise something </span><span class="add">+ else: + caldavReturn = None </span><span class="cx"> input = StringIO.StringIO(text) calendar = vobject.readComponents(input, validate=True).next() </span><span class="lines">@@ -452,13 +454,20 @@ </span><span class="cx"> continue else: eventItem = uidMatchItem </span><span class="add">+ if (eventItem.occurrenceFor is None and + eventItem.occurrences is None): + eventItem.occurrenceFor = eventItem + if eventItem.rruleset is not None: + # re-creating a recurring item from scratch, delete + # old recurrence information + eventItem.removeRecurrence() + </span><span class="cx"> countUpdated += 1 else: eventItem = pickKind.newItem(None, newItemParent) countNew += 1 </span><span class="rem">- eventItem.icalUID = event.uid[0].value </span><span class="add">+ eventItem.icalUID = event.uid[0].value </span><span class="cx"> </span><span class="rem">- </span><span class="cx"> # vobject isn't meshing well with dateutil when dtstart isDate; # dtstart is converted to a datetime for dateutil, but rdate # isn't. To make dateutil happy, convert rdates which are dates to </span><span class="lines">@@ -520,7 +529,7 @@ </span><span class="cx"> if self.fileStyle() == self.STYLE_SINGLE: item.add(eventItem.getMaster()) else: </span><span class="rem">- return eventItem </span><span class="add">+ caldavReturn = eventItem.getMaster() </span><span class="cx"> except Exception, e: if __debug__: raise e </span><span class="lines">@@ -531,8 +540,12 @@ </span><span class="cx"> logger.info("...iCalendar import of %d new items, %d updated" % \ (countNew, countUpdated)) </span><span class="rem">- return item </span><span class="add"&ouldn't generate "floating" events) -- take 2 Sat, 17 Aug, 17:33
Message listThread · Author · Date
Box list
Jul 20081
Mar 20081
Jan 20085
Dec 200715
Nov 20078
Oct 200749
Sep 200725
Aug 2007137
Jul 2007246
Jun 200761
May 200710
Apr 200744
Mar 200716
Feb 20076
Jan 200721
Dec 20065
Nov 200613
Oct 200613
Sep 200623
Aug 200643
Jul 200621
Jun 200652
May 200652
Apr 200629
Mar 200639
Feb 200677
Jan 200620
Dec 200510
Sep 20058
Jun 20052
Apr 20051
Mar 20052
Feb 20054
Dec 20045
Nov 20042
Sep 20041
Aug 20045
Jun 20047
Apr 20041
Feb 20042
Jan 20042
Dec 20031
Nov 20039
Aug 20036
Jun 20033
Mar 20031
Feb 20031
Jan 20033
Dec 20021
Nov 20022
Oct 20024