Exemple #1
0
        /// <summary>
        /// Launchs the create new contact.
        /// </summary>
        /// <param name='contact'>
        /// Contact.
        /// </param>
        /// 
        protected void LaunchListContacts(ContactQuery query)
        {
            List<ContactLite> contactList = new List<ContactLite>();

            IPhoneServiceLocator.CurrentDelegate.ReloadAddressBook ();  // getting an updated AddressBook instance
            ABAddressBook addressBook = IPhoneServiceLocator.CurrentDelegate.AddressBook;

            // Gets all people in the address book
            ABPerson[] people = addressBook.GetPeople();

            if(people != null) {
                SystemLogger.Log(SystemLogger.Module.PLATFORM, "People found: " + people.Length);

                // sort list by FirstName (default)
                Array.Sort(people, delegate(ABPerson person1, ABPerson person2) {
                    return person1.CompareTo(person2, DEFAULT_CONTACTS_LIST_SORT);
                });

            List<ABPerson> contacts = null;

                if(query == null || QueryValueRequiredFailed(query.Column, query.Value)) {
                    SystemLogger.Log(SystemLogger.Module.PLATFORM, "Listing ALL contacts...");
                    foreach (ABPerson person in people) {
                        contactList.Add (ABPersonToContactLite(person));
                    }

                } else {

                    SystemLogger.Log(SystemLogger.Module.PLATFORM, "Listing contacts by query: " + query.ToString());
                    string value = query.Value;
                    //SystemLogger.Log(SystemLogger.Module.PLATFORM, "Listing contacts by query with value: " + value);

                    switch(query.Column){
                        case ContactQueryColumn.ID:
                            SystemLogger.Log (SystemLogger.Module.PLATFORM, "by ID ");
                            contacts = people.ToList ().FindAll (p => p.Id.ToString () == value.ToString());
                            break;

                    case ContactQueryColumn.Phone:
                            if(query.Condition.Equals(ContactQueryCondition.Available)) {
                                SystemLogger.Log (SystemLogger.Module.PLATFORM, "by Phone available ");
                                contacts = people.ToList ().FindAll (p => (p.GetPhones()!=null && p.GetPhones().Count>0));
                            } else {
                                SystemLogger.Log (SystemLogger.Module.PLATFORM, "** WARNING: When querying for the Phone query column, only the Available query condition is enabled");
                            }
                            break;

                        case ContactQueryColumn.Name:
                            SystemLogger.Log(SystemLogger.Module.PLATFORM, "by NAME in a list of " + people.Length + " people");
                            switch(query.Condition){
                                case ContactQueryCondition.Equals:
                                    SystemLogger.Log (SystemLogger.Module.PLATFORM, "EQUALS ");
                                    contacts = people.ToList ().FindAll (p => ((p.Nickname != null && p.Nickname.Equals (value))
                                        || (p.LastName != null && p.LastName.Equals (value))
                                        || (p.FirstName != null && p.FirstName.Equals (value))
                                        || (p.MiddleName != null && p.MiddleName.Equals (value))));
                                    break;
                                case ContactQueryCondition.StartsWith:
                                    SystemLogger.Log(SystemLogger.Module.PLATFORM, "STARTSWITH ");
                                    contacts = people.ToList ().FindAll (p => ((p.Nickname != null && p.Nickname.StartsWith (value))
                                        || (p.LastName != null && p.LastName.StartsWith (value))
                                        || (p.FirstName != null && p.FirstName.StartsWith (value))
                                        || (p.MiddleName != null && p.MiddleName.StartsWith (value))));
                                    break;
                                case ContactQueryCondition.EndsWith:
                                    SystemLogger.Log(SystemLogger.Module.PLATFORM, "ENDSWITH ");
                                    contacts = people.ToList ().FindAll (p => ((p.Nickname != null && p.Nickname.EndsWith (value))
                                        || (p.LastName != null && p.LastName.EndsWith (value))
                                        || (p.FirstName != null && p.FirstName.EndsWith (value))
                                        || (p.MiddleName != null && p.MiddleName.EndsWith (value))));
                                    break;
                                case ContactQueryCondition.Contains:
                                    SystemLogger.Log (SystemLogger.Module.PLATFORM, "CONTAINS ");
                                    contacts = people.ToList ().FindAll (p => ((p.Nickname != null && p.Nickname.Contains (value))
                                        || (p.LastName != null && p.LastName.Contains (value))
                                        || (p.FirstName != null && p.FirstName.Contains (value))
                                        || (p.MiddleName != null && p.MiddleName.Contains (value))));
                                    break;
                            }
                            break;
                    }
                    if (contacts != null)
                    {
                        foreach (ABPerson person in contacts) {

                            contactList.Add (ABPersonToContactLite (person));

                        }
                    }

                }
            }
            SystemLogger.Log(SystemLogger.Module.PLATFORM, "contactList: " + contactList.Count);
            UIApplication.SharedApplication.InvokeOnMainThread (delegate {
                IPhoneUtils.GetInstance().FireUnityJavascriptEvent("Appverse.Pim.onListContactsEnd", contactList);
            });
        }
 public abstract void ListContacts(ContactQuery query);
 public override void ListContacts(ContactQuery query)
 {
     throw new NotImplementedException();
 }
