From 4cce8d6f2f4aa02cf7eedbe1857f1edcf06e3389 Mon Sep 17 00:00:00 2001 From: "vladimir%pobox.com" Date: Fri, 15 Apr 2005 18:51:47 +0000 Subject: [PATCH] remove itemFilter from calICalendar's addObserver method git-svn-id: svn://10.0.0.236/trunk@172301 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/calendar/base/public/calICalendar.idl | 2 +- mozilla/calendar/base/public/calIItemBase.idl | 5 ++ mozilla/calendar/base/src/calDateTime.cpp | 68 +++++++++++++++++-- mozilla/calendar/base/src/calEvent.js | 18 +++++ mozilla/calendar/base/src/calItemBase.js | 3 + .../providers/caldav/calDavCalendar.js | 39 +++++------ .../composite/calCompositeCalendar.js | 4 +- .../calendar/providers/ics/calICSCalendar.js | 25 +++---- .../providers/memory/calMemoryCalendar.js | 38 +++++------ .../providers/storage/calStorageCalendar.js | 39 +++++------ .../calendar/resources/content/unifinder.js | 2 +- .../resources/content/unifinderToDo.js | 2 +- 12 files changed, 157 insertions(+), 88 deletions(-) diff --git a/mozilla/calendar/base/public/calICalendar.idl b/mozilla/calendar/base/public/calICalendar.idl index c7897875e45..3dcc8947938 100644 --- a/mozilla/calendar/base/public/calICalendar.idl +++ b/mozilla/calendar/base/public/calICalendar.idl @@ -103,7 +103,7 @@ interface calICalendar : nsISupports */ const unsigned long ITEM_FILTER_CLASS_OCCURRENCES = 1 << 5; - void addObserver( in calIObserver observer, in unsigned long aItemFilter ); + void addObserver( in calIObserver observer ); void removeObserver( in calIObserver observer ); /** diff --git a/mozilla/calendar/base/public/calIItemBase.idl b/mozilla/calendar/base/public/calIItemBase.idl index eebffc547d2..9df8dc0c77b 100644 --- a/mozilla/calendar/base/public/calIItemBase.idl +++ b/mozilla/calendar/base/public/calIItemBase.idl @@ -172,6 +172,11 @@ interface calIItemBase : nsISupports void removeAttendee(in calIAttendee attendee); void addAttendee(in calIAttendee attendee); void removeAllAttendees(); + + // return a list of occurrences of this item between the given dates + void getOccurrencesBetween (in calIDateTime aStartDate, in calIDateTime aEndDate, + out PRUint32 aCount, + [array,size_is(aCount),retval] out calIItemOccurrence aOccurrences); }; // diff --git a/mozilla/calendar/base/src/calDateTime.cpp b/mozilla/calendar/base/src/calDateTime.cpp index 2ab021cfd3f..c097a25c501 100644 --- a/mozilla/calendar/base/src/calDateTime.cpp +++ b/mozilla/calendar/base/src/calDateTime.cpp @@ -292,37 +292,93 @@ calDateTime::GetInTimezone(const char *aTimezone, calIDateTime **aResult) NS_IMETHODIMP calDateTime::GetStartOfWeek(calIDateTime **aResult) { - return NS_ERROR_NOT_IMPLEMENTED; + struct icaltimetype icalt; + ToIcalTime(&icalt); + int day_of_week = icaltime_day_of_week(icalt); + if (day_of_week > 1) + icaltime_adjust(&icalt, - (day_of_week - 1), 0, 0, 0); + icalt.hour = 0; + icalt.minute = 0; + icalt.second = 0; + + calDateTime *cdt = new calDateTime(&icalt); + NS_ADDREF(*aResult = cdt); + return NS_OK; } NS_IMETHODIMP calDateTime::GetEndOfWeek(calIDateTime **aResult) { - return NS_ERROR_NOT_IMPLEMENTED; + struct icaltimetype icalt; + ToIcalTime(&icalt); + int day_of_week = icaltime_day_of_week(icalt); + if (day_of_week < 7) + icaltime_adjust(&icalt, 7 - day_of_week, 0, 0, 0); + icalt.hour = 23; + icalt.minute = 59; + icalt.second = 59; + + calDateTime *cdt = new calDateTime(&icalt); + NS_ADDREF(*aResult = cdt); + return NS_OK; } NS_IMETHODIMP calDateTime::GetStartOfMonth(calIDateTime **aResult) { - return NS_ERROR_NOT_IMPLEMENTED; + struct icaltimetype icalt; + ToIcalTime(&icalt); + icalt.day = 1; + icalt.hour = 0; + icalt.minute = 0; + icalt.second = 0; + calDateTime *cdt = new calDateTime(&icalt); + NS_ADDREF(*aResult = cdt); + return NS_OK; } NS_IMETHODIMP calDateTime::GetEndOfMonth(calIDateTime **aResult) { - return NS_ERROR_NOT_IMPLEMENTED; + struct icaltimetype icalt; + ToIcalTime(&icalt); + icalt.day = icaltime_days_in_month(icalt.month, icalt.year); + icalt.hour = 23; + icalt.minute = 59; + icalt.second = 59; + calDateTime *cdt = new calDateTime(&icalt); + NS_ADDREF(*aResult = cdt); + return NS_OK; } NS_IMETHODIMP calDateTime::GetStartOfYear(calIDateTime **aResult) { - return NS_ERROR_NOT_IMPLEMENTED; + struct icaltimetype icalt; + ToIcalTime(&icalt); + icalt.month = 1; + icalt.day = 1; + icalt.hour = 0; + icalt.minute = 0; + icalt.second = 0; + calDateTime *cdt = new calDateTime(&icalt); + NS_ADDREF(*aResult = cdt); + return NS_OK; } NS_IMETHODIMP calDateTime::GetEndOfYear(calIDateTime **aResult) { - return NS_ERROR_NOT_IMPLEMENTED; + struct icaltimetype icalt; + ToIcalTime(&icalt); + icalt.month = 12; + icalt.day = 31; + icalt.hour = 23; + icalt.minute = 59; + icalt.second = 59; + calDateTime *cdt = new calDateTime(&icalt); + NS_ADDREF(*aResult = cdt); + return NS_OK; } NS_IMETHODIMP diff --git a/mozilla/calendar/base/src/calEvent.js b/mozilla/calendar/base/src/calEvent.js index cf28f343889..a44d661df49 100644 --- a/mozilla/calendar/base/src/calEvent.js +++ b/mozilla/calendar/base/src/calEvent.js @@ -159,6 +159,24 @@ calEvent.prototype = { this.importUnpromotedProperties(event, promotedProps); // Importing didn't really change anything this.mDirty = false; + }, + + getOccurrencesBetween: function(aStartDate, aEndDate, aCount) { + if (this.recurrenceInfo) { + return this.recurrenceInfo.getOccurrences(aStartDate, aEndDate, 0, aCount); + } + + if (aStartDate.compare(this.startDate) >= 0 && + aEndDate.compare(this.endDate) <= 0) + { + var occ = Components.classes["@mozilla.org/calendar/item-occurrence;1"].createInstance(Components.interfaces.calIOccurence); + occ.initialize(this, this.startDate, this.endDate); + aCount.value = 1; + return ([ occ ]); + } + + aCount.value = 0; + return null; } }; diff --git a/mozilla/calendar/base/src/calItemBase.js b/mozilla/calendar/base/src/calItemBase.js index 3068eded245..d9cd29e66d6 100644 --- a/mozilla/calendar/base/src/calItemBase.js +++ b/mozilla/calendar/base/src/calItemBase.js @@ -390,6 +390,9 @@ calItemBase.prototype = { }, + getOccurrencesBetween: function(aStartDate, aEndDate, aCount) { + throw Components.results.NS_ERROR_NOT_IMPLEMENTED; + } }; function calItemOccurrence () { diff --git a/mozilla/calendar/providers/caldav/calDavCalendar.js b/mozilla/calendar/providers/caldav/calDavCalendar.js index 403a54e7ff0..8428f1a9875 100644 --- a/mozilla/calendar/providers/caldav/calDavCalendar.js +++ b/mozilla/calendar/providers/caldav/calDavCalendar.js @@ -118,25 +118,22 @@ calDavCalendar.prototype = { get suppressAlarms() { return false; }, set suppressAlarms(aSuppressAlarms) { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; }, - // void addObserver( in calIObserver observer, in unsigned long aItemFilter ); + // void addObserver( in calIObserver observer ); addObserver: function (aObserver, aItemFilter) { - for (var i = 0; i < this.mObservers.length; i++) { - if (this.mObservers[i].observer == aObserver && - this.mObservers[i].filter == aItemFilter) - { + for each (obs in this.mObservers) { + if (obs == aObserver) return; - } - } + } - this.mObservers.push( {observer: aObserver, filter: aItemFilter} ); + this.mObservers.push(aObserver); }, // void removeObserver( in calIObserver observer ); removeObserver: function (aObserver) { var newObservers = Array(); - for (var i = 0; i < this.mObservers.length; i++) { - if (this.mObservers[i].observer != aObserver) - newObservers.push(this.mObservers[i]); + for each (obs in this.mObservers) { + if (obs != aObserver) + newObservers.push(obs); } this.mObservers = newObservers; }, @@ -617,28 +614,28 @@ calDavCalendar.prototype = { // Helper functions // observeBatchChange: function (aNewBatchMode) { - for (var i = 0; i < this.mObservers.length; i++) { + for each (obs in this.mObservers) { if (aNewBatchMode) - this.mObservers[i].observer.onStartBatch (); + obs.onStartBatch (); else - this.mObservers[i].observer.onEndBatch (); + obs.onEndBatch (); } }, observeAddItem: function (aItem) { - for (var i = 0; i < this.mObservers.length; i++) - this.mObservers[i].observer.onAddItem (aItem); + for each (obs in this.mObservers) + obs.onAddItem (aItem); }, observeModifyItem: function (aOldItem, aNewItem) { - for (var i = 0; i < this.mObservers.length; i++) - this.mObservers[i].observer.onModifyItem (aOldItem, aNewItem); + for each (obs in this.mObservers) + obs.onModifyItem (aOldItem, aNewItem); }, observeDeleteItem: function (aDeletedItem) { - for (var i = 0; i < this.mObservers.length; i++) - this.mObservers[i].observer.onDeleteItem (aDeletedItem); - } + for each (obs in this.mObservers) + obs.onDeleteItem (aDeletedItem); + }, }; diff --git a/mozilla/calendar/providers/composite/calCompositeCalendar.js b/mozilla/calendar/providers/composite/calCompositeCalendar.js index 1c35980a349..d14be145afe 100644 --- a/mozilla/calendar/providers/composite/calCompositeCalendar.js +++ b/mozilla/calendar/providers/composite/calCompositeCalendar.js @@ -151,7 +151,7 @@ calCompositeCalendar.prototype = { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; }, - // void addObserver( in calIObserver observer, in unsigned long aItemFilter ); + // void addObserver( in calIObserver observer ); mCompositeObservers: Array(), addObserver: function (aObserver, aItemFilter) { const calICompositeObserver = Components.interfaces.calICompositeObserver; @@ -165,7 +165,7 @@ calCompositeCalendar.prototype = { } for each (cal in this.mCalendars) { - cal.addObserver(aObserver, aItemFilter); + cal.addObserver(aObserver); } }, diff --git a/mozilla/calendar/providers/ics/calICSCalendar.js b/mozilla/calendar/providers/ics/calICSCalendar.js index d59cd11728f..78530b4fa41 100644 --- a/mozilla/calendar/providers/ics/calICSCalendar.js +++ b/mozilla/calendar/providers/ics/calICSCalendar.js @@ -81,7 +81,7 @@ calICSCalendar.prototype = { .getService(Components.interfaces.calIICSService); this.mObserver = new calICSObserver(this); - this.mMemoryCalendar.addObserver(this.mObserver, calICalendar.ITEM_FILTER_TYPE_ALL); + this.mMemoryCalendar.addObserver(this.mObserver); }, name: "", @@ -125,7 +125,7 @@ calICSCalendar.prototype = { this.mMemoryCalendar = Components.classes["@mozilla.org/calendar/calendar;1?type=memory"] .createInstance(Components.interfaces.calICalendar); // And don't forget to add our observer - this.mMemoryCalendar.addObserver(this.mObserver, calICalendar.ITEM_FILTER_TYPE_ALL); + this.mMemoryCalendar.addObserver(this.mObserver); this.mObserver.onStartBatch(); @@ -272,8 +272,8 @@ calICSCalendar.prototype = { ctxt.processQueue(); }, - addObserver: function (aObserver, aItemFilter) { - this.mObserver.addObserver(aObserver, aItemFilter); + addObserver: function (aObserver) { + this.mObserver.addObserver(aObserver); }, removeObserver: function (aObserver) { this.mObserver.removeObserver(aObserver); @@ -405,23 +405,20 @@ calICSObserver.prototype = { // This observer functions as proxy for all the other observers // So need addObserver and removeObserver here - addObserver: function (aObserver, aItemFilter) { - for (var i = 0; i < this.mObservers.length; i++) { - if (this.mObservers[i].observer == aObserver && - this.mObservers[i].filter == aItemFilter) - { + addObserver: function (aObserver) { + for each (obs in this.mObservers) { + if (obs == aObserver) return; - } } - this.mObservers.push( {observer: aObserver, filter: aItemFilter} ); + this.mObservers.push(aObserver); }, removeObserver: function (aObserver) { var newObservers = Array(); - for (var i = 0; i < this.mObservers.length; i++) { - if (this.mObservers[i].observer != aObserver) - newObservers.push(this.mObservers[i]); + for each (obs in this.mObservers) { + if (obs != aObserver) + newObservers.push(obs); } this.mObservers = newObservers; } diff --git a/mozilla/calendar/providers/memory/calMemoryCalendar.js b/mozilla/calendar/providers/memory/calMemoryCalendar.js index e4653956f45..f78656bcc23 100644 --- a/mozilla/calendar/providers/memory/calMemoryCalendar.js +++ b/mozilla/calendar/providers/memory/calMemoryCalendar.js @@ -97,25 +97,22 @@ calMemoryCalendar.prototype = { get suppressAlarms() { return false; }, set suppressAlarms(aSuppressAlarms) { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; }, - // void addObserver( in calIObserver observer, in unsigned long aItemFilter ); + // void addObserver( in calIObserver observer ); addObserver: function (aObserver, aItemFilter) { - for (var i = 0; i < this.mObservers.length; i++) { - if (this.mObservers[i].observer == aObserver && - this.mObservers[i].filter == aItemFilter) - { + for each (obs in this.mObservers) { + if (obs == aObserver) return; - } } - this.mObservers.push( {observer: aObserver, filter: aItemFilter} ); + this.mObservers.push(aObserver); }, // void removeObserver( in calIObserver observer ); removeObserver: function (aObserver) { var newObservers = Array(); - for (var i = 0; i < this.mObservers.length; i++) { - if (this.mObservers[i].observer != aObserver) - newObservers.push(this.mObservers[i]); + for each (obs in this.mObservers) { + if (obs != aObserver) + newObservers.push(obs); } this.mObservers = newObservers; }, @@ -417,29 +414,28 @@ calMemoryCalendar.prototype = { // Helper functions // observeBatchChange: function (aNewBatchMode) { - for (var i = 0; i < this.mObservers.length; i++) { + for each (obs in this.mObservers) { if (aNewBatchMode) - this.mObservers[i].observer.onStartBatch (); + obs.onStartBatch (); else - this.mObservers[i].observer.onEndBatch (); + obs.onEndBatch (); } }, observeAddItem: function (aItem) { - for (var i = 0; i < this.mObservers.length; i++) { - this.mObservers[i].observer.onAddItem (aItem); - } + for each (obs in this.mObservers) + obs.onAddItem (aItem); }, observeModifyItem: function (aOldItem, aNewItem) { - for (var i = 0; i < this.mObservers.length; i++) - this.mObservers[i].observer.onModifyItem (aOldItem, aNewItem); + for each (obs in this.mObservers) + obs.onModifyItem (aOldItem, aNewItem); }, observeDeleteItem: function (aDeletedItem) { - for (var i = 0; i < this.mObservers.length; i++) - this.mObservers[i].observer.onDeleteItem (aDeletedItem); - } + for each (obs in this.mObservers) + obs.onDeleteItem (aDeletedItem); + }, } /**** diff --git a/mozilla/calendar/providers/storage/calStorageCalendar.js b/mozilla/calendar/providers/storage/calStorageCalendar.js index 1abf6327026..e1ac42228ac 100644 --- a/mozilla/calendar/providers/storage/calStorageCalendar.js +++ b/mozilla/calendar/providers/storage/calStorageCalendar.js @@ -270,25 +270,22 @@ calStorageCalendar.prototype = { get suppressAlarms() { return false; }, set suppressAlarms(aSuppressAlarms) { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; }, - // void addObserver( in calIObserver observer, in unsigned long aItemFilter ); + // void addObserver( in calIObserver observer ); addObserver: function (aObserver, aItemFilter) { - for (var i = 0; i < this.mObservers.length; i++) { - if (this.mObservers[i].observer == aObserver && - this.mObservers[i].filter == aItemFilter) - { + for each (obs in this.mObservers) { + if (obs == aObserver) return; - } } - this.mObservers.push( {observer: aObserver, filter: aItemFilter} ); + this.mObservers.push(aObserver); }, // void removeObserver( in calIObserver observer ); removeObserver: function (aObserver) { var newObservers = Array(); - for (var i = 0; i < this.mObservers.length; i++) { - if (this.mObservers[i].observer != aObserver) - newObservers.push(this.mObservers[i]); + for each (obs in this.mObservers) { + if (obs != aObserver) + newObservers.push(obs); } this.mObservers = newObservers; }, @@ -563,32 +560,32 @@ calStorageCalendar.prototype = { // Helper functions // observeLoad: function () { - for (var i = 0; i < this.mObservers.length; i++) - this.mObservers[i].observer.onLoad (); + for each (obs in this.mObservers) + obs.onLoad (); }, observeBatchChange: function (aNewBatchMode) { - for (var i = 0; i < this.mObservers.length; i++) { + for each (obs in this.mObservers) { if (aNewBatchMode) - this.mObservers[i].observer.onStartBatch (); + obs.onStartBatch (); else - this.mObservers[i].observer.onEndBatch (); + obs.onEndBatch (); } }, observeAddItem: function (aItem) { - for (var i = 0; i < this.mObservers.length; i++) - this.mObservers[i].observer.onAddItem (aItem); + for each (obs in this.mObservers) + obs.onAddItem (aItem); }, observeModifyItem: function (aOldItem, aNewItem) { - for (var i = 0; i < this.mObservers.length; i++) - this.mObservers[i].observer.onModifyItem (aOldItem, aNewItem); + for each (obs in this.mObservers) + obs.onModifyItem (aOldItem, aNewItem); }, observeDeleteItem: function (aDeletedItem) { - for (var i = 0; i < this.mObservers.length; i++) - this.mObservers[i].observer.onDeleteItem (aDeletedItem); + for each (obs in this.mObservers) + obs.onDeleteItem (aDeletedItem); }, // diff --git a/mozilla/calendar/resources/content/unifinder.js b/mozilla/calendar/resources/content/unifinder.js index 3eb47098a19..1e784db22b4 100644 --- a/mozilla/calendar/resources/content/unifinder.js +++ b/mozilla/calendar/resources/content/unifinder.js @@ -195,7 +195,7 @@ function prepareCalendarUnifinder( ) // set up our calendar event observer var ccalendar = getDisplayComposite(); - ccalendar.addObserver(unifinderObserver, ccalendar.ITEM_FILTER_TYPE_EVENT); + ccalendar.addObserver(unifinderObserver); refreshEventTree(); //Display something upon first load. onLoad doesn't work properly for observers } diff --git a/mozilla/calendar/resources/content/unifinderToDo.js b/mozilla/calendar/resources/content/unifinderToDo.js index 59cfacd6e77..032d8bf5673 100644 --- a/mozilla/calendar/resources/content/unifinderToDo.js +++ b/mozilla/calendar/resources/content/unifinderToDo.js @@ -95,7 +95,7 @@ var unifinderToDoDataSourceObserver = function prepareCalendarToDoUnifinder() { var ccalendar = getDisplayComposite(); - ccalendar.addObserver(unifinderToDoDataSourceObserver, ccalendar.ITEM_FILTER_TYPE_TODO); + ccalendar.addObserver(unifinderToDoDataSourceObserver); toDoUnifinderRefresh(); }