private static Contact ParseGoogleContact(GoogleContact googleContact)
        {
            if (googleContact == null || googleContact.Deleted)
            {
                return(null);
            }

            var contact = new Contact
            {
                Forename = googleContact.ContactEntry.Name.GivenName,
                Surname  = googleContact.ContactEntry.Name.FamilyName,
            };

            contact.MobileNumber = DetermineMobileNumber(googleContact);

            DateTime date;

            if (DateTime.TryParse(googleContact.ContactEntry.Birthday, out date))
            {
                contact.DateOfBirth = date;
            }

            var gender = googleContact.ContactEntry.Websites.Where(c => c.Label == "Gender").FirstOrDefault();

            if (gender != null)
            {
                contact.Gender = gender.Href.StartsWith("F", StringComparison.InvariantCultureIgnoreCase) ? Contact.Sex.Female : Contact.Sex.Male;
            }

            return(contact);
        }
        private static string DetermineMobileNumber(GoogleContact googleContact)
        {
            if (googleContact.Phonenumbers.Count == 0)
                return null;

            var numbers = googleContact.Phonenumbers.Where(p => p.Value.StartsWith("07") || p.Value.StartsWith("+447")).ToList();
            return numbers.Count > 0 ? numbers.FirstOrDefault().Value : null;
        }
Пример #3
0
 public GContact(RequestSettings rs, IContact other)
 {
     //System.Windows.Forms.MessageBox.Show("Creating a new Google contact for " + other.ToString() + " in memory");
     _rs = rs;
     _item = new Google.Contacts.Contact();
     _item.AtomEntry = new Google.GData.Contacts.ContactEntry();
     MergeFrom(other);
 }
Пример #4
0
 public GContact(RequestSettings rs, IContact other)
 {
     //System.Windows.Forms.MessageBox.Show("Creating a new Google contact for " + other.ToString() + " in memory");
     _rs             = rs;
     _item           = new Google.Contacts.Contact();
     _item.AtomEntry = new Google.GData.Contacts.ContactEntry();
     MergeFrom(other);
 }
        private static string DetermineMobileNumber(GoogleContact googleContact)
        {
            if (googleContact.Phonenumbers.Count == 0)
            {
                return(null);
            }

            var numbers = googleContact.Phonenumbers.Where(p => p.Value.StartsWith("07") || p.Value.StartsWith("+447")).ToList();

            return(numbers.Count > 0 ? numbers.FirstOrDefault().Value : null);
        }
Пример #6
0
        public contacts GetContact(string URI)
        {
            Uri contactURL = new Uri(URI.Replace("http:", "https:"));

            Google.Contacts.Contact entry = cr.Retrieve <Google.Contacts.Contact>(contactURL);

            contacts item;

            ConvertContact(entry, out item);
            return(item);
        }
Пример #7
0
 public void DeleteContactPhoto(Uri contactURL)
 {
     Google.Contacts.Contact contact = cr.Retrieve <Google.Contacts.Contact>(contactURL);
     try
     {
         cr.Delete(contact.PhotoUri, contact.PhotoEtag);
     }
     catch (GDataVersionConflictException e)
     {
         // Etags mismatch: handle the exception.
     }
 }
Пример #8
0
        public void UpdateContactPhoto(Uri contactURL, Stream photoStream)
        {
            Google.Contacts.Contact contact = cr.Retrieve <Google.Contacts.Contact>(contactURL);

            try
            {
                cr.SetPhoto(contact, photoStream);
            }
            catch (GDataVersionConflictException e)
            {
                // Etags mismatch: handle the exception.
            }
        }
Пример #9
0
        public void DeleteContact(Uri contactURL)
        {
            // Retrieving the contact is required in order to get the Etag.
            Google.Contacts.Contact contact = cr.Retrieve <Google.Contacts.Contact>(contactURL);

            try
            {
                cr.Delete(contact);
            }
            catch (GDataVersionConflictException e)
            {
                // Etags mismatch: handle the exception.
            }
        }