Exemple #4
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="query">
 /// A <see cref="ContactQuery"/>
 /// </param>
 public override void ListContacts(ContactQuery query)
 {
     SystemLogger.Log(SystemLogger.Module.PLATFORM, "Listing ALL contacts before permission request...");
     if (UIDevice.CurrentDevice.CheckSystemVersion (6, 0)) {
         RequestAccessToContacts(() => { LaunchListContacts (query); } );
     } else {
         LaunchListContacts (query);
     };
 }
 private void FilterReturnedContacts(IReadOnlyList<Windows.ApplicationModel.Contacts.Contact> foundContactList, ConcurrentBag<ContactLite> finallist, ContactQuery query)
 {
     var value = query.Value;
     switch (query.Column)
     {
         case ContactQueryColumn.ID:
             //WindowsPhoneUtils.Log("by ID");
             foundContactList.AsParallel()
                 .ForAll(contact => finallist.Add(new ContactLite
                 {
                     ID = contact.Id.Replace("{", "").Replace(".", "").Replace("}", ""),
                     DisplayName = contact.DisplayName,
                     Name = contact.FirstName,
                     Firstname = contact.MiddleName,
                     Lastname = contact.LastName,
                     Phones = GetContactPhonesArray(contact),
                     Emails = GetContactEmailArray(contact)
                 }));
             break;
         case ContactQueryColumn.Phone:
             //WindowsPhoneUtils.Log("by Phone available");
             foundContactList.AsParallel()
                 .Where(contact => contact.Phones != null && contact.Phones.Count > 0)
                 .ForAll(contact => finallist.Add(new ContactLite
                 {
                     ID = contact.Id.Replace("{", "").Replace(".", "").Replace("}", ""),
                     DisplayName = contact.DisplayName,
                     Name = contact.FirstName,
                     Firstname = contact.MiddleName,
                     Lastname = contact.LastName,
                     Phones = GetContactPhonesArray(contact),
                     Emails = GetContactEmailArray(contact)
                 }));
             break;
         case ContactQueryColumn.Name:
             //WindowsPhoneUtils.Log("by NAME in a list of " + foundContactList.Count + " people");
             switch (query.Condition)
             {
                 case ContactQueryCondition.Equals:
                     //WindowsPhoneUtils.Log("EQUALS ");
                     foundContactList.AsParallel()
                         .Where(contact =>
                             (!String.IsNullOrWhiteSpace(contact.DisplayName) && contact.DisplayName.Equals(value))
                             || (!String.IsNullOrWhiteSpace(contact.FirstName) && contact.FirstName.Equals(value))
                             || (!String.IsNullOrWhiteSpace(contact.LastName) && contact.LastName.Equals(value))
                             || (!String.IsNullOrWhiteSpace(contact.MiddleName) && contact.MiddleName.Equals(value))
                             || (!String.IsNullOrWhiteSpace(contact.Name) && contact.Name.Equals(value)))
                         .ForAll(contact => finallist.Add(new ContactLite
                         {
                             ID = contact.Id.Replace("{", "").Replace(".", "").Replace("}", ""),
                             DisplayName = contact.DisplayName,
                             Name = contact.FirstName,
                             Firstname = contact.MiddleName,
                             Lastname = contact.LastName,
                             Phones = GetContactPhonesArray(contact),
                             Emails = GetContactEmailArray(contact)
                         }));
                     break;
                 case ContactQueryCondition.StartsWith:
                     //WindowsPhoneUtils.Log("STARTSWITH ");
                     foundContactList.AsParallel()
                         .Where(contact =>
                             (!String.IsNullOrWhiteSpace(contact.DisplayName) && contact.DisplayName.StartsWith(value))
                             || (!String.IsNullOrWhiteSpace(contact.FirstName) && contact.FirstName.StartsWith(value))
                             || (!String.IsNullOrWhiteSpace(contact.LastName) && contact.LastName.StartsWith(value))
                             || (!String.IsNullOrWhiteSpace(contact.MiddleName) && contact.MiddleName.StartsWith(value))
                             || (!String.IsNullOrWhiteSpace(contact.Name) && contact.Name.StartsWith(value)))
                         .ForAll(contact => finallist.Add(new ContactLite
                         {
                             ID = contact.Id.Replace("{", "").Replace(".", "").Replace("}", ""),
                             DisplayName = contact.DisplayName,
                             Name = contact.FirstName,
                             Firstname = contact.MiddleName,
                             Lastname = contact.LastName,
                             Phones = GetContactPhonesArray(contact),
                             Emails = GetContactEmailArray(contact)
                         }));
                     break;
                 case ContactQueryCondition.EndsWith:
                     //WindowsPhoneUtils.Log("ENDSWITH");
                     foundContactList.AsParallel()
                         .Where(contact =>
                             (!String.IsNullOrWhiteSpace(contact.DisplayName) && contact.DisplayName.EndsWith(value))
                             || (!String.IsNullOrWhiteSpace(contact.FirstName) && contact.FirstName.EndsWith(value))
                             || (!String.IsNullOrWhiteSpace(contact.LastName) && contact.LastName.EndsWith(value))
                             || (!String.IsNullOrWhiteSpace(contact.MiddleName) && contact.MiddleName.EndsWith(value))
                             || (!String.IsNullOrWhiteSpace(contact.Name) && contact.Name.EndsWith(value)))
                         .ForAll(contact => finallist.Add(new ContactLite
                         {
                             ID = contact.Id.Replace("{", "").Replace(".", "").Replace("}", ""),
                             DisplayName = contact.DisplayName,
                             Name = contact.FirstName,
                             Firstname = contact.MiddleName,
                             Lastname = contact.LastName,
                             Phones = GetContactPhonesArray(contact),
                             Emails = GetContactEmailArray(contact)
                         }));
                     break;
                 case ContactQueryCondition.Contains:
                     //WindowsPhoneUtils.Log("CONTAINS");
                     foundContactList.AsParallel()
                         .Where(contact =>
                             (!String.IsNullOrWhiteSpace(contact.DisplayName) && contact.DisplayName.Contains(value))
                             || (!String.IsNullOrWhiteSpace(contact.FirstName) && contact.FirstName.Contains(value))
                             || (!String.IsNullOrWhiteSpace(contact.LastName) && contact.LastName.Contains(value))
                             || (!String.IsNullOrWhiteSpace(contact.MiddleName) && contact.MiddleName.Contains(value))
                             || (!String.IsNullOrWhiteSpace(contact.Name) && contact.Name.Contains(value)))
                         .ForAll(contact => finallist.Add(new ContactLite
                         {
                             ID = contact.Id.Replace("{", "").Replace(".", "").Replace("}", ""),
                             DisplayName = contact.DisplayName,
                             Name = contact.FirstName,
                             Firstname = contact.MiddleName,
                             Lastname = contact.LastName,
                             Phones = GetContactPhonesArray(contact),
                             Emails = GetContactEmailArray(contact)
                         }));
                     break;
             }
             break;
     }
 }
 public abstract Task ListContacts(ContactQuery query);
 private async Task SearchContactsWithLetter(string sLetters, ContactQuery query)
 {
     var bExceptionRaised = false;
     try
     {
         var agenda = await ContactManager.RequestStoreAsync();
         var contacts = await agenda.FindContactsAsync(sLetters);
         var finallist = new ConcurrentBag<ContactLite>();
         FilterReturnedContacts(contacts, finallist, query);
         finallist.AsParallel().ForAll(contact => _finalUsers.TryAdd(contact.ID, contact));
     }
     catch (Exception ex)
     {
         //Security Error --> '@' character in websites collection URL
         if (ex.HResult == -2146697202)
         {
             bExceptionRaised = true;
         }
     }
     if (bExceptionRaised)
     {
         if (sLetters.Length < 2)
         {
             _startingLetters.Add((sLetters));
             await StartContactSeach(sLetters, query);
         }
         else
             _faultyLetters.Add(sLetters);
     }
 }
 private async Task StartContactSeach(string sLetters, ContactQuery query)
 {
     var subTask = new ConcurrentBag<Task>();
     Parallel.ForEach(_alphabet, letter =>
     {
         try
         {
             var sStartLetters = (String.IsNullOrWhiteSpace(sLetters)) ? letter : String.Concat(sLetters, letter);
             subTask.Add(SearchContactsWithLetter(sStartLetters, query));
         }
         catch (Exception ex)
         {
             WindowsPhoneUtils.Log(ex.Message);
         }
     });
     await Task.WhenAll(subTask);
 }
        public override async Task ListContacts(ContactQuery query)
        {

            ContactLite[] returnUsers = null;
            Task.Run(async () =>
            {
                var bExceptionRaised = false;
                try
                {
                    var finallist = new ConcurrentBag<ContactLite>();
                    var agenda = await ContactManager.RequestStoreAsync();
                    var foundContactList = await agenda.FindContactsAsync();

                    if (query != null)
                    {
                        WindowsPhoneUtils.Log("Listing contacts by query: " + query);
                        FilterReturnedContacts(foundContactList, finallist, query);
                    }
                    else
                    {
                        WindowsPhoneUtils.Log("Listing ALL contacts...");
                        foundContactList.AsParallel()
                        .ForAll(contact => finallist.Add(new ContactLite
                        {
                            ID = contact.Id.Replace("{", "").Replace(".", "").Replace("}", ""),
                            DisplayName = contact.DisplayName,
                            Name = contact.FirstName,
                            Firstname = contact.MiddleName,
                            Lastname = contact.LastName,
                            Phones = GetContactPhonesArray(contact),
                            Emails = GetContactEmailArray(contact)
                        }));
                    }
                    returnUsers = finallist.ToArray();
                }
                catch (UnauthorizedAccessException ex)
                {
                    WindowsPhoneUtils.Log("Not enough privileges to access Contacts");
                    WindowsPhoneUtils.InvokeCallback(AccessDeniedContactsCallback, WindowsPhoneUtils.CALLBACKID, null);
                    return;
                }
                catch (Exception ex)
                {
                    //error
                    bExceptionRaised = true;
                }

                if (bExceptionRaised)
                {
                    try
                    {
                        _faultyLetters = new ConcurrentBag<string>();
                        _startingLetters = new ConcurrentBag<string>();
                        _finalUsers.Clear();
                        await StartContactSeach(String.Empty, query);
                        returnUsers = _finalUsers.Values.ToArray();


                        _startingLetters.AsParallel().ForAll(startingLetter =>
                        {
                            if (!_faultyLetters.Any(
                                    faultySilabe =>
                                        faultySilabe.StartsWith(startingLetter,
                                            StringComparison.CurrentCultureIgnoreCase)))
                                _faultyLetters.Add(startingLetter);
                        });

                        WindowsPhoneUtils.InvokeCallback(WpContactsFailedCallback, WindowsPhoneUtils.CALLBACKID, JsonConvert.SerializeObject(_faultyLetters.OrderBy(x => x).ToArray()));
                    }
                    catch (Exception ex)
                    {
                        //UNHANDLED ERROR
                        WindowsPhoneUtils.Log("Unhandled error recovering contacts:" + ex.Message);
                    }
                }
                WindowsPhoneUtils.InvokeCallback(ListContactsCallback, WindowsPhoneUtils.CALLBACKID, JsonConvert.SerializeObject(returnUsers));
            });
        }
 public abstract void ListContacts(ContactQuery query);
 public abstract Task ListContacts(ContactQuery query);