/// <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(); }
/// <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);