Lightning Offline Sync: Difference between revisions
Mohitkanwal (talk | contribs) No edit summary |
Mohitkanwal (talk | contribs) (→TODOs) |
||
Line 3: | Line 3: | ||
== TODOs == | == TODOs == | ||
{| | {| border ="1" align="left" | ||
|- | |- | ||
! scope="col" | | ! scope="col" | | ||
Line 170: | Line 170: | ||
---- | ---- | ||
<br> | <br> | ||
== Workflows == | == Workflows == |
Revision as of 18:19, 8 June 2011
This page is for tracking the Lightning Offline Sync Feature to be completed as part of the Google Summer of Code 2011 programme.
TODOs
Item Name |
Priority |
Owner |
Deadline |
Progress |
Comments |
---|---|---|---|---|---|
Adapt schema initialization and versioning code (calCalendarManager) |
mohit |
Done |
Added versioning code in calStorageUpgradeHelper.jsm file. cal_events and cal_todos have an extra "offline_journal" column. and DB SCHEMA Version is 20. | ||
Add search flags "ITEM_FILTER_OFFLINE_DELETED", "ITEM_FILTER_OFFLINE_CREATED" and "ITEM_FILTER_OFFLINE_UPDATED" |
wolfgang |
done | |||
|
wolfgang |
cancelled | Not needed since ALL_ITEMS = 0xffff and our flags are = [29..31] | ||
Adapt getItems in calStorageCalendar with the above |
mohit |
||||
Adapt mSelectNonRecurringEventsByRange and this.mSelectNonRecurringTodosByRange queries |
mohit |
||||
Write offline write method (calStorageCalendar::addOfflineItem) |
To be discussed | ||||
Write offline delete method (calStorageCalendar::deleteOfflineItem) |
mohit | ||||
Write offline update method (calStorageCalendar::updateOfflineItem) |
|
||||
Test the above |
wolfgang/mohit | Testing steps should be discussed | |||
Write replay method |
|
||||
Write "switch code" in calCachedCalendar |
switch code = offline to online mode and back | ||||
test the above |
wolfgang/mohit |
Testing steps shud be discussed | |||
Adapt code from Lightning 1.0b2 to HEAD |
mohit |
Workflows
Offline operations
- addItem:
- (entry) calCachedCalendar::addItem
- calStorageCalendar::addOfflineItem
- setup calOperationListener
- execute calStorageCalendar::addItem with above listener
- listener: update flag with 'c' value (see table below)
- listener: invoke original listener with result code
- modifyItem
- (entry) calCachedCalendar::modifyItem
- calStorageCalendar::modifyOfflineItem
- setup calOperationListener
- execute calStorageCalendar::modifyItem with above listener
- listener: update flag with 'm' value (see table below)
- listener: invoke original listener with result code
- deleteItem
- (entry) calCachedCalendar::deleteItem
- calStorageCalendar::deleteOfflineItem
- update flag with 'd' value (see table below)
- invoke original listener with result code
Note: we cannot delete the record yet as we will need to pass the complete calItem back to the online/uncached calendar during reconcilliation
- getItem/getItems
- code forwarded immediately to the calStorageCalendar
Note: getItems excludes results with offline column set to 'd', unless the ITEM_FILTER_OFFLINE_DELETED flag is passed via the item filter
Transition between online and offline modes
Nothing seems to be required at this stage.
Transition between offline and online modes
New code must be added to calCachedCalendar::onOfflineStatusChanged:
- manage deletions
- setup calOperationListener "listener1"
- invoke calStorageCalendar::getItems with ITEM_FILTER_OFFLINE_DELETE in item_filter and the above listener
- listener1 execution:
- onGetResult:
- setup empty calOperationListener "listener2"
- invoke calCachedCalendar::deleteItem (this) with each resulting events and listener2
- onOperationComplete:
- perform next step ("manage additions")
- onGetResult:
- manage additions
- setup calOperationListener "listener1"
- invoke calStorageCalendar::getItems with ITEM_FILTER_OFFLINE_CREATED in item_filter and the above listener
- listener1 execution:
- onGetResult:
- setup empty calOperationListener "listener2"
- invoke calCachedCalendar::addItem (this) with each resulting events and listener2
- onOperationComplete:
- perform next step ("manage modifications")
- onGetResult:
- manage additions
- setup calOperationListener "listener1"
- invoke calStorageCalendar::getItems with ITEM_FILTER_OFFLINE_MODIFIED in item_filter and the above listener
- listener1 execution:
- onGetResult:
- setup empty calOperationListener "listener2"
- invoke calCachedCalendar::modifyItem (this) with each resulting events and listener2
- onOperationComplete:
- perform calCachedCalendar::refresh (this)
- onGetResult:
Note: reconciliation must occur before calIChangeLog method because "uncached calendars" (at least calDavCalendar) contain code that manages conflicts during data upload. Otherwise, the local changes would immediately be overwritten by server-side changes.
Efficient model for state updates during offline operations
From/To | Created | Modified | Deleted |
---|---|---|---|
(without state) | Mark as "created" | Mark as "modified" | Mark as "deleted" |
Created | (none) | Keep as "created" | Delete record |
Modified | (none) | Keep as "modified" | Mark as deleted |
Deleted | (none) | (none) | (none) |