Pi’s Blog

My blog about Thunderbird and GSoC 2008

New version of gContactSync out – 0.1 beta 3 (0.1b3)

I apologize for yet another beta, but I added several new features and would like a little more time to test them before releasing version 0.1.0.  You can download it here (the tutorial hasn’t been updated yet). Sorry, here is the actual download.

Just as a notice, I will be busy for most of this week preparing and moving back into my dorm for college, so it will take me longer to respond to bugs and questions.

Upgrade Instructions

Please backup your contacts before installing this version just to be safe.

The upgrade should go well (unless you have mail lists–see below), but I strongly suggest removing your authentication token first.  You can do this in 0.1b2 if you open the main Thunderbird window and go to Tools -> Add-ons -> Preferences (Options) under gContactSync.  There is a button named Remove Authentication Token that you should click.  In any case, you will have to sign in again.  Then, install 0.1b3 like you normally would.  The next time you open the Address Book window you will be asked for your username and password, as well as the usual initial setup preferences.

Note: If you use mailing lists, you should delete the synchronized address book first or the lists (and Groups) might be removed.

Somebody reported that Thunderbird 2 crashed after opening the Address Book once the new extension was installed (Bug 19838), but I haven’t been able to so myself.  If it happens to you, please let me know so I can figure out why this happened.  The reporter was able to fix it by adding an account in the Preferences.

New Features

  • Ability to synchronize multiple accounts (with multiple address books).  Bug 19715
  • Synchronization of phone types (the first 7 phone numbers are synced). Bug 19800
  • Extra features for Thunderbird 3.0b1pre (New attributes available in the new card dialog, extra tree columns to view and sort by in the list of cards, etc)
  • Easy renaming of address book (can do it from the Address Book window)

Bug Fixes

  • Better drag and drop of mail lists. Bug 19766
  • Improved duplicate detection for updated cards
  • Critical – Changing the address book name to an existing one may delete all contacts. Bug 19805

August 27, 2008 Posted by | Uncategorized | , , , | 3 Comments

Birthday Field for Thunderbird’s Address Book

While working on my extension and reading discussions in #maildev, I noticed Bug 13595 – Add Birthday Fields to Address Book is still marked as NEW but has a high priority and a lot of votes in Bugzilla.  With the datepicker XUL element now available and some knowledge of the address book from working on my extension, adding a birthday field should be simple, but I have a few questions about how exactly this should appear.  This post isn’t a promise to fix this since school starts very soon and I’m trying to graduate in 3 years (1 year left after this year), but I’d like to at least get things started so somebody else can finish things up, if I am unable to do so myself.

Question #1: Which type of datepicker should be used?

There are three valid types for the datepicker element

  1. Normal – This just shows a small box that lets one type or increment/decrement the date shown with the arrows
  2. Grid – This shows a calendar and lets one click arrows to change the month (and year) and select a day from the calendar.
  3. Popup – It shows the same box as Normal, but also allows one to chose the date from a calendar like Grid does.

Notes: the two gContactSync tabs are from my extension and the Other tab isn’t necessarily going to be used; it just had the most extra room, and not all three types will be present, obviously.

Question #2 Which tab (for now)?

I know that the new/edit card dialogs might change, but which tab is best until then?  Where should it be located in the tab?

Question #3 What if the user doesn’t change the date?  How can a date be removed?

If the user doesn’t change the date, we probably do not want to save the birthday info.  Right now it only saves the date if it was changed, but there is not a way to remove the date for now.

Question #4 Store the BirthMonth as a number from 0-11 (like JavaScript does) or 1-12?

I tested LDIF import/export of the birthday information, but I remembered that JavaScript treats the month as a number from 0-11 and that is how I store the month.  Storing it as an integer from 0-11 is easiest since it is accessed through JavaScript (and shown from 1-12).


I have created an initial patch that uses a popup datepicker in the Other tab that only sets the card’s BirthDay, BirthMonth, and BirthYear if the datepicker has been updated.  It also adds the birthday to the card view in the format generated by Date.toLocaleDate()

I added BirthDay and BirthMonth to the attribute map in mailnews.js so it will export the birthday information (BirthYear is already present).  CSV and tab imports and exports BirthDay, BirthMonth and BirthYear already.

You can see my current WIP here.

August 17, 2008 Posted by | thunderbird | , , | 4 Comments

Facebook phishing warning