Пример #10
0
        public void DownloadPhoto(Uri contactURL)
        {
            Google.Contacts.Contact contact = cr.Retrieve <Google.Contacts.Contact>(contactURL);

            Stream     photoStream = cr.GetPhoto(contact);
            FileStream outStream   = File.OpenWrite("test.jpg");

            byte[] buffer = new byte[photoStream.Length];

            photoStream.Read(buffer, 0, (int)photoStream.Length);
            outStream.Write(buffer, 0, (int)photoStream.Length);
            photoStream.Close();
            outStream.Close();
        }
Пример #11
0
        public void TestTheGoogleWay()
        {
            try {
                RequestSettings rs = new RequestSettings("GContactSync", GoogleContactDownloader.TestUser, GoogleContactDownloader.TestPass);
                ContactsRequest cr = new ContactsRequest(rs);

                Google.Contacts.Contact entry = new Google.Contacts.Contact();
                entry.Name          = new Name();
                entry.Name.FullName = "John Doe";
                entry.Emails.Add(new EMail("*****@*****.**", ContactsRelationships.IsOther));
                Uri feedUri = new Uri(ContactsQuery.CreateContactsUri("default"));
                cr.Insert(feedUri, entry);
            }
            //catch (GDataRequestException ex) {
            //    throw ex;
            //}
            catch (System.Exception ex) {
                throw ex;
            }
        }
        private static Contact ParseGoogleContact(GoogleContact googleContact)
        {
            if (googleContact == null || googleContact.Deleted)
                return null;

            var contact = new Contact
            {
                Forename = googleContact.ContactEntry.Name.GivenName,
                Surname = googleContact.ContactEntry.Name.FamilyName,
            };

            contact.MobileNumber = DetermineMobileNumber(googleContact);

            DateTime date;
            if (DateTime.TryParse(googleContact.ContactEntry.Birthday, out date))
                contact.DateOfBirth = date;

            var gender = googleContact.ContactEntry.Websites.Where(c => c.Label == "Gender").FirstOrDefault();
            if (gender != null)
                contact.Gender = gender.Href.StartsWith("F", StringComparison.InvariantCultureIgnoreCase) ? Contact.Sex.Female : Contact.Sex.Male;

            return contact;
        }
Пример #13
0
        public void TestTheGoogleWay()
        {
            try {
                RequestSettings rs = new RequestSettings("GContactSync", GoogleContactDownloader.TestUser, GoogleContactDownloader.TestPass);
                ContactsRequest cr = new ContactsRequest(rs);

                Google.Contacts.Contact entry = new Google.Contacts.Contact();
                entry.Name = new Name();
                entry.Name.FullName = "John Doe";
                entry.Emails.Add(new EMail("*****@*****.**", ContactsRelationships.IsOther));
                Uri feedUri = new Uri(ContactsQuery.CreateContactsUri("default"));
                cr.Insert(feedUri, entry);
            }
            //catch (GDataRequestException ex) {
            //    throw ex;
            //}
            catch  (System.Exception ex) {
                throw ex;
            }
        }
Пример #14
0
 public GContact(RequestSettings rs, Google.Contacts.Contact gContact)
 {
     _rs = rs;
     _item = gContact;
     _alreadyExistsOnGoogle = true;
 }
 private static bool IsInGroup(GoogleContact contact, string groupId)
 {
     return(contact.GroupMembership.Any(gm => gm.HRef == groupId));
 }
