Index: conduit/modules/GoogleModule/GoogleModule.py
===================================================================
--- conduit/modules/GoogleModule/GoogleModule.py	(revision 1348)
+++ conduit/modules/GoogleModule/GoogleModule.py	(working copy)
@@ -12,6 +12,7 @@
 import conduit.Utils as Utils
 import conduit.Exceptions as Exceptions
 from conduit.datatypes import Rid
+import conduit.datatypes.Contact as Contact
 import conduit.datatypes.Event as Event
 import conduit.datatypes.Photo as Photo
 import conduit.datatypes.Video as Video
@@ -35,6 +36,7 @@
 MODULES = {
     "GoogleCalendarTwoWay" : { "type": "dataprovider" },
     "PicasaTwoWay" :         { "type": "dataprovider" },
+    "ContactsSource" :       { "type": "dataprovider" },
     "YouTubeSource" :        { "type": "dataprovider" },       
 }
 
@@ -667,6 +669,51 @@
             return False
         return True
 
+class ContactsSource(GoogleBase, DataProvider.DataSource):
+    """
+    Contacts GData provider
+    """
+    _name_ = _("Contacts")
+    _description_ = _("Sync contacts from Google")
+    _category_ = conduit.dataproviders.CATEGORY_MISC
+    _module_type_ = "source"
+    _out_type_ = "contact"
+    _icon_ = "contact"
+
+    FEED = "http://www.google.com/m8/feeds/contacts/%s/base"
+
+    def __init__(self, *args):
+        GoogleBase.__init__(self)
+        DataProvider.DataSource.__init__(self)
+        self.entries = None
+        self.feed = ""
+
+    def _set_username(self, username):
+        GoogleBase._set_username(self, username)
+        self.feed = self.FEED % self.username
+
+    def refresh(self):
+        DataProvider.DataSource.refresh(self)
+        self.service = gdata.service.GDataService(service="cp", server="www.google.com")
+        self.service.ClientLogin(self.username, self.password)
+
+        # we can ask the server for everything thats changed after a certain date, including deletions
+        contacts = self.service.GetFeed(self.feed).entry
+        for contact in contacts:
+            # this is like a list of uids and last modified dates
+            print str(contact)
+
+    def get_all(self):
+        return []
+
+    def get(self, LUID):
+        DataProvider.DataSource.get(self, LUID)
+        return None
+
+    def finish(self, aborted, error, conflict):
+        DataProvider.DataSource.finish(self)
+
+
 class YouTubeSource(DataProvider.DataSource):
     """
     Downloads YouTube videos using the gdata API.
