I was attempting to change my sync process today when I opened the Address Book and was greeted with 925 new Address Books. In the end, cleaning obj directory and rebuilding fixed the problem. Strange, but at least my extension wasn’t the direct cause of the problem.
I found and fixed an error that would sometimes occur when trying to sync after adding several new contacts.
After fixing that error, I re-defined what two cards must have in common for the sync function to consider them identical. Since Google only allows one contact/e-mail address, it first checks if the cards have any e-mail address in common (primaryEmail or secondEmail). If there aren’t any e-mail addresses (which is allowed in Thunderbird and Google) it checks the name.
I rewrote my old method to sync individual cards now that I use custom4 for the last modified date. It checks to see first if both have changed (and will eventually have a preference that can ask the user what to do in this case or pick one to always update) and then checks to see which (if any) changed and updates it. Unfortunately, updating a Thunderbird card isn’t as efficient as it could be. I kept getting NS_NOINTERFACE errors while trying to call the modifyCard function in the address book, so I have to actually delete the card and then add the card from Google… Updating a Google contact needs to be re-done soon, too.
In my casual tests I didn’t find any other errors. It now works well offline and syncs every 30 minutes by default or manually. Out of the 11 average contacts I added on one computer, every one synced perfectly with Google and with my other computer.
The only catch so far is that it has to use the card’s custom4 property to store the lastModifiedDate.
0 Comments