/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "calICalendar.idl" interface calIGenericOperationListener; interface calIOperation; /** * Interface for managing offline flags in offline storage * (calStorageCalendar), in particular from calICachedCalendar. */ [scriptable, uuid(36dc2c93-5851-40d2-9ba9-b1f6e682c75c)] interface calIOfflineStorage : calICalendar { /** * Mark the item of which the id is passed as parameter as new. * * @param aItem the item to add * * @return {Promise} */ Promise addOfflineItem(in calIItemBase aItem); /** * Mark the item of which the id is passed as parameter as modified. * * @param aItem the item to modify * * @return {Promise} */ Promise modifyOfflineItem(in calIItemBase aItem); /** * Mark the item of which the id is passed as parameter as deleted. * * @param aItem the item to delete * @return {Promise} */ Promise deleteOfflineItem(in calIItemBase aItem); /** * Retrieves the offline flag for the given item. * * @param aItem the item to reset * @return {Promise} */ Promise getItemOfflineFlag(in calIItemBase aItem); /** * Remove any offline flag from the item record. * * @param aItem the item to reset * @return {Promise} */ Promise resetItemOfflineFlag(in calIItemBase aItem); }; /** * Interface for synchronously working providers on storing items, * e.g. storage, memory. All modifying commands return after the * modification has been performed. * * @note * This interface is used in conjunction with changelog-based synchronization * and additionally offers storing meta-data for items for this purpose. * The meta data is stored as long as the corresponding items persist in * the calendar and automatically cleanup up once the item is deleted from * the calendar, but is not altered when an item is modified (modifyItem). * Meta data can be fetched/stored per (master) item, i.e. if you need to * store meta data for individual overridden items, you need to store it * along with the master item's meta data. * Finally, keep in mind that the meta data is "calendar local" and not * automatically transferred when storing the item on another calISyncWriteCalendar. */ [scriptable, uuid(651e137b-2f3a-4595-af89-da51b6a37f85)] interface calISyncWriteCalendar : calICalendar { /** * Adds or replaces meta data of an item. * * @param id an item id * @param value an arbitrary string */ void setMetaData(in AUTF8String id, in AUTF8String value); /** * Deletes meta data of an item. * * @param id an item id */ void deleteMetaData(in AUTF8String id); /** * Gets meta data of an item or null if there's none or the item id is invalid. * * @param id an item id */ AUTF8String getMetaData(in AUTF8String id); /** * Gets all meta data IDs. */ Array getAllMetaDataIds(); /** * Gets all meta data values. */ Array getAllMetaDataValues(); }; /** * Calendar implementing this interface have improved means of replaying their * changelog data. This could for example mean, that the provider can retrieve * changes between now and the last sync. * * Not implementing this interface is perfectly valid for calendars, that need * to do a full sync each time anyway (i.e ics) */ [scriptable, uuid(0bf4c6a2-b4c7-4cae-993a-4408d8bded3e)] interface calIChangeLog : nsISupports { // To denote no offline flag, use null const long OFFLINE_FLAG_CREATED_RECORD = 1; const long OFFLINE_FLAG_MODIFIED_RECORD = 2; const long OFFLINE_FLAG_DELETED_RECORD = 4; /** * Enable the changelog calendar to retrieve offline data right after instantiation. */ attribute calISyncWriteCalendar offlineStorage; /** * Resets the changelog. This is used if the cache should be refreshed. */ void resetLog(); /** * Instructs the calendar to replay remote changes into the above offlineStorage * calendar. The calendar itself is responsible for storing anything needed * to keep track of what items need updating. * * TODO: We might reconsider to replay on calICalendar, * but this complicates implementing this interface * enormously for providers. * * @param aDestination The calendar to sync changes into * @param aListener The listener to notify when the operation completes. */ calIOperation replayChangesOn(in calIGenericOperationListener aListener); };