Пример #16
0
        public Google.Contacts.Contact UpdateContact(contacts item)
        {
            Uri contactURL = new Uri(item.gID);

            Google.Contacts.Contact newEntry = cr.Retrieve <Google.Contacts.Contact>(contactURL);

            Google.Contacts.Contact updatedContact2 = cr.Update(newEntry);

            // ----- NAME -----
            newEntry.Name = new Name()
            {
                FullName       = item.Name.FullName,
                NamePrefix     = item.Name.Prefix,
                GivenName      = item.Name.Firstname,
                AdditionalName = item.Name.AdditionalName,
                FamilyName     = item.Name.Surname,
                NameSuffix     = item.Name.Suffix,

                //FamilyNamePhonetics = ,
                //AdditionalNamePhonetics = ,
                //FamilyNamePhonetics = ,
            };

            updatedContact2 = cr.Update(newEntry);

            newEntry.ContactEntry.Nickname = item.Name.Nick;

            updatedContact2 = cr.Update(newEntry);

            // ----- EMAIL -----
            newEntry.Emails.Clear();
            if (item.Email != null)
            {
                foreach (var email in item.Email)
                {
                    if (email.Desc.IndexOf("#") == 0)
                    {
                        newEntry.Emails.Add(new EMail()
                        {
                            Primary = email.Primary,
                            Rel     = "http://schemas.google.com/g/2005" + email.Desc,
                            Address = email.Value
                        });
                    }
                    else if (email.Desc == "")
                    {
                        newEntry.Emails.Add(new EMail()
                        {
                            Primary = email.Primary,
                            Rel     = "http://schemas.google.com/g/2005#other",
                            Address = email.Value
                        });
                    }
                    else
                    {
                        newEntry.Emails.Add(new EMail()
                        {
                            Primary = email.Primary,
                            Label   = email.Desc,
                            Address = email.Value
                        });
                    }
                }
            }

            updatedContact2 = cr.Update(newEntry);

            // ----- PHONE -----
            newEntry.Phonenumbers.Clear();
            if (item.Phone != null)
            {
                foreach (var phone in item.Phone)
                {
                    if (phone.Desc.IndexOf("#") == 0)
                    {
                        newEntry.Phonenumbers.Add(new PhoneNumber()
                        {
                            Primary = phone.Primary,
                            Rel     = "http://schemas.google.com/g/2005" + phone.Desc,
                            Value   = phone.Value
                        });
                    }
                    else if (phone.Desc == "")
                    {
                        newEntry.Phonenumbers.Add(new PhoneNumber()
                        {
                            Primary = phone.Primary,
                            Rel     = "http://schemas.google.com/g/2005#other",
                            Value   = phone.Value
                        });
                    }
                    else
                    {
                        newEntry.Phonenumbers.Add(new PhoneNumber()
                        {
                            Primary = phone.Primary,
                            Label   = phone.Desc,
                            Value   = phone.Value
                        });
                    }
                }
            }

            updatedContact2 = cr.Update(newEntry);

            // ----- Organization -----
            newEntry.Organizations.Clear();
            if (item.Company != null)
            {
                foreach (var comp in item.Company)
                {
                    newEntry.Organizations.Add(new Organization()
                    {
                        Name  = comp.Name,
                        Title = comp.Position,
                        Rel   = "http://schemas.google.com/g/2005#other"
                    });
                }
            }

            updatedContact2 = cr.Update(newEntry);

            // ----- ADDRESS -----

            /*if (item.Address != null)
             * {
             *  foreach (var address in item.Address)
             *  {
             *      newEntry.PostalAddresses.Add(new StructuredPostalAddress()
             *      {
             *          Rel = address.Tag,            // ContactsRelationships.IsWork,
             *          Primary = address.Primary,
             *          Street = address.Street,
             *          City = address.City,
             *          Region = address.Region,
             *          Postcode = address.ZipCode,
             *          Country = address.Country,
             *          FormattedAddress = address.Street + ", " + address.City + ", " + address.Region + ", " + address.Country + ", " + address.ZipCode
             *      });
             *  }
             * }*/


            // ----- BIRTHDATE -----
            if (item.BirthDate != DateTime.MinValue)
            {
                //newEntry.AtomEntry.Birthday = item.BirthDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
                newEntry.ContactEntry.Birthday = item.BirthDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
            }

            updatedContact2 = cr.Update(newEntry);

            // ----- DATES -----

            // ----- WEBSITES -----
            newEntry.ContactEntry.Websites.Clear();
            if (item.Web != null)
            {
                foreach (var web in item.Web)
                {
                    if (web.Desc.IndexOf("#") == 0)
                    {
                        newEntry.ContactEntry.Websites.Add(new Website()
                        {
                            Primary = web.Primary,
                            Rel     = "http://schemas.google.com/g/2005" + web.Desc,
                            Value   = web.Value
                        });
                    }
                    else if (web.Desc == "")
                    {
                        newEntry.ContactEntry.Websites.Add(new Website()
                        {
                            Primary = web.Primary,
                            Rel     = "http://schemas.google.com/g/2005#other",
                            Value   = web.Value
                        });
                    }
                    else
                    {
                        newEntry.ContactEntry.Websites.Add(new Website()
                        {
                            Primary = web.Primary,
                            Label   = web.Desc,
                            Value   = web.Value
                        });
                    }
                }
            }

            updatedContact2 = cr.Update(newEntry);

            // ----- IM -----
            newEntry.IMs.Clear();
            if (item.IM != null)
            {
                foreach (var im in item.IM)
                {
                    if (im.Desc.IndexOf("#") == 0)
                    {
                        newEntry.IMs.Add(new IMAddress()
                        {
                            Primary = im.Primary,
                            Rel     = "http://schemas.google.com/g/2005" + im.Desc,
                            Address = im.Value
                        });
                    }
                    else if (im.Desc == "")
                    {
                        newEntry.IMs.Add(new IMAddress()
                        {
                            Primary = im.Primary,
                            Rel     = "http://schemas.google.com/g/2005#other",
                            Address = im.Value
                        });
                    }
                    else
                    {
                        newEntry.IMs.Add(new IMAddress()
                        {
                            Primary  = im.Primary,
                            Protocol = im.Desc,
                            Address  = im.Value
                        });
                    }
                }
            }

            updatedContact2 = cr.Update(newEntry);

            // ----- GENRE -----
            for (int i = 0; i < newEntry.ContactEntry.UserDefinedFields.Count; i++)
            {
                if (newEntry.ContactEntry.UserDefinedFields[i].Key == "Genre")
                {
                    newEntry.ContactEntry.UserDefinedFields.RemoveAt(i);
                }
            }
            if (item.Genre != "")
            {
                newEntry.ContactEntry.UserDefinedFields.Add(new UserDefinedField()
                {
                    Key   = "Genre",
                    Value = item.Genre
                });
            }



            // ----- RELATIONS -----

            // ----- NOTE -----
            newEntry.Content = item.Note;

            // ----- google ID -----

            // ----- GROUP -----



            // Insert the contact.
            try
            {
                Google.Contacts.Contact updatedContact = cr.Update(newEntry);
                Console.WriteLine("Updated: " + updatedContact.Updated.ToString());
                return(updatedContact);
            }
            catch (GDataVersionConflictException e)
            {
                // Etags mismatch: handle the exception.
            }
            return(null);
        }