On Facebook I’ve started to see and receive a ton of new spam from friends whose accounts have been hijacked.  I went on one of the phishing sites and was amazed at how similar it looks to Facebook.  I noticed immediately that, when I saw nothing (thank you NoScript – link below), the contents are written through JavaScript through document.write(unescape(…..)).  fanebook, a phishing site, writes the entire page’s contents through JavaScript.  Of course, it is escaped, so unless you can unescape all that in your head, you have to unescape it through JavaScript to see what it really writes:

Click here to see a text file with the HTML commented out

Then I wondered, whois fanebook.com (

Click here to see the results


The similarities in appearance between the phishing site login and facebook’s are remarkable, but it looks like fanebook is a little behind, as the page appears to be from February 07, 2008.


Notice the incorrect URL, copyright date, footer and the presence of the Tour link; the source is also a dead giveaway.  It links to the real facebook.com in several places.


How to avoid falling for a Facebook phishing scam

  • Don’t go to links posted by people on your wall, especially if you go to their profile and they have sent the same message to several other people.
  • http://www.facebook.com.xxxxxxxxx.xxxxxxxxxxx.cn is not a facebook site
  • Use some kind of phishing filter or related extension like WOT for FirefoxNoScript can help, as well.
  • If you already logged into Facebook and see a prompt to login again, don’t.
  • If you think that your account was hijacked, make a new password immediately.  Sometimes the phishing sites redirect you to Facebook itself so you think you logged in successfully.
  • Always check the URL before entering your credentials
  • You can use a password manager (but not Internet Explorer’s) that will enter in your password automatically.  If you see a site that looks like facebook but Firefox doesn’t fill in your password, than it is fake.
  • If you suspect it is a fake, don’t sign in, or at least look at the source code first.  If it looks completely unintelligible then it is fake.

August 16, 2008 Posted by | Uncategorized | , , | 1 Comment

gContactSync Version 0.1 beta 2 (0.1b2) released

The second and final 0.1 beta version of gContactSync is now available for download.  This beta will probably not last as long as 0.1b1 did and there probably won’t be any significant new features before the first release.  If you would like me to add a new feature, help translate, or report a bug, please see this or e-mail me.

Tutorial (not changed much)

Download page

Thank you to Mozdev for hosting the project and everybody who gave feedback and/or reported a bug!


It should upgrade cleanly from 0.1b1, so just download it from the link above and install it like normal.  If you have contacts with multiple screennames, you should rename or delete the synchronized address book first.

New Features

Bug Fixes

It comes with several bug fixes:

  • Bug 19732 (and  19739) – Title, Organization values exchanged in gcontactsync 0.1b1
  • Bug 19733Dragging a card to a mail list in the same directory makes the card appear twice
  • Bug 19740GContact.encodeString and GContact.decodeString are unnecessary
  • Bug 19750Extra columns for the address book results pane don’t work prior to Mailnews bug 413260

August 14, 2008 Posted by | GSOC | , | 6 Comments

E-mail address types and screenname protocols now synced

gContactSync now synchronizes e-mail address types and screenname protocols from Google and shows them in the Thunderbird Edit Card dialog.  The types and protocols are chosen through a drop-down menu.  Valid e-mail types include other, home, and work and valid protocols include Google Talk, AIM, ICQ, MSN (Windows Live Messenger), Yahoo (Messenger), and Jabber.

Google also allows different types of postal addresses and numbers, but I do not plan to implement those at this time.  If you would like me to, however, let me know.

They, like all other added attributes, are not present in the New Card dialog.  Before the first patch for Mailnews Bug 413260 landed, it was impossible to add custom attributes to an address book card without first adding the card to an address book and then modifying it.  It has landed, but is only on the last few trunk nightlies, so, for now, no custom attributes will appear on the new card dialog.  I give some additional information in my response to gContactSync bug 19753.

This feature will appear in the next release soon.


The screenshots are fairly large, so I’ll post links to them.

Types/protocols added to existing attributes: Primary Email, Second Email, and Screen Name

Types/protocols added to extra attributes

More screenshots

August 12, 2008 Posted by | GSOC | , , , , | 1 Comment

Version 0.1b1 Out – Please Upgrade

The first beta version of my extension has been released with several changes and a new tutorial.  The manual postal address modifications of the last two versions are no longer necessary.  Feedback on the new method of syncing addresses and the extension in general is appreciated since I would like to put the add-on on addons.mozilla.org soon.  It is still a test release, so there may be bugs.

New Features

  • New, painless, method of synchronizing postal addresses
  • Improved mail list/group synchronization
  • Full support for the trunk build of Thunderbird after Bug 413260 (Shredder 3.0b1pre 20080807xx or so and beyond)
  • Much easier initial setup
  • Improved duplicate detection
  • Slightly improved error logging (more improvements to come)
  • Support for Google Apps accounts (Hosted) – actually fixed in 0.1a2

Bug Fixes

  • Bug 19718 – P1 – Synchronize Addresses without extra work
  • Bug 19714 – P2 – support for gmail apps (actually fixed in 0.1a2)

Known Bugs

  • Bug 19715 – P1 – no support for multiple accounts
  • Error when syncing during very heavy traffic use


Again, you must take a few steps to move from version 0.1a1 to 0.1b1 since there are so many changes.  These steps are very important!  After the first release updates should become much easier.

  1. Backup your address books and Google Contacts again.
  2. Perform one last synchronization and then rename the synchronized address book as a backup (Right-click it -> Properties and choose a new name).  Don’t update the preference for the name now or after re-installing the extension and you can delete it once you sync for the first time.
  3. Close the Address Book window
  4. In the main Thunderbird window go to Tools -> Add-ons and select gContactSync and press the Options (Preferences) button.
  5. Click the Remove auth token button and close the Preferences window.
  6. Uninstall gContactSync (Uninstall button in Tools -> Add-ons)
  7. Download and install the new version.  The flash tutorial has changed and setup is much easier.

August 8, 2008 Posted by | GSOC | , , , | Leave a comment

New and Improved Postal Address Synchronization

When my extension was written about, the reviewers and commenters all mentioned the onerous task of editing every single contact in Google to reformat the addresses.  I have just finished some tweaking that will allow you to synchronize postal addresses exactly the way you want them formatted.

It will be included in a new release tomorrow.

Changes in Thunderbird

For now, I kept the original 6 fields for each type of address in Thunderbird: Address Line 1, Address Line 2, City, State, Zip Code, and Country.  But, I added a tab to the edit card dialog (what you seen when you edit a card) that contains three textboxes that allow multiple lines.  In the card view on the bottom, the normal address is still shown as normal, if present, but, if the new address is not empty or blank, it replaces the normal address and has its own Map It button.  The new address is automatically made from the old address when the card is converted to an XML representation.

If you use this extension, you will probably want to use the new address fields in the last tab of the edit card dialog.  You unfortunately cannot set any new properties when creating a new card without creating it and then editing it, but the addresses will be converted to the new format automatically.  The original 6 fields will then be cleared since, otherwise, you would be unable to remove an address from a contact.

Click here for a large screenshot (you can’t tell from the screenshot, but there are scrollbars on the right side of the address fields)

Changes in Gmail

You do not have to reformat addresses any more and you can put whatever you wish (as long as it is valid) in the addresses.

The new Postal Address Sync Process

The process of synchronizing postal addresses has changed, obviously.  When converting from a card to XML, the extension first looks for the new address.  If it cannot find that, it looks for the older address and creates a new address from it and sets the address attribute to that.  Then, it synchronizes the new address directly with Google’s address.

When converting from XML to a card, the extension ignores the 6 address fields and sets the value of the new address attribute to the value from Google.


I tried not to do any too drastic before getting some feedback, so this feature is only partially complete.  Should these new textboxes then remove or disable the old textboxes?  Should the extension convert all addresses to the new format when it runs for the first time?

August 7, 2008 Posted by | GSOC | , , , | Leave a comment

Test Release 0.1a2 Out

I have just released another alpha (testing) version of gContactSync with some bug fixes and a few new features.

New Features

  • Mail Lists in Thunderbird and Groups in Google Contacts are now synchronized.  You can rename, add, or remove groups or add or remove the cards to and from them.
  • There is a new preference for disabling automatic synchronization.  Manual synchronization is possible by clicking on the Sync button in the Address Book’s toolbar.

Bug Fixes

  • During the first use, a directory named “Google Contacts” was made before the name was chosen.
  • Viewing and copying cards from an LDAP server sometimes caused errors.
  • Supporting Google-hosted accounts
  • A few other small fixes

The transition from 0.1a1 to 0.1a2 – Important

You must take a few steps to move from version 0.1a1 to 0.1a2 since there are so many changes.  These steps are very important!

  1. Backup your address books and Google Contacts again.
  2. Perform one last synchronization and then rename the synchronized address book (Right-click it -> Properties and choose a new name).  Don’t update the preference for the name now or after re-installing the extension.
  3. Close the Address Book window
  4. In the main Thunderbird window go to Tools -> Add-ons and select gContactSync and press the Options (Preferences) button.
  5. Click the Remove auth token button and close the Preferences window.
  6. Uninstall gContactSync
  7. Download and install the new version.  The flash tutorial hasn’t changed, so install it like last time.

Known Bug

When uploading a newer version of my flash tutorial on my slow home connection an automatic synchronization started and failed (status bar read Syncing…) leaving this in the Error Console:

Error: [Exception… “Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]”  nsresult: “0x80040111 (NS_ERROR_NOT_AVAILABLE)”  location: “JS frame :: chrome://gcontactsync/content/HttpRequest.js :: anonymous :: line 115”  data: no]
Source File: chrome://gcontactsync/content/HttpRequest.js
Line: 115

For now, I am not sure what to do about it.  If this happens, try not to sync while uploading a file.  I was unable to view any webpages in Firefox when this happened.

Bug 413260 (Thunderbird 3 trunk build only)

It looks like Bug 413260 has nearly landed, but I cannot claim that this version supports the patch.  Parts do, but I have not tested many of the new features with it.  If you are using Thunderbird 2, 3.0a1, or 3.0a2 this doesn’t affect you in any way.

August 6, 2008 Posted by | GSOC | , , , | Leave a comment

Synchronizing Addresses – Your Thoughts

When I woke up this morning, I was pleasantly surprised to see several e-mail messages about my extension.  After seeing the web traffic for my website rise from a dozen or so visitors per day to nearly 500, I discovered that several sites have written about the extension even though it is still in the testing stage in both English (ghacks.net, Lifehacker, etc.) and Spanish, which, fortunately, I can read (Incubaweb, VisualBeta.es).  After reading the Spanish articles, I am now wondering if I should attempt to add a Spanish locale…  The only problem is that we don’t exactly talk about synchronization and e-mail clients much in Spanish class so I would have to learn some new words.

Currently, synchronizing addresses with gContactSync is painful as the reviews mention, especially if you have a lot of contacts.  It involves editing every contact in Google with an address.

This technically isn’t necessary, and if you skip doing it the Map It feature in both Gmail and Thunderbird will still work.

For example, here is a standard US postal address:

1234 E. Sesame St.
New York, NY  10001

If the address looks like that in Gmail, Thunderbird will display it as shown, but if you look in the Edit Card Dialog, you will notice that only two address fields are full: Address and Address Line 2.  If you can sleep at night knowing that the city, state, zip (and possibly country) are all on one mislabeled line everything should sync as expected.

If the address has three lines, like the sample below, things change slightly:

Apt. #2
1234 E. Sesame St.
New York, NY  10001

Now, the first line in Thunderbird is Apt. #2, the second line is 1234 E. Sesame St, and the “City” is New York, NY  10001.  It won’t necessarily cause any problems, and the Map It button will still work, but the labels are incorrect.

One solution would be to remove the Address, Address Line 2, City, State, ZipCode, and Country textboxes and replace them with a text area that allows multiple lines like Google has.  If there is no value for that address, I could populate it from the old fields either separated with newlines or formatted US-style.  I am interested in hearing some opinions on this idea.

Update: Instead of replacing the textboxes, I could add a text area for home and work address in a different tab (similar to the Other Address text area) that allows multiple lines and directly synchronizes with Google.  If the area is blank, it would be filled at sync time by combining the 6 fields (Address, Address2, City, State, ZipCode, and Country).  In the card view on the bottom I could hide the original if the new address field is present.  This is the solution currently used.

What are your thoughts on synchronizing addresses?

August 6, 2008 Posted by | GSOC | , , | 5 Comments

Disabling Automatic Synchronization

I completely forgot to mention that it is possible to disable automatic synchronization until I received a question about it.  There are two preferences that control this: Synchronize interval and Initial sync delay.  If you want to disable automatic synchronizing completely, set both of those to 0.  Alternatively, you can just disable all but the first auto sync when you open your Address Book window by setting Synchronize interval to 0.  If just Intial sync delay is set to 0 then there will not be any automatic synchronization until after you press the Sync button and the next sync is scheduled after the interval expires.

There is a Sync button added in the Address Book toolbar that you can use to synchronize manually.

The next test release will have a checkbox to disable automatic synchronization.

August 6, 2008 Posted by | Uncategorized | Leave a comment