Mailing list archives: August 2007

Site index · List index
Message list1 · 2 · Next »Thread · Author · Date
, 16:43 Sat, 07 Apr, 02:32
<harts...@osafoundation.org> &lt;span class="add"&gt;+ # 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) &lt;/span&gt;&lt;span class="cx"&gt; &lt;/span&gt;&lt;span class="rem"&gt;- def _deleteThisAndFutureModification(self): - &amp;quot;&amp;quot;&amp;quot;Remove 'thisandfuture' modification and all its occurrences.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="add"&gt;+ def deleteThis(self): + &amp;quot;&amp;quot;&amp;quot;Exclude this occurrence from the recurrence rule.&amp;quot;&amp;quot;&amp;quot; + if not getattr(self.rruleset, 'exdates', None): + self.rruleset.exdates=[] + self.rruleset.exdates.append(self.recurrenceID) + del self + + def deleteAll(self): + &amp;quot;&amp;quot;&amp;quot;Delete master, all its modifications, occurrences, and rules.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="cx"&gt; for event in self.occurrences: if event == self: #don't delete self quite yet continue event._ignoreValueChanges = True event.delete(recursive=True) &lt;/span&gt;&lt;span class="rem"&gt;- self.rruleset._ignoreValueChanges = True - self.rruleset.delete(recursive=True) &lt;/span&gt;&lt;span class="add"&gt;+ 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) &lt;/span&gt;&lt;span class="cx"&gt; self._ignoreValueChanges = True self.delete(recursive=True) def cleanFuture(self): &amp;quot;&amp;quot;&amp;quot;Delete all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- - def deleteLater(item): - if datetimeOp(item.startTime, '&amp;gt;', self.startTime): - item._ignoreValueChanges = True - item.delete() - &lt;/span&gt;&lt;span class="cx"&gt; master = self.getMaster() &lt;/span&gt;&lt;span class="rem"&gt;- for mod in master.modifications or []: - if mod.modifies == 'thisandfuture': - if datetimeOp(mod.startTime, '&amp;gt;', self.startTime): - mod._deleteThisAndFutureModification() - else: - for event in mod.occurrences or []: - deleteLater(event) &lt;/span&gt;&lt;span class="cx"&gt; for event in master.occurrences: &lt;/span&gt;&lt;span class="rem"&gt;- deleteLater(event) &lt;/span&gt;&lt;span class="add"&gt;+ if datetimeOp(event.startTime, '&amp;gt;', self.startTime): + event._ignoreValueChanges = True + event.delete() &lt;/span&gt;&lt;span class="cx"&gt; self._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="lines"&gt;@@ -1011,13 +1013,15 @@ &lt;/span&gt;&lt;span class="cx"&gt; # A THIS modification to master, make it the new master self.moveCollections(master, event) del event.rruleset &lt;/span&gt;&lt;span class="rem"&gt;- event.recurrenceID = event.startTime &lt;/span&gt;&lt;span class="add"&gt;+ del event.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; event.modificationFor = None event.occurrenceFor = event masterHadModification = True if masterHadModification: master.delete() &lt;/span&gt;&lt;span class="add"&gt;+ else: + del master.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; def isCustomRule(self): &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt; &lt;a id="trunkchandlerparcelsosafpimcalendarRecurrencepy"&gt;&lt;/a&gt; &lt;div class="modfile"&gt;&lt;h4&gt;Modified: trunk/chandler/parcels/osaf/pim/calendar/Recurrence.py (7506 =&gt; 7507)&lt;/h4&gt; &lt;pre class="diff"&gt; &lt;span class="info"&gt;--- 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) &lt;/span&gt;&lt;span class="lines"&gt;@@ -198,6 +198,7 @@ &lt;/span&gt;&lt;span class="cx"&gt; value = coerceTimeZone(value, tzinfo) return value &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: more comments &lt;/span&gt;&lt;span class="cx"&gt; kwargs = dict((k, getattr(self, k, None)) for k in self.listNames + self.normalNames) for key in self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -236,8 +237,8 @@ &lt;/span&gt;&lt;span class="cx"&gt; # Day tuples are (dayOrdinal, n-th week of the month), # 0 means all weeks listOfDayTuples=[(day, 0) for day in rrule._byweekday] &lt;/span&gt;&lt;span class="rem"&gt;- if rrule._bynweekday: - listOfDayTuples.extend(tup for tup in rrule._bynweekday) &lt;/span&gt;&lt;span class="add"&gt;+ if rrule._bynweekday is not None: + listOfDayTuples.extend(rrule._bynweekday) &lt;/span&gt;&lt;span class="cx"&gt; if len(listOfDayTuples) &amp;gt; 0: self.byweekday = [] for day, n in listOfDayTuples: &lt;/span&gt;&lt;span class="lines"&gt;@@ -257,10 +258,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; self.until = coerceTimeZone(until, ICUtzinfo.getDefault()) for key in self.listNames: &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: cache getattr(rrule, '_' + key) &lt;/span&gt;&lt;span class="cx"&gt; if getattr(rrule, '_' + key) is not None and \ (key not in self.interpretedNames or \ len(getattr(rrule, '_' + key)) &amp;gt; 1): &lt;/span&gt;&lt;span class="rem"&gt;- # cast tuples to list, or will the repository do this for us? &lt;/span&gt;&lt;span class="add"&gt;+ # cast tuples to list &lt;/span&gt;&lt;span class="cx"&gt; setattr(self, key, list(getattr(rrule, '_' + key))) # bymonthday and bymonth may be set automatically by dateutil, if so, # unset them &lt;/span&gt;&lt;span class="lines"&gt;@@ -274,7 +276,6 @@ &lt;/span&gt;&lt;span class="cx"&gt; del self.bymonth &lt;/span&gt;&lt;span class="rem"&gt;- &lt;/span&gt;&lt;span class="cx"&gt; def onValueChanged(self, name): &amp;quot;&amp;quot;&amp;quot;If the rule changes, update any associated events.&amp;quot;&amp;quot;&amp;quot; if name in self.listNames + self.normalNames + self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -317,9 +318,10 @@ &lt;/span&gt;&lt;span class="cx"&gt; def addRule(self, rule, rruleorexrule='rrule'): &amp;quot;&amp;quot;&amp;quot;Add an rrule or exrule, defaults to rrule.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- rulelist = getattr(self, rruleorexrule + 's', []) - rulelist.append(rule) - setattr(self, rruleorexrule + 's', rulelist) &lt;/span&gt;&lt;span class="add"&gt;+ try: + getattr(self, rruleorexrule + 's').append(rule) + except AttributeError: + setattr(self, rruleorexrule + 's', [rule]) &lt;/span&gt;&lt;span class="cx"&gt; def createDateUtilFromRule(self, dtstart): &amp;quot;&amp;quot;&amp;quot;Return an appropriate dateutil.rrule.rruleset.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="lines"&gt;@@ -377,9 +379,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; rule = list(self.rrules)[0] if rulore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/.cvsignore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/.cvsignore?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.cpp?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.sln?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.vcproj?rev=1.1&amp;content-type=text/vnd.viewcvs-markup Index: internal/launchers/win/winlaunch/.cvsignore diff -u /dev/null internal/launchers/win/winlaunch/.cvsignore:1.3 --- /dev/null Mon Jul 26 11:33:47 2004 +++ internal/launchers/win/winlaunch/.cvsignore Mon Jul 26 11:33:44 2004 @@ -0,0 +1,2 @@ +Debug +Release Index: internal/launchers/win/Makefile diff -u internal/launchers/win/Makefile:1.7 internal/launchers/win/Makefile:1.8 --- internal/launchers/win/Makefile:1.7 Tue Jul 20 15:02:33 2004 +++ internal/launchers/win/Makefile Mon Jul 26 11:33:44 2004 @@ -6,30 +6,30 @@ DLLS=$(DLLS_DIR)/msvcp71d.dll $(DLLS_DIR)/msvcr71d.dll $(DLLS_DIR)/msvcrtd.dll -build: winlaunch2/chandlerDebug.exe winlaunch1/chandler.exe +build: winlaunch/chandlerDebug.exe winlaunch_bin/chandler.exe -winlaunch2/chandlerDebug.exe: winlaunch2/winlaunch2.cpp - devenv.com winlaunch2/winlaunch2.sln /build $(SNAP) - cp winlaunch2/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) - -winlaunch1/chandler.exe: winlaunch1/winlaunch1.cpp - devenv.com winlaunch1/winlaunch1.sln /build $(SNAP) - cp winlaunch1/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin +winlaunch/chandlerDebug.exe: winlaunch/winlaunch.cpp + devenv.com winlaunch/winlaunch.sln /build $(SNAP) + cp winlaunch/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) + +winlaunch_bin/chandler.exe: winlaunch_bin/winlaunch_bin.cpp + devenv.com winlaunch_bin/winlaunch_bin.sln /build $(SNAP) + cp winlaunch_bin/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin cp $(DLLS) $(BUILD_ROOT)/$(SNAP)/bin else DLLS=$(DLLS_DIR)/msvcp71.dll $(DLLS_DIR)/msvcr71.dll -build: winlaunch2/chandler.exe winlaunch1/chandler.exe +build: winlaunch/chandler.exe winlaunch_bin/chandler.exe -winlaunch2/chandler.exe: winlaunch2/winlaunch2.cpp - devenv.com winlaunch2/winlaunch2.sln /build $(SNAP) - cp winlaunch2/$(Snap)/chandler.exe $(BUILD_ROOT) - -winlaunch1/chandler.exe: winlaunch1/winlaunch1.cpp - devenv.com winlaunch1/winlaunch1.sln /build $(SNAP) - cp winlaunch1/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin +winlaunch/chandler.exe: winlaunch/winlaunch.cpp + devenv.com winlaunch/winlaunch.sln /build $(SNAP) + cp winlaunch/$(Snap)/chandler.exe $(BUILD_ROOT) + +winlaunch_bin/chandler.exe: winlaunch_bin/winlaunch_bin.cpp + devenv.com winlaunch_bin/winlaunch_bin.sln /build $(SNAP) + cp winlaunch_bin/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin cp $(DLLS) $(BUILD_ROOT)/$(SNAP)/bin clean: Index: internal/launchers/win/winlaunch/winlaunch.vcproj diff -u /dev/null internal/launchers/win/winlaunch/winlaunch.vcproj:1.8 --- /dev/null Mon Jul 26 11:33:47 2004 +++ internal/launchers/win/winlaunch/winlaunch.vcproj Mon Jul 26 11:33:44 2004 @@ -0,0 +1,134 @@ +&lt;?xml version="1.0" encoding="Windows-1252"?&gt; +&lt;VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="winlaunch" + ProjectGUID="{90AD6487-6195-4CEB-A81F-DD83DDB6B96C}" + Keyword="Win32Proj"&gt; + &lt;Platforms&gt; + &lt;Platform + Name="Win32"/&gt; + &lt;/Platforms&gt; + &lt;Configurations&gt; + &lt;Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="1" + CharacterSet="2"&gt; + &lt;Tool + Name="VCCLCompilerTool" + Optimization="0" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" + MinimalRebuild="TRUE" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="4"/&gt; + &lt;Tool + Name="VCCustomBuildTool"/&gt; + &lt;Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/chandlerDebug.exe" + LinkIncremental="2" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile="$(OutDir)/winlaunch.pdb" + SubSystem="2" + TargetMachine="1"/&gt; + &lt;Tool + Name="VCMIDLTool"/&gt; + &lt;Tool + Name="VCPostBuildEventTool" + CommandLine="copy $(OutDir)\chandlerDebug.exe $(ProjectDir)..\..\..\..\chandler\chandlerDebug.exe"/&gt; + &lt;Tool + Name="VCPreBuildEventTool"/&gt; + &lt;Tool + Name="VCPreLinkEventTool"/&gt; + &lt;Tool + Name="VCResourceCompilerTool"/&gt; + &lt;Tool + Name="VCWebServiceProxyGeneratorTool"/&gt; + &lt;Tool + Name="VCXMLDataGeneratorTool"/&gt; + &lt;Tool + Name="VCWebDeploymentTool"/&gt; + &lt;Tool + Name="VCManagedWrapperGeneratorTool"/&gt; + &lt;Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/&gt; + &lt;/Configuration&gt; + &lt;Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="1" + CharacterSet="2"&gt; + &lt;Tool + Name="VCCLCompilerTool" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" + RuntimeLibrary="0" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="3"/&gt; + &lt;Tool + Name="VCCustomBuildTool"/&gt; + &lt;Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/chandler.exe" + LinkIncremental="1" + GenerateDebugInformation="TRUE" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1"/&gt; + &lt;Tool + Name="VCMIDLTool"/&gt; + &lt;Tool + Name="VCPostBuildEventTool" + CommandLine="copy $(OutDir)\chandler.exe $(ProjectDir)..\..\..\..\chandler\chandler.exe"/&gt; + &lt;Tool + Name="VCPreBuildEventTool"/&gt; + &lt;Tool + Name="VCPreLinkEventTool"/&gt; + &lt;Tool + Name="VCResourceCompilerTool"/&gt; + &lt;Tool + Name="VCWebServiceProxyGeneratorTool"/&gt; + 407062223.i66MNVZb028907@localhost.localdomain> Sun, 12 Apr, 21:12
<harts...@osafoundation.org> &lt;span class="add"&gt;+ # 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) &lt;/span&gt;&lt;span class="cx"&gt; &lt;/span&gt;&lt;span class="rem"&gt;- def _deleteThisAndFutureModification(self): - &amp;quot;&amp;quot;&amp;quot;Remove 'thisandfuture' modification and all its occurrences.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="add"&gt;+ def deleteThis(self): + &amp;quot;&amp;quot;&amp;quot;Exclude this occurrence from the recurrence rule.&amp;quot;&amp;quot;&amp;quot; + if not getattr(self.rruleset, 'exdates', None): + self.rruleset.exdates=[] + self.rruleset.exdates.append(self.recurrenceID) + del self + + def deleteAll(self): + &amp;quot;&amp;quot;&amp;quot;Delete master, all its modifications, occurrences, and rules.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="cx"&gt; for event in self.occurrences: if event == self: #don't delete self quite yet continue event._ignoreValueChanges = True event.delete(recursive=True) &lt;/span&gt;&lt;span class="rem"&gt;- self.rruleset._ignoreValueChanges = True - self.rruleset.delete(recursive=True) &lt;/span&gt;&lt;span class="add"&gt;+ 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) &lt;/span&gt;&lt;span class="cx"&gt; self._ignoreValueChanges = True self.delete(recursive=True) def cleanFuture(self): &amp;quot;&amp;quot;&amp;quot;Delete all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- - def deleteLater(item): - if datetimeOp(item.startTime, '&amp;gt;', self.startTime): - item._ignoreValueChanges = True - item.delete() - &lt;/span&gt;&lt;span class="cx"&gt; master = self.getMaster() &lt;/span&gt;&lt;span class="rem"&gt;- for mod in master.modifications or []: - if mod.modifies == 'thisandfuture': - if datetimeOp(mod.startTime, '&amp;gt;', self.startTime): - mod._deleteThisAndFutureModification() - else: - for event in mod.occurrences or []: - deleteLater(event) &lt;/span&gt;&lt;span class="cx"&gt; for event in master.occurrences: &lt;/span&gt;&lt;span class="rem"&gt;- deleteLater(event) &lt;/span&gt;&lt;span class="add"&gt;+ if datetimeOp(event.startTime, '&amp;gt;', self.startTime): + event._ignoreValueChanges = True + event.delete() &lt;/span&gt;&lt;span class="cx"&gt; self._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="lines"&gt;@@ -1011,13 +1013,15 @@ &lt;/span&gt;&lt;span class="cx"&gt; # A THIS modification to master, make it the new master self.moveCollections(master, event) del event.rruleset &lt;/span&gt;&lt;span class="rem"&gt;- event.recurrenceID = event.startTime &lt;/span&gt;&lt;span class="add"&gt;+ del event.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; event.modificationFor = None event.occurrenceFor = event masterHadModification = True if masterHadModification: master.delete() &lt;/span&gt;&lt;span class="add"&gt;+ else: + del master.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; def isCustomRule(self): &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt; &lt;a id="trunkchandlerparcelsosafpimcalendarRecurrencepy"&gt;&lt;/a&gt; &lt;div class="modfile"&gt;&lt;h4&gt;Modified: trunk/chandler/parcels/osaf/pim/calendar/Recurrence.py (7506 =&gt; 7507)&lt;/h4&gt; &lt;pre class="diff"&gt; &lt;span class="info"&gt;--- 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) &lt;/span&gt;&lt;span class="lines"&gt;@@ -198,6 +198,7 @@ &lt;/span&gt;&lt;span class="cx"&gt; value = coerceTimeZone(value, tzinfo) return value &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: more comments &lt;/span&gt;&lt;span class="cx"&gt; kwargs = dict((k, getattr(self, k, None)) for k in self.listNames + self.normalNames) for key in self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -236,8 +237,8 @@ &lt;/span&gt;&lt;span class="cx"&gt; # Day tuples are (dayOrdinal, n-th week of the month), # 0 means all weeks listOfDayTuples=[(day, 0) for day in rrule._byweekday] &lt;/span&gt;&lt;span class="rem"&gt;- if rrule._bynweekday: - listOfDayTuples.extend(tup for tup in rrule._bynweekday) &lt;/span&gt;&lt;span class="add"&gt;+ if rrule._bynweekday is not None: + listOfDayTuples.extend(rrule._bynweekday) &lt;/span&gt;&lt;span class="cx"&gt; if len(listOfDayTuples) &amp;gt; 0: self.byweekday = [] for day, n in listOfDayTuples: &lt;/span&gt;&lt;span class="lines"&gt;@@ -257,10 +258,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; self.until = coerceTimeZone(until, ICUtzinfo.getDefault()) for key in self.listNames: &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: cache getattr(rrule, '_' + key) &lt;/span&gt;&lt;span class="cx"&gt; if getattr(rrule, '_' + key) is not None and \ (key not in self.interpretedNames or \ len(getattr(rrule, '_' + key)) &amp;gt; 1): &lt;/span&gt;&lt;span class="rem"&gt;- # cast tuples to list, or will the repository do this for us? &lt;/span&gt;&lt;span class="add"&gt;+ # cast tuples to list &lt;/span&gt;&lt;span class="cx"&gt; setattr(self, key, list(getattr(rrule, '_' + key))) # bymonthday and bymonth may be set automatically by dateutil, if so, # unset them &lt;/span&gt;&lt;span class="lines"&gt;@@ -274,7 +276,6 @@ &lt;/span&gt;&lt;span class="cx"&gt; del self.bymonth &lt;/span&gt;&lt;span class="rem"&gt;- &lt;/span&gt;&lt;span class="cx"&gt; def onValueChanged(self, name): &amp;quot;&amp;quot;&amp;quot;If the rule changes, update any associated events.&amp;quot;&amp;quot;&amp;quot; if name in self.listNames + self.normalNames + self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -317,9 +318,10 @@ &lt;/span&gt;&lt;span class="cx"&gt; def addRule(self, rule, rruleorexrule='rrule'): &amp;quot;&amp;quot;&amp;quot;Add an rrule or exrule, defaults to rrule.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- rulelist = getattr(self, rruleorexrule + 's', []) - rulelist.append(rule) - setattr(self, rruleorexrule + 's', rulelist) &lt;/span&gt;&lt;span class="add"&gt;+ try: + getattr(self, rruleorexrule + 's').append(rule) + except AttributeError: + setattr(self, rruleorexrule + 's', [rule]) &lt;/span&gt;&lt;span class="cx"&gt; def createDateUtilFromRule(self, dtstart): &amp;quot;&amp;quot;&amp;quot;Return an appropriate dateutil.rrule.rruleset.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="lines"&gt;@@ -377,9 +379,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; rule = list(self.rrules)[0] if rulore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/.cvsignore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/.cvsignore?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.cpp?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.sln?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.vcproj?rev=1.1&amp;content-type=text/vnd.viewcvs-markup Index: internal/launchers/win/winlaunch/.cvsignore diff -u /dev/null internal/launchers/win/winlaunch/.cvsignore:1.3 --- /dev/null Mon Jul 26 11:33:47 2004 +++ internal/launchers/win/winlaunch/.cvsignore Mon Jul 26 11:33:44 2004 @@ -0,0 +1,2 @@ +Debug +Release Index: internal/launchers/win/Makefile diff -u internal/launchers/win/Makefile:1.7 internal/launchers/win/Makefile:1.8 --- internal/launchers/win/Makefile:1.7 Tue Jul 20 15:02:33 2004 +++ internal/launchers/win/Makefile Mon Jul 26 11:33:44 2004 @@ -6,30 +6,30 @@ DLLS=$(DLLS_DIR)/msvcp71d.dll $(DLLS_DIR)/msvcr71d.dll $(DLLS_DIR)/msvcrtd.dll -build: winlaunch2/chandlerDebug.exe winlaunch1/chandler.exe +build: winlaunch/chandlerDebug.exe winlaunch_bin/chandler.exe -winlaunch2/chandlerDebug.exe: winlaunch2/winlaunch2.cpp - devenv.com winlaunch2/winlaunch2.sln /build $(SNAP) - cp winlaunch2/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) - -winlaunch1/chandler.exe: winlaunch1/winlaunch1.cpp - devenv.com winlaunch1/winlaunch1.sln /build $(SNAP) - cp winlaunch1/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin +winlaunch/chandlerDebug.exe: winlaunch/winlaunch.cpp + devenv.com winlaunch/winlaunch.sln /build $(SNAP) + cp winlaunch/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) + +winlaunch_bin/chandler.exe: winlaunch_bin/winlaunch_bin.cpp + devenv.com winlaunch_bin/winlaunch_bin.sln /build $(SNAP) + cp winlaunch_bin/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin cp $(DLLS) $(BUILD_ROOT)/$(SNAP)/bin else DLLS=$(DLLS_DIR)/msvcp71.dll $(DLLS_DIR)/msvcr71.dll -build: winlaunch2/chandler.exe winlaunch1/chandler.exe +build: winlaunch/chandler.exe winlaunch_bin/chandler.exe -winlaunch2/chandler.exe: winlaunch2/winlaunch2.cpp - devenv.com winlaunch2/winlaunch2.sln /build $(SNAP) - cp winlaunch2/$(Snap)/chandler.exe $(BUILD_ROOT) - -winlaunch1/chandler.exe: winlaunch1/winlaunch1.cpp - devenv.com winlaunch1/winlaunch1.sln /build $(SNAP) - cp winlaunch1/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin +winlaunch/chandler.exe: winlaunch/winlaunch.cpp + devenv.com winlaunch/winlaunch.sln /build $(SNAP) + cp winlaunch/$(Snap)/chandler.exe $(BUILD_ROOT) + +winlaunch_bin/chandler.exe: winlaunch_bin/winlaunch_bin.cpp + devenv.com winlaunch_bin/winlaunch_bin.sln /build $(SNAP) + cp winlaunch_bin/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin cp $(DLLS) $(BUILD_ROOT)/$(SNAP)/bin clean: Index: internal/launchers/win/winlaunch/winlaunch.vcproj diff -u /dev/null internal/launchers/win/winlaunch/winlaunch.vcproj:1.8 --- /dev/null Mon Jul 26 11:33:47 2004 +++ internal/launchers/win/winlaunch/winlaunch.vcproj Mon Jul 26 11:33:44 2004 @@ -0,0 +1,134 @@ +&lt;?xml version="1.0" encoding="Windows-1252"?&gt; +&lt;VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="winlaunch" + ProjectGUID="{90AD6487-6195-4CEB-A81F-DD83DDB6B96C}" + Keyword="Win32Proj"&gt; + &lt;Platforms&gt; + &lt;Platform + Name="Win32"/&gt; + &lt;/Platforms&gt; + &lt;Configurations&gt; + &lt;Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="1" + CharacterSet="2"&gt; + &lt;Tool + Name="VCCLCompilerTool" + Optimization="0" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" + MinimalRebuild="TRUE" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="4"/&gt; + &lt;Tool + Name="VCCustomBuildTool"/&gt; + &lt;Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/chandlerDebug.exe" + LinkIncremental="2" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile="$(OutDir)/winlaunch.pdb" + SubSystem="2" + TargetMachine="1"/&gt; + &lt;Tool + Name="VCMIDLTool"/&gt; + &lt;Tool + Name="VCPostBuildEventTool" + CommandLine="copy $(OutDir)\chandlerDebug.exe $(ProjectDir)..\..\..\..\chandler\chandlerDebug.exe"/&gt; + &lt;Tool + Name="VCPreBuildEventTool"/&gt; + &lt;Tool + Name="VCPreLinkEventTool"/&gt; + &lt;Tool + Name="VCResourceCompilerTool"/&gt; + &lt;Tool + Name="VCWebServiceProxyGeneratorTool"/&gt; + &lt;Tool + Name="VCXMLDataGeneratorTool"/&gt; + &lt;Tool + Name="VCWebDeploymentTool"/&gt; + &lt;Tool + Name="VCManagedWrapperGeneratorTool"/&gt; + &lt;Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/&gt; + &lt;/Configuration&gt; + &lt;Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="1" + CharacterSet="2"&gt; + &lt;Tool + Name="VCCLCompilerTool" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" + RuntimeLibrary="0" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="3"/&gt; + &lt;Tool + Name="VCCustomBuildTool"/&gt; + &lt;Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/chandler.exe" + LinkIncremental="1" + GenerateDebugInformation="TRUE" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1"/&gt; + &lt;Tool + Name="VCMIDLTool"/&gt; + &lt;Tool + Name="VCPostBuildEventTool" + CommandLine="copy $(OutDir)\chandler.exe $(ProjectDir)..\..\..\..\chandler\chandler.exe"/&gt; + &lt;Tool + Name="VCPreBuildEventTool"/&gt; + &lt;Tool + Name="VCPreLinkEventTool"/&gt; + &lt;Tool + Name="VCResourceCompilerTool"/&gt; + &lt;Tool + Name="VCWebServiceProxyGeneratorTool"/&gt; + letelt;Tool + Name="VCXMLDataGeneratorTool"/&gt; + &lt;Tool + Name="VCWebDeploymentTool"/&gt; + &lt;Tool + Name="VCManagedWrapperGeneratorTool"/&gt; + &lt;Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/&gt; + &lt;/Configuration&gt; + &lt;/Configurations&gt; + &lt;References&gt; + &lt;/References&gt; + &lt;Files&gt; + &lt;Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"&gt; + &lt;File + RelativePath=".\winlaunch.cpp"&gt; + &lt;/File&gt; + &lt;/Filter&gt; + &lt;Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"&gt; + &lt;/Filter&gt; + &lt;Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"&gt; + &lt;/Filter&gt; + &lt;/Files&gt; + &lt;Globals&gt; + &lt;/Globals&gt; +&lt;/VisualStudioProject&gt; y get added to the sidebar Sun, 12 Apr, 21:12
<harts...@osafoundation.org> [No Subject] Sun, 12 Apr, 21:12
<harts...@osafoundation.org> [No Subject] Sun, 12 Apr, 21:12
<harts...@osafoundation.org> [No Subject] Sun, 12 Apr, 21:12
<harts...@osafoundation.org> [No Subject] Sun, 12 Apr, 21:12
<harts...@osafoundation.org> [No Subject] Sun, 12 Apr, 21:12
<harts...@osafoundation.org> [No Subject] Sun, 12 Apr, 21:12
<harts...@osafoundation.org> [No Subject] Sun, 12 Apr, 21:12
<harts...@osafoundation.org> [No Subject] Sun, 12 Apr, 21:12
<harts...@osafoundation.org> [No Subject] Sun, 12 Apr, 21:12
<mor...@osafoundation.org> [No Subject] Sun, 18 Nov, 07:51
Parlante vajda) released UUIDext 0.3-2 Sat, 09 Apr, 03:30
Parlante vajda) released UUIDext 0.3-2 Sat, 09 Apr, 03:30
Parlante vajda) released UUIDext 0.3-2 Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
Parlante [No Subject] Sat, 09 Apr, 03:30
b...@code-bear.com [No Subject] Sat, 13 Sep, 09:29
dation.org ts@Fri, 09 Jul, 19:57 Tue, 30 Dec, 20:17
dation.org ts@Fri, 09 Jul, 19:57 Tue, 30 Dec, 20:17
e self.startTime &lt;/span&gt;&lt;span class="rem"&gt;- # this kludge should be replaced with the new domain attribute aspect -## elif name not in &amp;quot;&amp;quot;&amp;quot;modifications modificationFor occurrences -## occurrenceFor modifies isGenerated recurrenceID -## _ignoreValueChanges modificationRecurrenceID queries -## contentsOwner TPBSelectedItemOwner TPBDetailItemOwner -## itemCollectionInclusions -## &amp;quot;&amp;quot;&amp;quot;.split(): - # this won't work with stamping, temporary solution to allow testing &lt;/span&gt;&lt;span class="add"&gt;+ # 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 &lt;/span&gt;&lt;span class="cx"&gt; elif changeName: if DEBUG: logger.debug(&amp;quot;about to changeThis in onValueChanged(name=%s) for %s&amp;quot;, name, str(self)) &lt;/span&gt;&lt;span class="lines"&gt;@@ -946,54 +947,55 @@ &lt;/span&gt;&lt;span class="cx"&gt; first = self.getFirstInRule() self._deleteGeneratedOccurrences() if first.hasLocalAttributeValue('modifications'): &lt;/span&gt;&lt;span class="add"&gt;+ until = first.rruleset.rrules.first().calculatedUntil() &lt;/span&gt;&lt;span class="cx"&gt; for mod in first.modifications: &lt;/span&gt;&lt;span class="rem"&gt;- 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, '&amp;gt;', until) \ - and mod != first: - mod._ignoreValueChanges = True - mod.delete() &lt;/span&gt;&lt;span class="add"&gt;+ # this won't work for complicated rrulesets + if until != None and datetimeOp(mod.recurrenceID, '&amp;gt;', until): + mod._ignoreValueChanges = True + mod.delete() &lt;/span&gt;&lt;span class="cx"&gt; # create a backup first._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="rem"&gt;- def removeFuture(self): &lt;/span&gt;&lt;span class="add"&gt;+ def deleteFuture(self): &lt;/span&gt;&lt;span class="cx"&gt; &amp;quot;&amp;quot;&amp;quot;Delete self and all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- pass &lt;/span&gt;&lt;span class="add"&gt;+ # 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) &lt;/span&gt;&lt;span class="cx"&gt; &lt;/span&gt;&lt;span class="rem"&gt;- def _deleteThisAndFutureModification(self): - &amp;quot;&amp;quot;&amp;quot;Remove 'thisandfuture' modification and all its occurrences.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="add"&gt;+ def deleteThis(self): + &amp;quot;&amp;quot;&amp;quot;Exclude this occurrence from the recurrence rule.&amp;quot;&amp;quot;&amp;quot; + if not getattr(self.rruleset, 'exdates', None): + self.rruleset.exdates=[] + self.rruleset.exdates.append(self.recurrenceID) + del self + + def deleteAll(self): + &amp;quot;&amp;quot;&amp;quot;Delete master, all its modifications, occurrences, and rules.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="cx"&gt; for event in self.occurrences: if event == self: #don't delete self quite yet continue event._ignoreValueChanges = True event.delete(recursive=True) &lt;/span&gt;&lt;span class="rem"&gt;- self.rruleset._ignoreValueChanges = True - self.rruleset.delete(recursive=True) &lt;/span&gt;&lt;span class="add"&gt;+ 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) &lt;/span&gt;&lt;span class="cx"&gt; self._ignoreValueChanges = True self.delete(recursive=True) def cleanFuture(self): &amp;quot;&amp;quot;&amp;quot;Delete all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- - def deleteLater(item): - if datetimeOp(item.startTime, '&amp;gt;', self.startTime): - item._ignoreValueChanges = True - item.delete() - &lt;/span&gt;&lt;span class="cx"&gt; master = self.getMaster() &lt;/span&gt;&lt;span class="rem"&gt;- for mod in master.modifications or []: - if mod.modifies == 'thisandfuture': - if datetimeOp(mod.startTime, '&amp;gt;', self.startTime): - mod._deleteThisAndFutureModification() - else: - for event in mod.occurrences or []: - deleteLater(event) &lt;/span&gt;&lt;span class="cx"&gt; for event in master.occurrences: &lt;/span&gt;&lt;span class="rem"&gt;- deleteLater(event) &lt;/span&gt;&lt;span class="add"&gt;+ if datetimeOp(event.startTime, '&amp;gt;', self.startTime): + event._ignoreValueChanges = True + event.delete() &lt;/span&gt;&lt;span class="cx"&gt; self._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="lines"&gt;@@ -1011,13 +1013,15 @@ &lt;/span&gt;&lt;span class="cx"&gt; # A THIS modification to master, make it the new master self.moveCollections(master, event) del event.rruleset &lt;/span&gt;&lt;span class="rem"&gt;- event.recurrenceID = event.startTime &lt;/span&gt;&lt;span class="add"&gt;+ del event.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; event.modificationFor = None event.occurrenceFor = event masterHadModification = True if masterHadModification: master.delete() &lt;/span&gt;&lt;span class="add"&gt;+ else: + del master.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; def isCustomRule(self): &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt; &lt;a id="trunkchandlerparcelsosafpimcalendarRecurrencepy"&gt;&lt;/a&gt; &lt;div class="modfile"&gt;&lt;h4&gt;Modified: trunk/chandler/parcels/osaf/pim/calendar/Recurrence.py (7506 =&gt; 7507)&lt;/h4&gt; &lt;pre class="diff"&gt; &lt;span class="info"&gt;--- 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) &lt;/span&gt;&lt;span class="lines"&gt;@@ -198,6 +198,7 @@ &lt;/span&gt;&lt;span class="cx"&gt; value = coerceTimeZone(value, tzinfo) return value &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: more comments &lt;/span&gt;&lt;span class="cx"&gt; kwargs = dict((k, getattr(self, k, None)) for k in self.listNames + self.normalNames) for key in self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -236,8 +237,8 @@ &lt;/span&gt;&lt;span class="cx"&gt; # Day tuples are (dayOrdinal, n-th week of the month), # 0 means all weeks listOfDayTuples=[(day, 0) for day in rrule._byweekday] &lt;/span&gt;&lt;span class="rem"&gt;- if rrule._bynweekday: - listOfDayTuples.extend(tup for tup in rrule._bynweekday) &lt;/span&gt;&lt;span class="add"&gt;+ def createDateUtilFromRule(self, dtstart): &amp;quot;&amp;quot;&amp;quot;Return an appropriate dateutil.rrule.rruleset.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="lines"&gt;@@ -377,9 +379,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; rule = list(self.rrules)[0] if rule.interval != 1: return True &lt;/span&gt;&lt;span class="rem"&gt;- for attr in RecurrenceRule.listNames+(&amp;quot;byweekday&amp;quot;,): &lt;/span&gt;&lt;span class="add"&gt;+ for attr in RecurrenceRule.listNames: &lt;/span&gt;&lt;span class="cx"&gt; if getattr(rule, attr): return True &lt;/span&gt;&lt;span class="add"&gt;+ if rule.byweekday: + return True &lt;/span&gt;&lt;span class="cx"&gt; return False def getCustomDescription(self): &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt; &lt;a id="trunkchandlerparcelsosafpimcalendartestsTestRecurringEventpy"&gt;&lt;/a&gt; &lt;div class="modfile"&gt;&lt;h4&gt;Modified: trunk/chandler/parcels/osaf/pim/calendar/tests/TestRecurringEvent.py (7506 =&gt; 7507)&lt;/h4&gt; &lt;pre class="diff"&gt; &lt;span class="info"&gt;--- 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) &lt;/span&gt;&lt;span class="lines"&gt;@@ -290,6 +290,9 @@ &lt;/span&gt;&lt;span class="cx"&gt; self.assertEqual(len(list(third.occurrences)), 3) self.assertEqual(fourth.recurrenceID, fourth.startTime + timedelta(hours=1)) &lt;/span&gt;&lt;span class="add"&gt;+ self.assertEqual(third.rruleset, fourth.rruleset) + self.assertEqual(third.icalUID, fourth.icalUID) + self.assertNotEqual(second.icalUID, third.icalUID) &lt;/span&gt;&lt;span class="cx"&gt; # make sure second's rruleset was updated self.assert_(list(second.rruleset.rrules)[0].until &amp;lt; thirdChangedStart) &lt;/span&gt;&lt;span class="lines"&gt;@@ -413,7 +416,13 @@ &lt;/span&gt;&lt;span class="cx"&gt; self.assertNotEqual(self.event.icalUID, second.icalUID) self.assertEqual(second.icalUID, third.icalUID) self.assertEqual(third.modificationFor, second.occurrenceFor) &lt;/span&gt;&lt;span class="rem"&gt;- &lt;/span&gt;&lt;span class="add"&gt;+ + def testRdatesAndExdates(self): + pass + + def testDelete(self): + pass + &lt;/span&gt;&lt;span class="cx"&gt; def testNeverEndingEvents(self): ruleItem = RecurrenceRule(None, view=self.rep.view) ruleItem.freq = 'daily' &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt; &lt;a id="trunkchandlerparcelsosafsharingICalendarpy"&gt;&lt;/a&gt; &lt;div class="modfile"&gt;&lt;h4&gt;Modified: trunk/chandler/parcels/osaf/sharing/ICalendar.py (7506 =&gt; 7507)&lt;/h4&gt; &lt;pre class="diff"&gt; &lt;span class="info"&gt;--- 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) &lt;/span&gt;&lt;span class="lines"&gt;@@ -318,6 +318,8 @@ &lt;/span&gt;&lt;span class="cx"&gt; if not isinstance(item, AbstractCollection): print &amp;quot;Only a share or an item collection can be passed in&amp;quot; #@@@MOR Raise something &lt;/span&gt;&lt;span class="add"&gt;+ else: + caldavReturn = None &lt;/span&gt;&lt;span class="cx"&gt; input = StringIO.StringIO(text) calendar = vobject.readComponents(input, validate=True).next() &lt;/span&gt;&lt;span class="lines"&gt;@@ -452,13 +454,20 @@ &lt;/span&gt;&lt;span class="cx"&gt; continue else: eventItem = uidMatchItem &lt;/span&gt;&lt;span class="add"&gt;+ 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() + &lt;/span&gt;&lt;span class="cx"&gt; countUpdated += 1 else: eventItem = pickKind.newItem(None, newItemParent) countNew += 1 &lt;/span&gt;&lt;span class="rem"&gt;- eventItem.icalUID = event.uid[0].value &lt;/span&gt;&lt;span class="add"&gt;+ eventItem.icalUID = event.uid[0].value &lt;/span&gt;&lt;span class="cx"&gt; &lt;/span&gt;&lt;span class="rem"&gt;- &lt;/span&gt;&lt;span class="cx"&gt; # 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 &lt;/span&gt;&lt;span class="lines"&gt;@@ -520,7 +529,7 @@ &lt;/span&gt;&lt;span class="cx"&gt; if self.fileStyle() == self.STYLE_SINGLE: item.add(eventItem.getMaster()) else: &lt;/span&gt;&lt;span class="rem"&gt;- return eventItem &lt;/span&gt;&lt;span class="add"&gt;+ caldavReturn = eventItem.getMaster() &lt;/span&gt;&lt;span class="cx"&gt; except Exception, e: if __debug__: raise e &lt;/span&gt;&lt;span class="lines"&gt;@@ -531,8 +540,12 @@ &lt;/span&gt;&lt;span class="cx"&gt; logger.info(&amp;quot;...iCalendar import of %d new items, %d updated&amp;quot; % \ (countNew, countUpdated)) &lt;/span&gt;&lt;span class="rem"&gt;- return item &lt;/span&gt;&lt;span class="add"&gt;+ if self.fileStyle() == self.STYLE_SINGLE: + return item + else: + return caldavReturn &lt;/span&gt;&lt;span class="cx"&gt; &lt;/span&gt;&lt;span class="add"&gt;+ &lt;/span&gt;&lt;span class="cx"&gt; def exportProcess(self, share, depth=0): cal = itemsToVObject(self.itsView, share.contents, filters=self.share.filterAttributes) &lt;/span&gt; &lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; % Tue, 18 Feb, 17:56
e [No Subject] Tue, 18 Feb, 17:56
ia [No Subject] Mon, 26 May, 09:29
ia [No Subject] Mon, 26 May, 09:29
ia [No Subject] Mon, 26 May, 09:29
ia [No Subject] Mon, 26 May, 09:29
ia [No Subject] Mon, 26 May, 09:29
ia [No Subject] Mon, 26 May, 09:29
is _ignoreValueChanges = True - mod.delete() &lt;/span&gt;&lt;span class="add"&gt;+ # this won't work for complicated rrulesets + if until != None and datetimeOp(mod.recurrenceID, '&amp;gt;', until): + mod._ignoreValueChanges = True + mod.delete() &lt;/span&gt;&lt;span class="cx"&gt; # create a backup first._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="rem"&gt;- def removeFuture(self): &lt;/span&gt;&lt;span class="add"&gt;+ def deleteFuture(self): &lt;/span&gt;&lt;span class="cx"&gt; &amp;quot;&amp;quot;&amp;quot;Delete self and all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- pass &lt;/span&gt;&lt;span class="add"&gt;+ # 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) &lt;/span&gt;&lt;span class="cx"&gt; &lt;/span&gt;&lt;span class="rem"&gt;- def _deleteThisAndFutureModification(self): - &amp;quot;&amp;quot;&amp;quot;Remove 'thisandfuture' modification and all its occurrences.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="add"&gt;+ def deleteThis(self): + &amp;quot;&amp;quot;&amp;quot;Exclude this occurrence from the recurrence rule.&amp;quot;&amp;quot;&amp;quot; + if not getattr(self.rruleset, 'exdates', None): + self.rruleset.exdates=[] + self.rruleset.exdates.append(self.recurrenceID) + del self + + def deleteAll(self): + &amp;quot;&amp;quot;&amp;quot;Delete master, all its modifications, occurrences, and rules.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="cx"&gt; for event in self.occurrences: if event == self: #don't delete self quite yet continue event._ignoreValueChanges = True event.delete(recursive=True) &lt;/span&gt;&lt;span class="rem"&gt;- self.rruleset._ignoreValueChanges = True - self.rruleset.delete(recursive=True) &lt;/span&gt;&lt;span class="add"&gt;+ 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) &lt;/span&gt;&lt;span class="cx"&gt; self._ignoreValueChanges = True self.delete(recursive=True) def cleanFuture(self): &amp;quot;&amp;quot;&amp;quot;Delete all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- - def deleteLater(item): - if datetimeOp(item.startTime, '&amp;gt;', self.startTime): - item._ignoreValueChanges = True - item.delete() - &lt;/span&gt;&lt;span class="cx"&gt; master = self.getMaster() &lt;/span&gt;&lt;span class="rem"&gt;- for mod in master.modifications or []: - if mod.modifies == 'thisandfuture': - if datetimeOp(mod.startTime, '&amp;gt;', self.startTime): - mod._deleteThisAndFutureModification() - else: - for event in mod.occurrences or []: - deleteLater(event) &lt;/span&gt;&lt;span class="cx"&gt; for event in master.occurrences: &lt;/span&gt;&lt;span class="rem"&gt;- deleteLater(event) &lt;/span&gt;&lt;span class="add"&gt;+ if datetimeOp(event.startTime, '&amp;gt;', self.startTime): + event._ignoreValueChanges = True + event.delete() &lt;/span&gt;&lt;span class="cx"&gt; self._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="lines"&gt;@@ -1011,13 +1013,15 @@ &lt;/span&gt;&lt;span class="cx"&gt; # A THIS modification to master, make it the new master self.moveCollections(master, event) del event.rruleset &lt;/span&gt;&lt;span class="rem"&gt;- event.recurrenceID = event.startTime &lt;/span&gt;&lt;span class="add"&gt;+ del event.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; event.modificationFor = None event.occurrenceFor = event masterHadModification = True if masterHadModification: master.delete() &lt;/span&gt;&lt;span class="add"&gt;+ else: + del master.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; def isCustomRule(self): &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt; &lt;a id="trunkchandlerparcelsosafpimcalendarRecurrencepy"&gt;&lt;/a&gt; &lt;div class="modfile"&gt;&lt;h4&gt;Modified: trunk/chandler/parcels/osaf/pim/calendar/Recurrence.py (7506 =&gt; 7507)&lt;/h4&gt; &lt;pre class="diff"&gt; &lt;span class="info"&gt;--- 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) &lt;/span&gt;&lt;span class="lines"&gt;@@ -198,6 +198,7 @@ &lt;/span&gt;&lt;span class="cx"&gt; value = coerceTimeZone(value, tzinfo) return value &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: more comments &lt;/span&gt;&lt;span class="cx"&gt; kwargs = dict((k, getattr(self, k, None)) for k in self.listNames + self.normalNames) for key in self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -236,8 +237,8 @@ &lt;/span&gt;&lt;span class="cx"&gt; # Day tuples are (dayOrdinal, n-th week of the month), # 0 means all weeks listOfDayTuples=[(day, 0) for day in rrule._byweekday] &lt;/span&gt;&lt;span class="rem"&gt;- if rrule._bynweekday: - listOfDayTuples.extend(tup for tup in rrule._bynweekday) &lt;/span&gt;&lt;span class="add"&gt;+ if rrule._bynweekday is not None: + listOfDayTuples.extend(rrule._bynweekday) &lt;/span&gt;&lt;span class="cx"&gt; if len(listOfDayTuples) &amp;gt; 0: self.byweekday = [] for day, n in listOfDayTuples: &lt;/span&gt;&lt;span class="lines"&gt;@@ -257,10 +258,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; self.until = coerceTimeZone(until, ICUtzinfo.getDefault()) for key in self.listNames: &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: cache getattr(rrule, '_' + key) &lt;/span&gt;&lt;span class="cx"&gt; if getattr(rrule, '_' + key) is not None and \ (key not in self.interpretedNames or \ len(getattr(rrule, '_' + key)) &amp;gt; 1): &lt;/span&gt;&lt;span class="rem"&gt;- # cast tuples to list, or will the repository do this for us? &lt;/span&gt;&lt;span class="add"&gt;+ # cast tuples to list &lt;/span&gt;&lt;span class="cx"&gt; setattr(self, key, list(getattr(rrule, '_' + key))) # bymonthday and bymonth may be set automatically by dateutil, if so, # unset them &lt;/span&gt;&lt;span class="lines"&gt;@@ -274,7 +276,6 @@ &lt;/span&gt;&lt;span class="cx"&gt; del self.bymonth &lt;/span&gt;&lt;span class="rem"&gt;- &lt;/span&gt;&lt;span class="cx"&gt; def onValueChanged(self, name): &amp;quot;&amp;quot;&amp;quot;If the rule changes, update any associated events.&amp;quot;&amp;quot;&amp;quot; if name in self.listNames + self.normalNames + self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -317,9 +318,10 @@ &lt;/span&gt;&lt;span class="cx"&gt; def addRule(self, rule, rruleorexrule='rrule'): &amp;quot;&amp;quot;&amp;quot;Add an rrule or exrule, defaults to rrule.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- rulelist = getattr(self, rruleorexrule + 's', []) - rulelist.append(rule) - setattr(self, rruleorexrule + 's', rulelist) &lt;/span&gt;&lt;span class="add"&gt;+ try: + getattr(self, rruleorexrule + 's').append(rule) + except AttributeError: + setattr(self, rruleorexrule + 's', [rule]) &lt;/span&gt;&lt;span class="cx"&gt; def createDateUtilFromRule(self, dtstart): &amp;quot;&amp;quot;&amp;quot;Return an appropriate dateutil.rrule.rruleset.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="lines"&gt;@@ -377,9 +379,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; rule = list(self.rrules)[0] if rulore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/.cvsignore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/.cvsignore?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.cpp?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.sln?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.vcproj?rev=1.1&amp;content-type=text/vnd.viewcvs-markup Index: internal/launchers/win/winlaunch/.cvsignore diff -u /dev/null internal/launchers/win/winlaunch/.cvsignore:1.3 --- /dev/null Mon Jul 26 11:33:47 2004 +++ internal/launchers/win/winlaunch/.cvsignore Mon Jul 26 11:33:44 2004 @@ -0,0 +1,2 @@ +Debug +Release Index: internal/launchers/win/Makefile diff -u internal/launchers/win/Makefile:1.7 internal/launchers/win/Makefile:1.8 --- internal/launchers/win/Makefile:1.7 Tue Jul 20 15:02:33 2004 +++ internal/launchers/win/Makefile Mon Jul 26 11:33:44 2004 @@ -6,30 +6,30 @@ DLLS=$(DLLS_DIR)/msvcp71d.dll $(DLLS_DIR)/msvcr71d.dll $(DLLS_DIR)/msvcrtd.dll -build: winlaunch2/chandlerDebug.exe winlaunch1/chandler.exe +build: winlaunch/chandlerDebug.exe winlaunch_bin/chandler.exe -winlaunch2/chandlerDebug.exe: winlaunch2/winlaunch2.cpp - devenv.com winlaunch2/winlaunch2.sln /build $(SNAP) - cp winlaunch2/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) - -winlaunch1/chandler.exe: winlaunch1/winlaunch1.cpp - devenv.com winlaunch1/winlaunch1.sln /build $(SNAP) - cp winlaunch1/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin +winlaunch/chandlerDebug.exe: winlaunch/winlaunch.cpp + devenv.com winlaunch/winlaunch.sln /build $(SNAP) + cp winlaunch/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) + +winlaunch_bin/chandler.exe: winlaunch_bin/winlaunch_bin.cpp + devenv.com winlaunch_bin/winlauaskMixin</classes> + + <Cloud itsName="Cloud"> + <kind itemref="tasks:TaskMixin"/> + <Endpoint itsName="requestor"> + <attribute value="tasks:requestor"/> + <includePolicy value="byValue"/> + </Endpoint> + <endpoints itemref="tasks:TaskMixin/Cloud/requestor"/> + + <Endpoint itsName="requestee"> + <attribute value="tasks:requestee"/> + <includePolicy value="byValue"/> + </Endpoint> + <endpoints itemref="tasks:TaskMixin/Cloud/requestee"/> + + <Endpoint itsName="dependsOn"> + <attribute value="tasks:dependsOn"/> + <includePolicy value="byValue"/> + </Endpoint> + <endpoints itemref="tasks:TaskMixin/Cloud/dependsOn"/> + + <Endpoint itsName="preventsProgressOn"> + <attribute value="tasks:preventsProgressOn"/> + <includePolicy value="byValue"/> + </Endpoint> + <endpoints itemref="tasks:TaskMixin/Cloud/preventsProgressOn"/> + + </Cloud> + </Kind> <Kind itsName="Task"> Sun, 22 Jun, 20:09
ja...@wordzoo.com k-i[Commits] (vajda) released UUIDext 0.3-2 Thu, 24 Apr, 14:24
ja...@wordzoo.com k-i[Commits] (vajda) released UUIDext 0.3-2 Thu, 24 Apr, 14:24
ja...@wordzoo.com [No Subject] Thu, 24 Apr, 14:24
ja...@wordzoo.com [No Subject] Thu, 24 Apr, 14:24
ja...@wordzoo.com [No Subject] Thu, 24 Apr, 14:24
ja...@wordzoo.com [No Subject] Thu, 24 Apr, 14:24
ja...@wordzoo.com [No Subject] Thu, 24 Apr, 14:24
ja...@wordzoo.com [No Subject] Thu, 24 Apr, 14:24
ja...@wordzoo.com [No Subject] Thu, 24 Apr, 14:24
ja...@wordzoo.com [No Subject] Thu, 24 Apr, 14:24
ja...@wordzoo.com [No Subject] Thu, 24 Apr, 14:24
m.@osafoundation.org> urrenceID set &lt;/span&gt;&lt;span class="rem"&gt;- if self is self.getFirstInRule(): &lt;/span&gt;&lt;span class="add"&gt;+ if self == self.getFirstInRule(): &lt;/span&gt;&lt;span class="cx"&gt; self.modificationRecurrenceID = self.startTime self.recurrenceID = self.startTime &lt;/span&gt;&lt;span class="rem"&gt;- # this kludge should be replaced with the new domain attribute aspect -## elif name not in &amp;quot;&amp;quot;&amp;quot;modifications modificationFor occurrences -## occurrenceFor modifies isGenerated recurrenceID -## _ignoreValueChanges modificationRecurrenceID queries -## contentsOwner TPBSelectedItemOwner TPBDetailItemOwner -## itemCollectionInclusions -## &amp;quot;&amp;quot;&amp;quot;.split(): - # this won't work with stamping, temporary solution to allow testing &lt;/span&gt;&lt;span class="add"&gt;+ # 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 &lt;/span&gt;&lt;span class="cx"&gt; elif changeName: if DEBUG: logger.debug(&amp;quot;about to changeThis in onValueChanged(name=%s) for %s&amp;quot;, name, str(self)) &lt;/span&gt;&lt;span class="lines"&gt;@@ -946,54 +947,55 @@ &lt;/span&gt;&lt;span class="cx"&gt; first = self.getFirstInRule() self._deleteGeneratedOccurrences() if first.hasLocalAttributeValue('modifications'): &lt;/span&gt;&lt;span class="add"&gt;+ until = first.rruleset.rrules.first().calculatedUntil() &lt;/span&gt;&lt;span class="cx"&gt; for mod in first.modifications: &lt;/span&gt;&lt;span class="rem"&gt;- 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, '&amp;gt;', until) \ - and mod != first: - mod._ignoreValueChanges = True - mod.delete() &lt;/span&gt;&lt;span class="add"&gt;+ # this won't work for complicated rrulesets + if until != None and datetimeOp(mod.recurrenceID, '&amp;gt;', until): + mod._ignoreValueChanges = True + mod.delete() &lt;/span&gt;&lt;span class="cx"&gt; # create a backup first._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="rem"&gt;- def removeFuture(self): &lt;/span&gt;&lt;span class="add"&gt;+ def deleteFuture(self): &lt;/span&gt;&lt;span class="cx"&gt; &amp;quot;&amp;quot;&amp;quot;Delete self and all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- pass &lt;/span&gt;&lt;span class="add"&gt;+ # 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) &lt;/span&gt;&lt;span class="cx"&gt; &lt;/span&gt;&lt;span class="rem"&gt;- def _deleteThisAndFutureModification(self): - &amp;quot;&amp;quot;&amp;quot;Remove 'thisandfuture' modification and all its occurrences.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="add"&gt;+ def deleteThis(self): + &amp;quot;&amp;quot;&amp;quot;Exclude this occurrence from the recurrence rule.&amp;quot;&amp;quot;&amp;quot; + if not getattr(self.rruleset, 'exdates', None): + self.rruleset.exdates=[] + self.rruleset.exdates.append(self.recurrenceID) + del self + + def deleteAll(self): + &amp;quot;&amp;quot;&amp;quot;Delete master, all its modifications, occurrences, and rules.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="cx"&gt; for event in self.occurrences: if event == self: #don't delete self quite yet continue event._ignoreValueChanges = True event.delete(recursive=True) &lt;/span&gt;&lt;span class="rem"&gt;- self.rruleset._ignoreValueChanges = True - self.rruleset.delete(recursive=True) &lt;/span&gt;&lt;span class="add"&gt;+ 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) &lt;/span&gt;&lt;span class="cx"&gt; self._ignoreValueChanges = True self.delete(recursive=True) def cleanFuture(self): &amp;quot;&amp;quot;&amp;quot;Delete all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- - def deleteLater(item): - if datetimeOp(item.startTime, '&amp;gt;', self.startTime): - item._ignoreValueChanges = True - item.delete() - &lt;/span&gt;&lt;span class="cx"&gt; master = self.getMaster() &lt;/span&gt;&lt;span class="rem"&gt;- for mod in master.modifications or []: - if mod.modifies == 'thisandfuture': - if datetimeOp(mod.startTime, '&amp;gt;', self.startTime): - mod._deleteThisAndFutureModification() - else: - for event in mod.occurrences or []: - deleteLater(event) &lt;/span&gt;&lt;span class="cx"&gt; for event in master.occurrences: &lt;/span&gt;&lt;span class="rem"&gt;- deleteLater(event) &lt;/span&gt;&lt;span class="add"&gt;+ if datetimeOp(event.startTime, '&amp;gt;', self.startTime): + event._ignoreValueChanges = True + event.delete() &lt;/span&gt;&lt;span class="cx"&gt; self._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="lines"&gt;@@ -1011,13 +1013,15 @@ &lt;/span&gt;&lt;span class="cx"&gt; # A THIS modification to master, make it the new master self.moveCollections(master, event) del event.rruleset &lt;/span&gt;&lt;span class="rem"&gt;- event.recurrenceID = event.startTime &lt;/span&gt;&lt;span class="add"&gt;+ del event.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; event.modificationFor = None event.occurrenceFor = event masterHadModification = True if masterHadModification: master.delete() &lt;/span&gt;&lt;span class="add"&gt;+ else: + del master.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; def isCustomRule(self): &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt; &lt;a id="trunkchandlerparcelsosafpimcalendarRecurrencepy"&gt;&lt;/a&gt; &lt;div class="modfile"&gt;&lt;h4&gt;Modified: trunk/chandler/parcels/osaf/pim/calendar/Recurrence.py (7506 =&gt; 7507)&lt;/h4&gt; &lt;pre class="diff"&gt; &lt;span class="info"&gt;--- 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) &lt;/span&gt;&lt;span class="lines"&gt;@@ -198,6 +198,7 @@ &lt;/span&gt;&lt;span class="cx"&gt; value = coerceTimeZone(value, tzinfo) return value &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: more comments &lt;/span&gt;&lt;span class="cx"&gt; kwargs = dict((k, getattr(self, k, None)) for k in self.listNames + self.normalNames) for key in self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -236,8 +237,8 @@ &lt;/span&gt;&lt;span class="cx"&gt; # Day tuples are (dayOrdinal, n-th week of the month), # 0 means all weeks listOfDayTuples=[(day, 0) for day in rrule._byweekday] &lt;/span&gt;&lt;span class="rem"&gt;- if rrule._bynweekday: - listOfDayTuples.extend(tup for tup in rrule._bynweekday) &lt;/span&gt;&lt;span class="add"&gt;+ if rrule._bynweekday is not None: + listOfDayTuples.extend(rrule._bynweekday) &lt;/span&gt;&lt;span class="cx"&gt; if len(listOfDayTuples) &amp;gt; 0: self.byweekday = [] for day, n in listOfDayTuples: &lt;/span&gt;&lt;span class="lines"&gt;@@ -257,10 +258,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; self.until = coerceTimeZone(until, ICUtzinfo.getDefault()) for key in self.listNames: &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: cache getattr(rrule, '_' + key) &lt;/span&gt;&lt;span class="cx"&gt; if getattr(rrule, '_' + key) is not None and \ (key not in self.interpretedNames or \ len(getattr(rrule, '_' + key)) &amp;gt; 1): &lt;/span&gt;&lt;span class="rem"&gt;- # cast tuples to list, or will the repository do this for us? &lt;/span&gt;&lt;span class="add"&gt;+ # cast tuples to list &lt;/span&gt;&lt;span class="cx"&gt; setattr(self, key, list(getattr(rrule, '_' + key))) # bymonthday and bymonth may be set automatically by dateutil, if so, # unset them &lt;/span&gt;&lt;span class="lines"&gt;@@ -274,7 +276,6 @@ &lt;/span&gt;&lt;span class="cx"&gt; del self.bymonth &lt;/span&gt;&lt;span class="rem"&gt;- &lt;/span&gt;&lt;span class="cx"&gt; def onValueChanged(self, name): &amp;quot;&amp;quot;&amp;quot;If the rule changes, update any associated events.&amp;quot;&amp;quot;&amp;quot; if name in self.listNames + self.normalNames + self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -317,9 +318,10 @@ &lt;/span&gt;&lt;span class="cx"&gt; def addRule(self, rule, rruleorexrule='rrule'): &amp;quot;&amp;quot;&amp;quot;Add an rrule or exrule, defaults to rrule.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- rulelist = getattr(self, rruleorexrule + 's', []) - rulelist.append(rule) - setattr(self, rruleorexrule + 's', rulelist) &lt;/span&gt;&lt;span class="add"&gt;+ try: + getattr(self, rruleorexrule + 's').append(rule) + except AttributeError: + setattr(self, rruleorexrule + 's', [rule]) &lt;/span&gt;&lt;span class="cx"&gt; def createDateUtilFromRule(self, dtstart): &amp;quot;&amp;quot;&amp;quot;Return an appropriate dateutil.rrule.rruleset.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="lines"&gt;@@ -377,9 +379,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; rule = list(self.rrules)[0] if rulore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/.cvsignore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/.cvsignore?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.cpp?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.sln?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.vcproj?rev=1.1&amp;content-type=text/vnd.viewcvs-markup Index: internal/launchers/win/winlaunch/.cvsignore diff -u /dev/null internal/launchers/win/winlaunch/.cvsignore:1.3 --- /dev/null Mon Jul 26 11:33:47 2004 +++ internal/launchers/win/winlaunch/.cvsignore Mon Jul 26 11:33:44 2004 @@ -0,0 +1,2 @@ +Debug +Release Index: internal/launchers/win/Makefile diff -u internal/launchers/win/Makefile:1.7 internal/launchers/win/Makefile:1.8 --- internal/launchers/win/Makefile:1.7 Tue Jul 20 15:02:33 2004 +++ internal/launchers/win/Makefile Mon Jul 26 11:33:44 2004 @@ -6,30 +6,30 @@ DLLS=$(DLLS_DIR)/msvcp71d.dll $(DLLS_DIR)/msvcr71d.dll $(DLLS_DIR)/msvcrtd.dll -build: winlaunch2/chandlerDebug.exe winlaunch1/chandler.exe +build: winlaunch/chandlerDebug.exe winlaunch_bin/chandler.exe -winlaunch2/chandlerDebug.exe: winlaunch2/winlaunch2.cpp - devenv.com winlaunch2/winlaunch2.sln /build $(SNAP) - cp winlaunch2/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) - -winlaunch1/chandler.exe: winlaunch1/winlaunch1.cpp - devenv.com winlaunch1/winlaunch1.sln /build $(SNAP) - cp winlaunch1/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin +winlaunch/chandlerDebug.exe: winlaunch/winlaunch.cpp + devenv.com winlaunch/winlaunch.sln /build $(SNAP) + cp winlaunch/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) + +winlaunch_bin/chandler.exe: winlaunch_bin/winlaunch_bin.cpp + devenv.com winlaunch_bin/winlaunch_bin.sln /build $(SNAP) + cp winlaunch_bin/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin cp $(DLLS) $(BUILD_ROOT)/$(SNAP)/bin else DLLS=$(DLLS_DIR)/msvcp71.dll $(DLLS_DIR)/msvcr71.dll -build: winlaunch2/chandler.exe winlaunch1/chandler.exe +build: winlaunch/chandler.exe winlaunch_bin/chandler.exe -winlaunch2/chandler.exe: winlaunch2/winlaunch2.cpp - devenv.com winlaunch2/winlaunch2.sln /build $(SNAP) - cp winlaunch2/$(Snap)/chandler.exe $(BUILD_ROOT) - -winlaunch1/chandler.exe: winlaunch1/winlaunch1.cpp - devenv.com winlaunch1/winlaunch1.sln /build $(SNAP) - cp winlaunch1/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin +winlaunch/chandler.exe: winlaunch/winlaunch.cpp + devenv.com winlaunch/winlaunch.sln /build $(SNAP) + cp winlaunch/$(Snap)/chandler.exe $(BUILD_ROOT) + +winlaunch_bin/chandler.exe: winlaunch_bin/winlaunch_bin.cpp + devenv.com winlaunch_bin/winlaunch_bin.sln /build $(SNAP) + cp winlaunch_bin/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin cp $(DLLS) $(BUILD_ROOT)/$(SNAP)/bin clean: Index: internal/launchers/win/winlaunch/winlaunch.vcproj diff -u /dev/null internal/launchers/win/winlaunch/winlaunch.vcproj:1.8 --- /dev/null Mon Jul 26 11:33:47 2004 +++ internal/launchers/win/winlaunch/winlaunch.vcproj Mon Jul 26 11:33:44 2004 @@ -0,0 +1,134 @@ +&lt;?xml version="1.0" encoding="Windows-1252"?&gt; +&lt;VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="winlaunch" + ProjectGUID="{90AD6487-6195-4CEB-A81F-DD83DDB6B96C}" + Keyword="Win32Proj"&gt; + &lt;Platforms&gt; + &lt;Platform + Name="Win32"/&gt; + &lt;/Platforms&gt; + &lt;Configurations&gt; + &lt;Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="1" + CharacterSet="2"&gt; + &lt;Tool + Name="VCCLCompilerTool" + Optimization="0" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" + MinimalRebuild="TRUE" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="4"/&gt; + &lt;Tool + Name="VCCustomBuildTool"/&gt; + &lt;Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/chandlerDebug.exe" + LinkIncremental="2" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile="$(OutDir)/winlaunch.pdb" + SubSystem="2" + TargetMachine="1"/&gt; + &lt;Tool + Name="VCMIDLTool"/&gt; + &lt;Tool + Name="VCPostBuildEventTool" + CommandLine="copy $(OutDir)\chandlerDebug.exe $(ProjectDir)..\..\..\..\chandler\chandlerDebug.exe"/&gt; + &lt;Tool + Name="VCPreBuildEventTool"/&gt; + &lt;Tool + Name="VCPreLinkEventTool"/&gt; + &lt;Tool + Name="VCResourceCompilerTool"/&gt; + &lt;Tool + Name="VCWebServiceProxyGeneratorTool"/&gt; + &lt;Tool + Name="VCXMLDataGeneratorTool"/&gt; + &lt;Tool + Name="VCWebDeploymentTool"/&gt; + &lt;Tool + Name="VCManagedWrapperGeneratorTool"/&gt; + &lt;Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/&gt; + &lt;/Configuration&gt; + &lt;Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="1" + CharacterSet="2"&gt; + &lt;Tool + Name="VCCLCompilerTool" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" + RuntimeLibrary="0" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="3"/&gt; + &lt;Tool + Name="VCCustomBuildTool"/&gt; + &lt;Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/chandler.exe" + LinkIncremental="1" + GenerateDebugInformation="TRUE" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1"/&gt; + &lt;Tool + Name="VCMIDLTool"/&gt; + &lt;Tool + Name="VCPostBuildEventTool" + CommandLine="copy $(OutDir)\chandler.exe $(ProjectDir)..\..\..\..\chandler\chandler.exe"/&gt; + &lt;Tool + Name="VCPreBuildEventTool"/&gt; + &lt;Tool + Name="VCPreLinkEventTool"/&gt; + &lt;Tool + Name="VCResourceCompilerTool"/&gt; + &lt;Tool + Name="VCWebServiceProxyGeneratorTool"/&gt; + &lt;Tool + Name="VCXMLDataGeneratorTool"/&gt; + &lt;Tool + Name="VCWebDeploymentTool"/&gt; + &lt;Tool + Name="VCManagedWrapperGeneratorTool"/&gt; + &lt;Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/&gt; + &lt;/Configuration&gt; + &lt;/Configurations&gt; + &lt;References&gt; + &lt;/References&gt; + &lt;Files&gt; + &lt;Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"&gt; + &lt;File + RelativePath=".\winlaunch.cpp"&gt; + &lt;/File&gt; + &lt;/Filter&gt; + &lt;Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"&gt; + &lt;/Filter&gt; + &lt;Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"&gt; + &lt;/Filter&gt; + &lt;/Files&gt; + &lt;Globals&gt; + &lt;/Globals&gt; +&lt;/VisualStudioProject&gt; y get added to the sidebar Mon, 03 May, 09:42
m.@osafoundation.org> elf.startTime &lt;/span&gt;&lt;span class="rem"&gt;- # this kludge should be replaced with the new domain attribute aspect -## elif name not in &amp;quot;&amp;quot;&amp;quot;modifications modificationFor occurrences -## occurrenceFor modifies isGenerated recurrenceID -## _ignoreValueChanges modificationRecurrenceID queries -## contentsOwner TPBSelectedItemOwner TPBDetailItemOwner -## itemCollectionInclusions -## &amp;quot;&amp;quot;&amp;quot;.split(): - # this won't work with stamping, temporary solution to allow testing &lt;/span&gt;&lt;span class="add"&gt;+ # 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 &lt;/span&gt;&lt;span class="cx"&gt; elif changeName: if DEBUG: logger.debug(&amp;quot;about to changeThis in onValueChanged(name=%s) for %s&amp;quot;, name, str(self)) &lt;/span&gt;&lt;span class="lines"&gt;@@ -946,54 +947,55 @@ &lt;/span&gt;&lt;span class="cx"&gt; first = self.getFirstInRule() self._deleteGeneratedOccurrences() if first.hasLocalAttributeValue('modifications'): &lt;/span&gt;&lt;span class="add"&gt;+ until = first.rruleset.rrules.first().calculatedUntil() &lt;/span&gt;&lt;span class="cx"&gt; for mod in first.modifications: &lt;/span&gt;&lt;span class="rem"&gt;- 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, '&amp;gt;', until) \ - and mod != first: - mod._ignoreValueChanges = True - mod.delete() &lt;/span&gt;&lt;span class="add"&gt;+ # this won't work for complicated rrulesets + if until != None and datetimeOp(mod.recurrenceID, '&amp;gt;', until): + mod._ignoreValueChanges = True + mod.delete() &lt;/span&gt;&lt;span class="cx"&gt; # create a backup first._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="rem"&gt;- def removeFuture(self): &lt;/span&gt;&lt;span class="add"&gt;+ def deleteFuture(self): &lt;/span&gt;&lt;span class="cx"&gt; &amp;quot;&amp;quot;&amp;quot;Delete self and all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- pass &lt;/span&gt;&lt;span class="add"&gt;+ # 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) &lt;/span&gt;&lt;span class="cx"&gt; &lt;/span&gt;&lt;span class="rem"&gt;- def _deleteThisAndFutureModification(self): - &amp;quot;&amp;quot;&amp;quot;Remove 'thisandfuture' modification and all its occurrences.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="add"&gt;+ def deleteThis(self): + &amp;quot;&amp;quot;&amp;quot;Exclude this occurrence from the recurrence rule.&amp;quot;&amp;quot;&amp;quot; + if not getattr(self.rruleset, 'exdates', None): + self.rruleset.exdates=[] + self.rruleset.exdates.append(self.recurrenceID) + del self + + def deleteAll(self): + &amp;quot;&amp;quot;&amp;quot;Delete master, all its modifications, occurrences, and rules.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="cx"&gt; for event in self.occurrences: if event == self: #don't delete self quite yet continue event._ignoreValueChanges = True event.delete(recursive=True) &lt;/span&gt;&lt;span class="rem"&gt;- self.rruleset._ignoreValueChanges = True - self.rruleset.delete(recursive=True) &lt;/span&gt;&lt;span class="add"&gt;+ 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) &lt;/span&gt;&lt;span class="cx"&gt; self._ignoreValueChanges = True self.delete(recursive=True) def cleanFuture(self): &amp;quot;&amp;quot;&amp;quot;Delete all future occurrences and modifications.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- - def deleteLater(item): - if datetimeOp(item.startTime, '&amp;gt;', self.startTime): - item._ignoreValueChanges = True - item.delete() - &lt;/span&gt;&lt;span class="cx"&gt; master = self.getMaster() &lt;/span&gt;&lt;span class="rem"&gt;- for mod in master.modifications or []: - if mod.modifies == 'thisandfuture': - if datetimeOp(mod.startTime, '&amp;gt;', self.startTime): - mod._deleteThisAndFutureModification() - else: - for event in mod.occurrences or []: - deleteLater(event) &lt;/span&gt;&lt;span class="cx"&gt; for event in master.occurrences: &lt;/span&gt;&lt;span class="rem"&gt;- deleteLater(event) &lt;/span&gt;&lt;span class="add"&gt;+ if datetimeOp(event.startTime, '&amp;gt;', self.startTime): + event._ignoreValueChanges = True + event.delete() &lt;/span&gt;&lt;span class="cx"&gt; self._getFirstGeneratedOccurrence(True) &lt;/span&gt;&lt;span class="lines"&gt;@@ -1011,13 +1013,15 @@ &lt;/span&gt;&lt;span class="cx"&gt; # A THIS modification to master, make it the new master self.moveCollections(master, event) del event.rruleset &lt;/span&gt;&lt;span class="rem"&gt;- event.recurrenceID = event.startTime &lt;/span&gt;&lt;span class="add"&gt;+ del event.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; event.modificationFor = None event.occurrenceFor = event masterHadModification = True if masterHadModification: master.delete() &lt;/span&gt;&lt;span class="add"&gt;+ else: + del master.recurrenceID &lt;/span&gt;&lt;span class="cx"&gt; def isCustomRule(self): &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt; &lt;a id="trunkchandlerparcelsosafpimcalendarRecurrencepy"&gt;&lt;/a&gt; &lt;div class="modfile"&gt;&lt;h4&gt;Modified: trunk/chandler/parcels/osaf/pim/calendar/Recurrence.py (7506 =&gt; 7507)&lt;/h4&gt; &lt;pre class="diff"&gt; &lt;span class="info"&gt;--- 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) &lt;/span&gt;&lt;span class="lines"&gt;@@ -198,6 +198,7 @@ &lt;/span&gt;&lt;span class="cx"&gt; value = coerceTimeZone(value, tzinfo) return value &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: more comments &lt;/span&gt;&lt;span class="cx"&gt; kwargs = dict((k, getattr(self, k, None)) for k in self.listNames + self.normalNames) for key in self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -236,8 +237,8 @@ &lt;/span&gt;&lt;span class="cx"&gt; # Day tuples are (dayOrdinal, n-th week of the month), # 0 means all weeks listOfDayTuples=[(day, 0) for day in rrule._byweekday] &lt;/span&gt;&lt;span class="rem"&gt;- if rrule._bynweekday: - listOfDayTuples.extend(tup for tup in rrule._bynweekday) &lt;/span&gt;&lt;span class="add"&gt;+ if rrule._bynweekday is not None: + listOfDayTuples.extend(rrule._bynweekday) &lt;/span&gt;&lt;span class="cx"&gt; if len(listOfDayTuples) &amp;gt; 0: self.byweekday = [] for day, n in listOfDayTuples: &lt;/span&gt;&lt;span class="lines"&gt;@@ -257,10 +258,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; self.until = coerceTimeZone(until, ICUtzinfo.getDefault()) for key in self.listNames: &lt;/span&gt;&lt;span class="add"&gt;+ # TODO: cache getattr(rrule, '_' + key) &lt;/span&gt;&lt;span class="cx"&gt; if getattr(rrule, '_' + key) is not None and \ (key not in self.interpretedNames or \ len(getattr(rrule, '_' + key)) &amp;gt; 1): &lt;/span&gt;&lt;span class="rem"&gt;- # cast tuples to list, or will the repository do this for us? &lt;/span&gt;&lt;span class="add"&gt;+ # cast tuples to list &lt;/span&gt;&lt;span class="cx"&gt; setattr(self, key, list(getattr(rrule, '_' + key))) # bymonthday and bymonth may be set automatically by dateutil, if so, # unset them &lt;/span&gt;&lt;span class="lines"&gt;@@ -274,7 +276,6 @@ &lt;/span&gt;&lt;span class="cx"&gt; del self.bymonth &lt;/span&gt;&lt;span class="rem"&gt;- &lt;/span&gt;&lt;span class="cx"&gt; def onValueChanged(self, name): &amp;quot;&amp;quot;&amp;quot;If the rule changes, update any associated events.&amp;quot;&amp;quot;&amp;quot; if name in self.listNames + self.normalNames + self.specialNames: &lt;/span&gt;&lt;span class="lines"&gt;@@ -317,9 +318,10 @@ &lt;/span&gt;&lt;span class="cx"&gt; def addRule(self, rule, rruleorexrule='rrule'): &amp;quot;&amp;quot;&amp;quot;Add an rrule or exrule, defaults to rrule.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="rem"&gt;- rulelist = getattr(self, rruleorexrule + 's', []) - rulelist.append(rule) - setattr(self, rruleorexrule + 's', rulelist) &lt;/span&gt;&lt;span class="add"&gt;+ try: + getattr(self, rruleorexrule + 's').append(rule) + except AttributeError: + setattr(self, rruleorexrule + 's', [rule]) &lt;/span&gt;&lt;span class="cx"&gt; def createDateUtilFromRule(self, dtstart): &amp;quot;&amp;quot;&amp;quot;Return an appropriate dateutil.rrule.rruleset.&amp;quot;&amp;quot;&amp;quot; &lt;/span&gt;&lt;span class="lines"&gt;@@ -377,9 +379,11 @@ &lt;/span&gt;&lt;span class="cx"&gt; rule = list(self.rrules)[0] if rulore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch1/winlaunch1.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/.cvsignore.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.cpp.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.sln.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch2/winlaunch2.vcproj.diff?r1=text&amp;tr1=1.1&amp;r2=text&amp;tr2=None http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/.cvsignore?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.cpp?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.sln?rev=1.1&amp;content-type=text/vnd.viewcvs-markup http://cvs.osafoundation.org/index.cgi/internal/launchers/win/winlaunch_bin/winlaunch_bin.vcproj?rev=1.1&amp;content-type=text/vnd.viewcvs-markup Index: internal/launchers/win/winlaunch/.cvsignore diff -u /dev/null internal/launchers/win/winlaunch/.cvsignore:1.3 --- /dev/null Mon Jul 26 11:33:47 2004 +++ internal/launchers/win/winlaunch/.cvsignore Mon Jul 26 11:33:44 2004 @@ -0,0 +1,2 @@ +Debug +Release Index: internal/launchers/win/Makefile diff -u internal/launchers/win/Makefile:1.7 internal/launchers/win/Makefile:1.8 --- internal/launchers/win/Makefile:1.7 Tue Jul 20 15:02:33 2004 +++ internal/launchers/win/Makefile Mon Jul 26 11:33:44 2004 @@ -6,30 +6,30 @@ DLLS=$(DLLS_DIR)/msvcp71d.dll $(DLLS_DIR)/msvcr71d.dll $(DLLS_DIR)/msvcrtd.dll -build: winlaunch2/chandlerDebug.exe winlaunch1/chandler.exe +build: winlaunch/chandlerDebug.exe winlaunch_bin/chandler.exe -winlaunch2/chandlerDebug.exe: winlaunch2/winlaunch2.cpp - devenv.com winlaunch2/winlaunch2.sln /build $(SNAP) - cp winlaunch2/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) - -winlaunch1/chandler.exe: winlaunch1/winlaunch1.cpp - devenv.com winlaunch1/winlaunch1.sln /build $(SNAP) - cp winlaunch1/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin +winlaunch/chandlerDebug.exe: winlaunch/winlaunch.cpp + devenv.com winlaunch/winlaunch.sln /build $(SNAP) + cp winlaunch/$(Snap)/chandlerDebug.exe $(BUILD_ROOT) + +winlaunch_bin/chandler.exe: winlaunch_bin/winlaunch_bin.cpp + devenv.com winlaunch_bin/winlaunch_bin.sln /build $(SNAP) + cp winlaunch_bin/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin cp $(DLLS) $(BUILD_ROOT)/$(SNAP)/bin else DLLS=$(DLLS_DIR)/msvcp71.dll $(DLLS_DIR)/msvcr71.dll -build: winlaunch2/chandler.exe winlaunch1/chandler.exe +build: winlaunch/chandler.exe winlaunch_bin/chandler.exe -winlaunch2/chandler.exe: winlaunch2/winlaunch2.cpp - devenv.com winlaunch2/winlaunch2.sln /build $(SNAP) - cp winlaunch2/$(Snap)/chandler.exe $(BUILD_ROOT) - -winlaunch1/chandler.exe: winlaunch1/winlaunch1.cpp - devenv.com winlaunch1/winlaunch1.sln /build $(SNAP) - cp winlaunch1/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin +winlaunch/chandler.exe: winlaunch/winlaunch.cpp + devenv.com winlaunch/winlaunch.sln /build $(SNAP) + cp winlaunch/$(Snap)/chandler.exe $(BUILD_ROOT) + +winlaunch_bin/chandler.exe: winlaunch_bin/winlaunch_bin.cpp + devenv.com winlaunch_bin/winlaunch_bin.sln /build $(SNAP) + cp winlaunch_bin/$(Snap)/chandler.exe $(BUILD_ROOT)/$(SNAP)/bin cp $(DLLS) $(BUILD_ROOT)/$(SNAP)/bin clean: Index: internal/launchers/win/winlaunch/winlaunch.vcproj diff -u /dev/null internal/launchers/win/winlaunch/winlaunch.vcproj:1.8 --- /dev/null Mon Jul 26 11:33:47 2004 +++ internal/launchers/win/winlaunch/winlaunch.vcproj Mon Jul 26 11:33:44 2004 @@ -0,0 +1,134 @@ +&lt;?xml version="1.0" encoding="Windows-1252"?&gt; +&lt;VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="winlaunch" + ProjectGUID="{90AD6487-6195-4CEB-A81F-DD83DDB6B96C}" + Keyword="Win32Proj"&gt; + &lt;Platforms&gt; + &lt;Platform + Name="Win32"/&gt; + &lt;/Platforms&gt; + &lt;Configurations&gt; + &lt;Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="1" + CharacterSet="2"&gt; + &lt;Tool + Name="VCCLCompilerTool" + Optimization="0" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" + MinimalRebuild="TRUE" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="4"/&gt; + &lt;Tool + Name="VCCustomBuildTool"/&gt; + &lt;Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/chandlerDebug.exe" + LinkIncremental="2" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile="$(OutDir)/winlaunch.pdb" + SubSystem="2" + TargetMachine="1"/&gt; + &lt;Tool + Name="VCMIDLTool"/&gt; + &lt;Tool + Name="VCPostBuildEventTool" + CommandLine="copy $(OutDir)\chandlerDebug.exe $(ProjectDir)..\..\..\..\chandler\chandlerDebug.exe"/&gt; + &lt;Tool + Name="VCPreBuildEventTool"/&gt; + &lt;Tool + Name="VCPreLinkEventTool"/&gt; + &lt;Tool + Name="VCResourceCompilerTool"/&gt; + &lt;Tool + Name="VCWebServiceProxyGeneratorTool"/&gt; + &lt;Tool + Name="VCXMLDataGeneratorTool"/&gt; + &lt;Tool + Name="VCWebDeploymentTool"/&gt; + &lt;Tool + Name="VCManagedWrapperGeneratorTool"/&gt; + &lt;Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/&gt; + &lt;/Configuration&gt; + &lt;Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="1" + CharacterSet="2"&gt; + &lt;Tool + Name="VCCLCompilerTool" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" + RuntimeLibrary="0" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="3"/&gt; + &lt;Tool + Name="VCCustomBuildTool"/&gt; + &lt;Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/chandler.exe" + LinkIncremental="1" + GenerateDebugInformation="TRUE" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1"/&gt; + &lt;Tool + Name="VCMIDLTool"/&gt; + &lt;Tool + Name="VCPostBuildEventTool" + CommandLine="copy $(OutDir)\chandler.exe $(ProjectDir)..\..\..\..\chandler\chandler.exe"/&gt; + &lt;Tool + Name="VCPreBuildEventTool"/&gt; + &lt;Tool + Name="VCPreLinkEventTool"/&gt; + &lt;Tool + Name="VCResourceCompilerTool"/&gt; + &lt;Tool + Name="VCWebServiceProxyGeneratorTool"/&gt; + &lt;Tool + Name="VCXMLDataGeneratorTool"/&gt; + &lt;Tool + Name="VCWebDeploymentTool"/&gt; + &lt;Tool + Name="VCManagedWrapperGeneratorTool"/&gt; + &lt;Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/&gt; + &lt;/Configuration&gt; + &lt;/Configurations&gt; + &lt;References&gt; + &lt;/References&gt; + &lt;Files&gt; + &lt;Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"&gt; + &lt;File + RelativePath=".\winlaunch.cpp"&gt; + &lt;/File&gt; + &lt;/Filter&gt; + &lt;Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"&gt; + &lt;/Filter&gt; + &lt;Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"&gt; + &lt;/Filter&gt; + &lt;/Files&gt; + &lt;Globals&gt; + &lt;/Globals&gt; +&lt;/VisualStudioProject&gt; y get added to the sidebar Mon, 03 May, 09:42
m.@osafoundation.org> [No Subject] Mon, 03 May, 09:42
m.@osafoundation.org> [No Subject] Mon, 03 May, 09:42
m.@osafoundation.org> [No Subject] Mon, 03 May, 09:42
m.@osafoundation.org> [No Subject] Mon, 03 May, 09:42
m.@osafoundation.org> [No Subject] Mon, 03 May, 09:42
m.@osafoundation.org>