Пример #17
0
        public Google.Contacts.Contact CreateContact(contacts item)
        {
            Google.Contacts.Contact newEntry = new Google.Contacts.Contact();

            // ----- NAME -----
            newEntry.Name = new Name()
            {
                FullName       = item.Name.FullName,
                NamePrefix     = item.Name.Prefix,
                GivenName      = item.Name.Firstname,
                AdditionalName = item.Name.AdditionalName,
                FamilyName     = item.Name.Surname,
                NameSuffix     = item.Name.Suffix,
                //FamilyNamePhonetics = ,
                //AdditionalNamePhonetics = ,
                //FamilyNamePhonetics = ,
            };

            // ----- EMAIL -----
            foreach (var email in item.Email)
            {
                newEntry.Emails.Add(new EMail()
                {
                    Primary = email.Primary,
                    Rel     = email.Desc,        // ContactsRelationships.IsHome,
                    Address = email.Value
                });
            }

            // ----- PHONE -----
            foreach (var phone in item.Phone)
            {
                newEntry.Phonenumbers.Add(new PhoneNumber()
                {
                    Primary = phone.Primary,
                    Rel     = phone.Desc,        // ContactsRelationships.IsWork,
                    Value   = phone.Value
                });
            }

            // ----- Organization -----

            // ----- ADDRESS -----
            foreach (var address in item.Address)
            {
                newEntry.PostalAddresses.Add(new StructuredPostalAddress()
                {
                    Rel              = address.Tag, // ContactsRelationships.IsWork,
                    Primary          = address.Primary,
                    Street           = address.Street,
                    City             = address.City,
                    Region           = address.Region,
                    Postcode         = address.ZipCode,
                    Country          = address.Country,
                    FormattedAddress = address.Street + ", " + address.City + ", " + address.Region + ", " + address.Country + ", " + address.ZipCode
                });
            }

            // ----- BIRTHDATE -----


            // ----- DATES -----

            // ----- WEBSITES -----

            // ----- IM -----
            foreach (var im in item.IM)
            {
                newEntry.IMs.Add(new IMAddress()
                {
                    Address = im.Value,
                    Primary = im.Primary,
                    //Rel = //ContactsRelationships.IsHome,
                    Protocol = im.Desc, // ContactsProtocols.IsGoogleTalk,
                });
            }


            // ----- RELATIONS -----

            // ----- NOTE -----
            newEntry.Content = item.Note;

            // ----- google ID -----

            // ----- GROUP -----



            // Insert the contact.
            Uri feedUri = new Uri(ContactsQuery.CreateContactsUri("default"));

            Google.Contacts.Contact createdEntry = cr.Insert(feedUri, newEntry);
            Console.WriteLine("Contact's ID: " + createdEntry.Id);
            return(createdEntry);
        }
