English    Deutsch

Different ways to sync

You can sync CalenGoo either via Android or directly with Google as explained under Accounts. If you sync via Android, all data is stored in the Android calendar’s database and the sync is performed by Android. If you sync directly with Google, the data is stored in CalenGoo’s database and the sync is performed by CalenGoo. The sync of the Android calendar works probably in the same way as CalenGoo’s direct sync (but it also supports push so it might be slightly different). In the following you can find a short description of CalenGoo’s direct sync:

Technical description how the sync works

In Google Calendar every event has a modification date. When CalenGoo syncs with Google Calendar, it asks Google to send all events that were modified after the last time CalenGoo synced, i.e. that have a modification date newer than the date of the most recently changed event in each calendar. So keeping a large time range in sync, i.e. all past and future events, doesn’t cost extra time, CalenGoo does not have to check a larger time range to do this. It simply downloads events that were recently changed regardless of which start and end time they have:



When you change an event in CalenGoo, CalenGoo tries to upload these changes immediately to Google. So CalenGoo only modifies those events in Google Calendar that you modified in CalenGoo. It wouldn’t be a problem if due to a glitch CalenGoo and Google Calendar wouldn’t display the same events, this wouldn’t mean that CalenGoo would try to make Google Calendar match its own data. CalenGoo only modifies the events that you saved, moved, deleted or added with CalenGoo. It doesn’t modify any events by itself.

Changed events

If you would like to see which events have been recently changed in your calendars (e.g. to see how the sync works) you can also just start this program by clicking on the link (you need to have Java Webstart installed, if you don’t have it you can get Java from http://www.java.com):

Start LatestGoogleCalendarChanges

Enter your email and password and click "Sign in". Wait a moment, the application is a little slow and just stops working while it is downloading your calendar list. As you can see in the screenshot below, you can select a calendar on the left and see on the right which changes occurred in this calendar recently. In the example a single event was deleted. The displayed "Changed" times are GMT times! So you have to compute your local time to see when an event was changed. You can use this time zone converter if you like:

http://www.timeanddate.com/worldclock/converter.html



Quick Sync

To improve the sync speed and reduce the load on Google’s servers CalenGoo has a "Quick Sync" function. Basically it only means that CalenGoo will ask the "Quick Sync" server which calendars need to be synced, which makes the sync a lot faster.

This is how a normal sync looks like:
  • Download the calendar list
  • Download changes from calendar A
  • Download changes from calendar B
  • Download changes from calendar C
  • Download changes from calendar D
  • Download changes from calendar E
And this is how a "Quick sync" looks like:
  • Download the list of changed calendars from the "Quick Sync" server
  • Download changes from calendar C
Since downloading changes from a calendar can take several seconds, downloading only the changes from one calendar takes a lot less time than downloading the changes from five calendars.

You may ask "
What does the Quick Sync server know about my events? Does it have access to my data or Google account?". The answer is that it does not have access to your Google account and it does not know your events. All it gets are messages from Google containing IDs of the calendar that has changed. It does not get any data about your events. Google says only "Calendar C has changed". But it does not tell the Quick Sync server what has changed in that calendar. So the Quick Sync server saves only a list of calendar IDs. And the next time CalenGoo syncs, it downloads these calendar IDs from the Quick Sync server and this way it knows which calendars it has to sync and which not. Here is a diagram that shows this:

Screen Shot 2015-05-02 at 00.13.37

And this is an example message that the QuickSync server receives from Google:

{
"kind": "api#channel",
"id": "01234567-89ab-cdef-0123456789ab"", // ID you specified for this channel.
"resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
"resourceUri": "https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events", // Version-specific ID of the watched resource.
"token": "target=myApp-myCalendarChannelDest", // Present only if one was provided.
"expiration": 1426325213000, // Actual expiration time as Unix timestamp (in ms), if applicable.
}

You can find further information about this on the Google Calendar Push Notifications website.

When CalenGoo asks the Quick Sync server which calendars have changed it looks like this:

GET /push/cc?cid=calendar1ID%2Ccalendar2ID%2Ccalendar3ID&prev=timeofprevioussync&s=checksum

As a result the server returns which of these calendar IDs have changed since the previous sync.

Limitations

The Quick Sync function is not used for public holiday, sports and weather calendars (because these calendars do not support Google’s push function).

Bug in Google Calendar

There is also currently (June 1st 2012) a bug in Google Calendar that might affect a few events. This bug seems to have been fixed on July 3rd 2012. Everything seems to work correctly again! Nevertheless here is the previous description of this bug: As you can read here

http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3103

the modification date/time of a modified event is sometimes not correctly set. If you think that you are affected by this bug, because an event is not correctly synced with CalenGoo, just use the program mentioned under “Changed events” on this web page to see if the event has a correct modification date/time (it should appear at the top of the list if it was modified recently). If your event doesn’t have a correct modification date/time, then it is impossible for CalenGoo to know that it has changed. The purpose of the modification date/time is to let other programs know which events have to be synced. Without it, other programs would have to download all calendars and all events every time they sync, instead of just the modified ones.

If you would like to download all calendars and events, you can tap “Settings”, “Reset calendars” in CalenGoo. This will erase all events and calendars in CalenGoo and re-download everything from Google.

However this bug seems to affect only a few events and will hopefully be fixed by Google soon.

There are three workarounds that you can use until Google has fixed the bug:
  1. You can sync via Android, i.e. check “Settings”, “Accounts”, “Android” and uncheck the other accounts in CalenGoo. You can read more about the differences between both sync methods here: Accounts
  2. You can open “Settings”, “Visibility/Download” in CalenGoo and set your calendars to “Force redownload always, visible” (but this might be quite slow if you have a lot of events) or “Force redownload past week and future events, visible” (but then you won’t see events that are older than a week).
  3. You can use “Settings”, “Reset calendars” from time to time to get CalenGoo back in sync with Google Calendar and use the normal sync in the meantime.
If you would like to be informed when something changes or the bug is fixed, you can click on the star in the upper left corner of the mentioned bug report:

http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3103

Then you will get an email when a comment is added or when the bug has been fixed/closed by Google.