Пример #18
0
 public GContact(RequestSettings rs, Google.Contacts.Contact gContact)
 {
     _rs   = rs;
     _item = gContact;
     _alreadyExistsOnGoogle = true;
 }
Пример #19
0
        private bool ConvertContact(Google.Contacts.Contact entry, out contacts item)
        {
            item = new contacts();
            if (entry.Name != null)
            {
                // ----- NAME -----
                Name name = entry.Name;
                if (!string.IsNullOrEmpty(name.FullName))
                {
                    item.Name.FullName = name.FullName;
                }
                if (!string.IsNullOrEmpty(name.NamePrefix))
                {
                    item.Name.Prefix = name.NamePrefix;
                }
                if (!string.IsNullOrEmpty(name.GivenName))
                {
                    item.Name.Firstname = name.GivenName;
                }
                if (!string.IsNullOrEmpty(name.GivenNamePhonetics))
                {
                    item.Name.FirstnamePhonetic = name.GivenNamePhonetics;
                }
                if (!string.IsNullOrEmpty(name.AdditionalName))
                {
                    item.Name.AdditionalName = name.AdditionalName;
                }
                if (!string.IsNullOrEmpty(name.AdditionalNamePhonetics))
                {
                    item.Name.AdditionalNamePhonetic = name.AdditionalNamePhonetics;
                }
                if (!string.IsNullOrEmpty(name.FamilyName))
                {
                    item.Name.Surname = name.FamilyName;
                }
                if (!string.IsNullOrEmpty(name.FamilyNamePhonetics))
                {
                    item.Name.SurnamePhonetic = name.FamilyNamePhonetics;
                }
                if (!string.IsNullOrEmpty(name.NameSuffix))
                {
                    item.Name.Suffix = name.NameSuffix;
                }
                if (!string.IsNullOrEmpty(entry.ContactEntry.Nickname))
                {
                    item.Name.Nick = entry.ContactEntry.Nickname;
                }

                // ----- EMAIL -----
                item.Email = new List <cValue>();
                foreach (EMail email in entry.Emails)
                {
                    cValue cItem;
                    cItem.Value = email.Address;
                    if (email.Rel != null)
                    {
                        cItem.Desc = email.Rel.Replace("http://schemas.google.com/g/2005", "");
                        if (cItem.Desc == "#other")
                        {
                            cItem.Desc = email.Label;
                        }
                    }
                    else
                    {
                        cItem.Desc = email.Label;
                    }
                    cItem.Primary = email.Primary;
                    item.Email.Add(cItem);
                }

                // ----- PHONE -----
                item.Phone = new List <cValue>();
                foreach (PhoneNumber phone in entry.Phonenumbers)
                {
                    cValue cItem;
                    cItem.Value = phone.Value;
                    if (phone.Rel != null)
                    {
                        cItem.Desc = phone.Rel.Replace("http://schemas.google.com/g/2005", "");
                        if (cItem.Desc == "#other")
                        {
                            cItem.Desc = phone.Label;
                        }
                    }
                    else
                    {
                        cItem.Desc = phone.Label;
                    }
                    cItem.Primary = phone.Primary;
                    item.Phone.Add(cItem);
                }

                // ----- Organization -----
                foreach (Organization organization in entry.Organizations)
                {
                    cCompany cItem;
                    item.Company   = new List <cCompany>();
                    cItem.Name     = organization.Name;
                    cItem.Position = organization.Title;
                    cItem.Address  = new cAddress();
                    item.Company.Add(cItem);
                }

                // ----- ADDRESS -----
                foreach (StructuredPostalAddress address in entry.PostalAddresses)
                {
                    cAddress aItem;
                    item.Address  = new List <cAddress>();
                    aItem.Street  = address.Street;
                    aItem.City    = address.City;
                    aItem.Region  = address.Region;
                    aItem.Country = address.Country;
                    aItem.ZipCode = address.Postcode;
                    aItem.Primary = address.Primary;
                    aItem.Tag     = "";
                    if (address.Rel != null)
                    {
                        aItem.Tag = address.Rel.Replace("http://schemas.google.com/g/2005", "");
                        if (aItem.Tag == "#other")
                        {
                            aItem.Tag = address.Label;
                        }
                    }
                    item.Address.Add(aItem);
                }

                // ----- BIRTHDATE -----
                DateTime date = DateTime.MinValue;
                if (DateTime.TryParse(entry.ContactEntry.Birthday, out date))
                {
                    item.BirthDate = date;
                }

                // ----- DATES -----
                foreach (Event ev in entry.ContactEntry.Events)
                {
                    cDates eItem;
                    item.Date  = new List <cDates>();
                    eItem.Date = ev.When.StartTime;
                    if (ev.Relation != null)
                    {
                        eItem.Tag = ev.Relation;
                    }
                    else
                    {
                        eItem.Tag = ev.Label;
                    }
                    eItem.AlLDay = ev.When.AllDay;
                    item.Date.Add(eItem);
                }

                // ----- WEBSITES -----
                item.Web = new List <cValue>();
                foreach (Website web in entry.ContactEntry.Websites)
                {
                    cValue wItem;
                    wItem.Value   = web.Href;
                    wItem.Primary = web.Primary;
                    if (web.Rel != null)
                    {
                        wItem.Desc = web.Rel;
                    }
                    else
                    {
                        wItem.Desc = web.Label;
                    }
                    item.Web.Add(wItem);
                }

                // ----- IM -----
                item.IM = new List <cValue>();
                foreach (IMAddress IM in entry.IMs)
                {
                    cValue imItem;
                    imItem.Value   = IM.Address;
                    imItem.Primary = false;
                    imItem.Desc    = IM.Protocol;
                    if (IM.Protocol != null)
                    {
                        imItem.Desc = IM.Protocol.Replace("http://schemas.google.com/g/2005", "");
                    }
                    item.IM.Add(imItem);
                }

                // ----- RELATIONS -----
                foreach (Relation rel in entry.ContactEntry.Relations)
                {
                    cValue rItem;
                    item.Relation = new List <cValue>();
                    rItem.Value   = rel.Value;
                    rItem.Primary = false;
                    if (rel.Rel != null)
                    {
                        rItem.Desc = rel.Rel;
                    }
                    else
                    {
                        rItem.Desc = rel.Label;
                    }
                    item.Relation.Add(rItem);
                }

                // ----- USER DEFINED -----
                foreach (var user in entry.ContactEntry.UserDefinedFields)
                {
                    if (user.Key == "Genre")
                    {
                        if (user.Value == "M" || user.Value == "F")
                        {
                            item.Genre = user.Value;
                        }
                    }
                }


                // ----- NOTE -----
                item.Note = entry.Content;


                // ----- google ID -----
                //item.gID = entry.AtomEntry.Id.AbsoluteUri;
                item.gID = entry.AtomEntry.EditUri.ToString();

                // ----- Avatar -----
                if (entry.PhotoEtag != null)
                {
                    item.AvatarUri = entry.PhotoUri;
                }

                // ----- GROUP -----
                item.Group = "";
                bool haveGroup = false;
                foreach (GroupMembership groupMembership in entry.GroupMembership)
                {
                    if (!IsSystemGroup(groupMembership.HRef))
                    {
                        if (item.Group.Length > 0)
                        {
                            item.Group += ",";
                        }
                        item.Group += GetGroupName(groupMembership.HRef);
                    }
                    haveGroup = true;
                }
                if (haveGroup)
                {
                    return(true);
                }
            }
            else
            {
                // ----- no name -----
            }

            return(false);
        }
 private static bool IsInGroup(GoogleContact contact, string groupId)
 {
     return contact.GroupMembership.Any(gm => gm.HRef == groupId);
 }