async private Task UpdateContact(string remoteId, string givenName, string familyName, string phone) { logger.debug("updating contact id={0} {1} {2} {3}", remoteId, givenName, familyName, phone); ContactStore store = await ContactStore.CreateOrOpenAsync(); string taggedRemoteId = remoteId; StoredContact contact = await store.FindContactByRemoteIdAsync(taggedRemoteId); if (contact != null) { logger.debug("contact id={0} exists in custom store, updating", remoteId); contact.GivenName = givenName; contact.FamilyName = familyName; IDictionary <string, object> props = await contact.GetPropertiesAsync(); props[KnownContactProperties.MobileTelephone] = phone; await contact.SaveAsync(); } else { await AddContact(remoteId, givenName, familyName, phone); } }
//async public void AddContactFromStore(string parameters) //{ // string[] tempParams = HttpUtility.UrlDecode(parameters).Split('~'); // string remoteId = tempParams[0]; // string givenName = tempParams[1]; // string familyName = tempParams[2]; // string street = tempParams[3]; // string city = tempParams[4]; // string state = tempParams[5]; // string zip = tempParams[6]; // string country = tempParams[7]; // string phone = tempParams[8]; // string email = tempParams[9]; // store = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly); // StoredContact contact = new StoredContact(store); // RemoteIdHelper remoteIDHelper = new RemoteIdHelper(); // await remoteIDHelper.SetRemoteIdGuid(store); // contact.RemoteId = await remoteIDHelper.GetTaggedRemoteId(store, remoteId); // contact.GivenName = givenName; // contact.FamilyName = familyName; // string address = street + Environment.NewLine + city + ", " + state + " " + zip + Environment.NewLine + country; // IDictionary<string, object> props = await contact.GetPropertiesAsync(); // props.Add(KnownContactProperties.Email, email); // //props.Add(KnownContactProperties.Address, address); // props.Add(KnownContactProperties.Telephone, phone); // //IDictionary<string, object> extprops = await contact.GetExtendedPropertiesAsync(); // //extprops.Add("Codename", codeName); // await contact.SaveAsync(); //} #region Private methods async private void EditContact(string parameters) { string js = ""; // WP8 does not allow the editing of the contact. Just return NOT AVAILABLE IN WINDOES PHONE 8 message js = "javascript: var e = document.createEvent('Events');" + "e.initEvent('intel.xdk.contacts.edit',true,true);e.success=false;" + "e.error='NOT AVAILABLE IN WINDOES PHONE 8';document.dispatchEvent(e);"; //InjectJS("javascript:" + js); InvokeCustomScript(new ScriptCallback("eval", new string[] { js }), true); return; string[] args = WPCordovaClassLib.Cordova.JSON.JsonHelper.Deserialize <string[]>(parameters); getAllContacts(); string contactId = HttpUtility.UrlDecode(args[0]); if (busy == true) { js = "javascript: var e = document.createEvent('Events');" + "e.initEvent('intel.xdk.contacts.busy',true,true);e.success=false;" + "e.message='busy';document.dispatchEvent(e);"; //InjectJS("javascript:" + js); InvokeCustomScript(new ScriptCallback("eval", new string[] { js }), true); return; } try { ContactStore store = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly); StoredContact contact = await store.FindContactByRemoteIdAsync(contactId); if (contact != null) { } else { js = string.Format("javascript: var e = document.createEvent('Events');" + "e.initEvent('intel.xdk.contacts.edit',true,true);e.success=false;" + "e.error='contact not found';e.contactid='{0}';document.dispatchEvent(e);", contactId); //InjectJS("javascript:" + js); InvokeCustomScript(new ScriptCallback("eval", new string[] { js }), true); return; } } catch (Exception e) { js = string.Format("javascript: var e = document.createEvent('Events');" + "e.initEvent('intel.xdk.contacts.edit',true,true);e.success=false;" + "e.error='{0}';e.contactid='{1}';document.dispatchEvent(e);", e.Message, contactId); //InjectJS("javascript:" + js); InvokeCustomScript(new ScriptCallback("eval", new string[] { js }), true); return; } }
public async Task CheckAndUpdateUsers(List <IContact> contacts) { if (contacts.IsNullOrEmpty()) { return; } foreach (var contact in contacts) { var existingContact = await _store.FindContactByRemoteIdAsync(contact.ContactId) ?? new StoredContact(_store) { RemoteId = contact.ContactId }; existingContact.DisplayName = string.IsNullOrEmpty(contact.FullName) ? contact.Username : contact.FullName; if (!string.IsNullOrEmpty(contact.FirstName)) { existingContact.GivenName = contact.FirstName; } if (!string.IsNullOrEmpty(contact.LastName)) { existingContact.FamilyName = contact.LastName; } var contactProperties = await existingContact.GetPropertiesAsync(); contactProperties.AddIfNotNull(KnownContactProperties.Email, contact.EmailAddress); contactProperties.AddIfNotNull(KnownContactProperties.Url, contact.WebAddress); contactProperties.AddIfNotNull(KnownContactProperties.Telephone, contact.PhoneNumber); contactProperties.AddIfNotNull(KnownContactProperties.Notes, contact.Bio); if (!string.IsNullOrEmpty(contact.ProfilePicture) && existingContact.DisplayPicture == null && App.Settings.DownloadDisplayPictures) { using (var stream = await App.HttpClient.GetStreamAsync(contact.ProfilePicture)) { await existingContact.SetDisplayPictureAsync(stream.AsInputStream()); } } await existingContact.SaveAsync(); } }
private async Task <bool> ProcessConnectData(DownloadRichConnectDataOperation downloadRichConnectDataOperation) { ContactBindingManager store = await ContactBindings.GetAppContactBindingManagerAsync(); ContactStore contactStore = await ContactStore.CreateOrOpenAsync(); foreach (string id in (IEnumerable <string>)downloadRichConnectDataOperation.Ids) { string remoteId = id; try { string title = (await contactStore.FindContactByRemoteIdAsync(remoteId)).DisplayName; ContactBinding contactBinding = await store.GetContactBindingByRemoteIdAsync(remoteId); ConnectTileData connectTileData = new ConnectTileData(); connectTileData.Title = title; BackendResult <PhotosListWithCount, ResultCode> profilePhotos = await PhotosService.Current.GetProfilePhotos(RemoteIdHelper.GetItemIdByRemoteId(remoteId), 0, 3); if (profilePhotos.ResultCode == ResultCode.Succeeded) { for (int index = 0; index < Math.Min(3, profilePhotos.ResultData.response.Count); ++index) { Photo photo = profilePhotos.ResultData.response[index]; ConnectTileImage connectTileImage = new ConnectTileImage(); connectTileImage.ImageUrl = photo.src_big; ((ICollection <ConnectTileImage>)connectTileData.Images).Add(connectTileImage); } } contactBinding.TileData = connectTileData; await store.SaveContactBindingAsync(contactBinding); title = null; contactBinding = null; connectTileData = null; } catch (Exception ex) { Logger.Instance.Error("ProcessConnectData failed", ex); } remoteId = null; } return(true); }
private async Task EnsureProvisioned(ContactStore store) { if (AppGlobalStateManager.Current.LoggedInUserId != 0L) { bool flag = true; string text = ContactsManager.GetRemoteId(AppGlobalStateManager.Current.GlobalState.LoggedInUser); try { if (await store.FindContactByRemoteIdAsync(text) == null) { flag = false; } } catch (Exception) { flag = false; } if (!flag) { try { StoredContact arg_159_0 = await store.CreateMeContactAsync(text); arg_159_0.DisplayName = (AppGlobalStateManager.Current.GlobalState.LoggedInUser.Name); await arg_159_0.SaveAsync(); } catch { } try { await SocialManager.ProvisionAsync(); } catch { } } text = null; } }
private async Task EnsureProvisioned(ContactStore store) { if (AppGlobalStateManager.Current.LoggedInUserId == 0L) { return; } bool ok = true; string meRemoteId = ContactsManager.GetRemoteId(AppGlobalStateManager.Current.GlobalState.LoggedInUser); try { if (await store.FindContactByRemoteIdAsync(meRemoteId) == null) { ok = false; } } catch { ok = false; } if (!ok) { StoredContact meContactAsync = await store.CreateMeContactAsync(meRemoteId); string name = AppGlobalStateManager.Current.GlobalState.LoggedInUser.Name; meContactAsync.DisplayName = name; await meContactAsync.SaveAsync(); try { await SocialManager.ProvisionAsync(); } catch { } } meRemoteId = null; }
/// <summary> /// Update Contact Information /// </summary> /// <param name="remoteId"></param> /// <param name="givenName"></param> /// <param name="familyName"></param> /// <param name="email"></param> /// <param name="codeName"></param> async private void UpdateContact(string remoteId, string givenName, string familyName, string email, string codeName) { store = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly); string taggedRemoteId = await GetTaggedRemoteId(store, remoteId); StoredContact contact = await store.FindContactByRemoteIdAsync(taggedRemoteId); if (contact != null) { contact.GivenName = givenName; contact.FamilyName = familyName; IDictionary <string, object> props = await contact.GetPropertiesAsync(); props[KnownContactProperties.Email] = email; IDictionary <string, object> extprops = await contact.GetExtendedPropertiesAsync(); extprops["Codename"] = codeName; await contact.SaveAsync(); } }
public async Task SyncContactsAsync(List <User> friendsList) { if (this._synching || this._deleting) { return; } this._synching = true; friendsList = friendsList.Take <User>(ContactsManager.MAX_FRIENDS_TO_SYNC).ToList <User>(); long initiallyLoggedInUser = AppGlobalStateManager.Current.LoggedInUserId; try { SavedContacts savedContacts = await this.GetSavedList(); List <User> savedList = savedContacts.SavedUsers; Func <User, string> getKey = (Func <User, string>)(u => u.uid.ToString()); List <Tuple <User, User> > updatedUsersTuples; List <User> createdUsers; List <User> deletedUsers; ListUtils.GetListChanges <User>(savedList, friendsList, getKey, (Func <User, User, bool>)((u1, u2) => { if (ContactsManager.AreStringsEqualOrNullEmpty(u1.first_name, u2.first_name) && ContactsManager.AreStringsEqualOrNullEmpty(u1.last_name, u2.last_name) && (ContactsManager.AreStringsEqualOrNullEmpty(u1.mobile_phone, u2.mobile_phone) && ContactsManager.AreStringsEqualOrNullEmpty(u1.home_phone, u2.home_phone)) && (ContactsManager.AreStringsEqualOrNullEmpty(u1.site, u2.site) && ContactsManager.AreStringsEqualOrNullEmpty(u1.bdate, u2.bdate))) { return(ContactsManager.AreStringsEqualOrNullEmpty(u1.photo_max, u2.photo_max)); } return(false); }), out updatedUsersTuples, out createdUsers, out deletedUsers); Logger.Instance.Info("ContactsManager got {0} updated users, {1} new users, {2} deleted users", updatedUsersTuples.Count, createdUsers.Count, deletedUsers.Count); int totalCountToSync = createdUsers.Count; int currentSyncing = 0; if (initiallyLoggedInUser != AppGlobalStateManager.Current.LoggedInUserId || !AppGlobalStateManager.Current.GlobalState.SyncContacts) { await this.DoDeleteAllContactsAsync(); } else { ContactStore contactStore = await ContactStore.CreateOrOpenAsync(); await this.EnsureProvisioned(contactStore); StoredContact meContact = await contactStore.FindContactByRemoteIdAsync(ContactsManager.GetRemoteId(AppGlobalStateManager.Current.GlobalState.LoggedInUser)); if (meContact != null) { await this.SetContactProperties(meContact, AppGlobalStateManager.Current.GlobalState.LoggedInUser, (User)null); await meContact.SaveAsync(); } contactStore.CreateContactQuery(); foreach (Tuple <User, User> tuple in updatedUsersTuples) { User updUser = tuple.Item2; User originalUser = tuple.Item1; if (initiallyLoggedInUser != AppGlobalStateManager.Current.LoggedInUserId || !AppGlobalStateManager.Current.GlobalState.SyncContacts) { await this.DoDeleteAllContactsAsync(); return; } try { StoredContact contact = await contactStore.FindContactByRemoteIdAsync(ContactsManager.GetRemoteId(updUser)); await this.SetContactProperties(contact, updUser, originalUser); if (contact != null) { await contact.SaveAsync(); } contact = null; } catch (Exception ex) { Logger.Instance.Error("Failed to update contact for user " + updUser.Name, ex); } updUser = (User)null; originalUser = (User)null; } //List<Tuple<User, User>>.Enumerator enumerator1 = new List<Tuple<User, User>>.Enumerator(); foreach (User user in createdUsers) { User newUser = user; ++currentSyncing; if (initiallyLoggedInUser != AppGlobalStateManager.Current.LoggedInUserId || !AppGlobalStateManager.Current.GlobalState.SyncContacts) { await this.DoDeleteAllContactsAsync(); return; } try { if (await contactStore.FindContactByRemoteIdAsync(ContactsManager.GetRemoteId(newUser)) == null) { Stopwatch sw = Stopwatch.StartNew(); this.FireSyncStatusChanged(currentSyncing, totalCountToSync); Logger.Instance.Info("ContactsManager begin creating user"); StoredContact contact = new StoredContact(contactStore); await this.SetContactProperties(contact, newUser, null); await contact.SaveAsync(); Logger.Instance.Info("ContactsManager end creating user"); sw.Stop(); long num = 500L - sw.ElapsedMilliseconds; if (num > 0L) { await Task.Delay((int)num); } sw = null; contact = null; } savedList.Add(newUser); } catch (Exception ex) { Logger.Instance.Error("Failed to create contact for user " + newUser.Name, ex); } newUser = null; } //List<User>.Enumerator enumerator2 = new List<User>.Enumerator(); foreach (User user in deletedUsers) { User deletedUser = user; if (initiallyLoggedInUser != AppGlobalStateManager.Current.LoggedInUserId || !AppGlobalStateManager.Current.GlobalState.SyncContacts) { await this.DoDeleteAllContactsAsync(); return; } try { StoredContact contactByRemoteIdAsync = await contactStore.FindContactByRemoteIdAsync(ContactsManager.GetRemoteId(deletedUser)); if (contactByRemoteIdAsync != null) { await contactStore.DeleteContactAsync(contactByRemoteIdAsync.Id); } savedList.Remove(deletedUser); } catch (Exception ex) { Logger.Instance.Error("Failed to delete contact for user " + deletedUser.Name, ex); } deletedUser = null; } //enumerator2 = new List<User>.Enumerator(); savedContacts.SyncedDate = DateTime.UtcNow; await this.EnsurePersistSavedContactsAsync(); savedContacts = null; savedList = null; deletedUsers = null; createdUsers = null; updatedUsersTuples = null; contactStore = null; meContact = null; } } catch (Exception ex) { Logger.Instance.Error("Failed to sync contacts. ", ex); } finally { this._synching = false; this.FireSyncStatusChanged(0, 0); } }
public static async Task <TLUserBase> UpdateContactInternalAsync(TLUserBase contact, IFileManager fileManager, ContactStore store, bool updateOrCreate) { TLUserBase delayedContact = null; var remoteId = contact.Index.ToString(CultureInfo.InvariantCulture); var phoneContact = await store.FindContactByRemoteIdAsync(remoteId); if (updateOrCreate) { phoneContact = phoneContact ?? new StoredContact(store); } if (phoneContact == null) { return(delayedContact); } phoneContact.RemoteId = remoteId; phoneContact.GivenName = contact.FirstName.ToString(); //FirstName phoneContact.FamilyName = contact.LastName.ToString(); //LastName var userProfilePhoto = contact.Photo as TLUserProfilePhoto; if (userProfilePhoto != null) { var location = userProfilePhoto.PhotoSmall as TLFileLocation; if (location != null) { var fileName = String.Format("{0}_{1}_{2}.jpg", location.VolumeId, location.LocalId, location.Secret); using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication()) { if (isoStore.FileExists(fileName)) { using (var file = isoStore.OpenFile(fileName, FileMode.Open, FileAccess.Read)) { await phoneContact.SetDisplayPictureAsync(file.AsInputStream()); } } else { fileManager.DownloadFile(location, userProfilePhoto, new TLInt(0)); delayedContact = contact; } } } } var emptyPhoto = contact.Photo as TLPhotoEmpty; if (emptyPhoto != null) { try { await phoneContact.SetDisplayPictureAsync(null); } catch (Exception ex) { } } var props = await phoneContact.GetPropertiesAsync(); var mobilePhone = contact.Phone.ToString(); if (mobilePhone.Length > 0) { props[KnownContactProperties.MobileTelephone] = mobilePhone.StartsWith("+") ? mobilePhone : "+" + mobilePhone; } var usernameContact = contact as IUserName; if (usernameContact != null) { var username = usernameContact.UserName.ToString(); if (username.Length > 0) { props[KnownContactProperties.Nickname] = username; } } await phoneContact.SaveAsync(); return(delayedContact); }
public async Task SyncContactsAsync(List <User> friendsList) { if (!this._synching && !this._deleting) { this._synching = true; friendsList = Enumerable.ToList <User>(Enumerable.Take <User>(friendsList, ContactsManager.MAX_FRIENDS_TO_SYNC)); long loggedInUserId = AppGlobalStateManager.Current.LoggedInUserId; try { SavedContacts savedContacts = await this.GetSavedList(); SavedContacts savedContacts2 = savedContacts; List <User> list = savedContacts2.SavedUsers; List <User> arg_1E7_0 = list; List <User> arg_1E7_1 = friendsList; Func <User, string> arg_1E7_2 = new Func <User, string>((u) => { return(u.uid.ToString()); }); Func <User, User, bool> arg_1E7_3 = new Func <User, User, bool>((u1, u2) => { return(ContactsManager.AreStringsEqualOrNullEmpty(u1.first_name, u2.first_name) && ContactsManager.AreStringsEqualOrNullEmpty(u1.last_name, u2.last_name) && ContactsManager.AreStringsEqualOrNullEmpty(u1.mobile_phone, u2.mobile_phone) && ContactsManager.AreStringsEqualOrNullEmpty(u1.home_phone, u2.home_phone) && ContactsManager.AreStringsEqualOrNullEmpty(u1.site, u2.site) && ContactsManager.AreStringsEqualOrNullEmpty(u1.bdate, u2.bdate) && ContactsManager.AreStringsEqualOrNullEmpty(u1.photo_max, u2.photo_max)); }); List <Tuple <User, User> > list2; List <User> list3; List <User> list4; ListUtils.GetListChanges <User>(arg_1E7_0, arg_1E7_1, arg_1E7_2, arg_1E7_3, out list2, out list3, out list4); Logger.Instance.Info("ContactsManager got {0} updated users, {1} new users, {2} deleted users", new object[] { list2.Count, list3.Count, list4.Count }); int count = list3.Count; int num = 0; if (loggedInUserId != AppGlobalStateManager.Current.LoggedInUserId || !AppGlobalStateManager.Current.GlobalState.SyncContacts) { await this.DoDeleteAllContactsAsync(); } else { ContactStore contactStore = await ContactStore.CreateOrOpenAsync(); await this.EnsureProvisioned(contactStore); StoredContact storedContact = await contactStore.FindContactByRemoteIdAsync(ContactsManager.GetRemoteId(AppGlobalStateManager.Current.GlobalState.LoggedInUser)); if (storedContact != null) { await this.SetContactProperties(storedContact, AppGlobalStateManager.Current.GlobalState.LoggedInUser, null); await storedContact.SaveAsync(); } contactStore.CreateContactQuery(); List <Tuple <User, User> > .Enumerator enumerator = list2.GetEnumerator(); //int num2; try { while (enumerator.MoveNext()) { Tuple <User, User> var_8_57F = enumerator.Current; User user = var_8_57F.Item2; User originalUser = var_8_57F.Item1; if (loggedInUserId != AppGlobalStateManager.Current.LoggedInUserId || !AppGlobalStateManager.Current.GlobalState.SyncContacts) { await this.DoDeleteAllContactsAsync(); return; } try { StoredContact storedContact2 = await contactStore.FindContactByRemoteIdAsync(ContactsManager.GetRemoteId(user)); await this.SetContactProperties(storedContact2, user, originalUser); if (storedContact2 != null) { await storedContact2.SaveAsync(); } storedContact2 = null; } catch (Exception var_9_7B5) { Logger.Instance.Error("Failed to update contact for user " + user.Name, var_9_7B5); } user = null; originalUser = null; } } finally { //if (num2 < 0) //{ enumerator.Dispose(); //} } enumerator = default(List <Tuple <User, User> > .Enumerator); List <User> .Enumerator enumerator2 = list3.GetEnumerator(); try { while (enumerator2.MoveNext()) { User user2 = enumerator2.Current; num++; if (loggedInUserId != AppGlobalStateManager.Current.LoggedInUserId || !AppGlobalStateManager.Current.GlobalState.SyncContacts) { await this.DoDeleteAllContactsAsync(); return; } try { if (await contactStore.FindContactByRemoteIdAsync(ContactsManager.GetRemoteId(user2)) == null)//todo:bug? { Stopwatch stopwatch = Stopwatch.StartNew(); this.FireSyncStatusChanged(num, count); Logger.Instance.Info("ContactsManager begin creating user", new object[0]); StoredContact storedContact3 = new StoredContact(contactStore); await this.SetContactProperties(storedContact3, user2, null); await storedContact3.SaveAsync(); Logger.Instance.Info("ContactsManager end creating user", new object[0]); stopwatch.Stop(); long var_11_AF3 = 500L - stopwatch.ElapsedMilliseconds; if (var_11_AF3 > 0L) { await Task.Delay((int)var_11_AF3); } stopwatch = null; storedContact3 = null; } list.Add(user2); } catch (Exception var_12_B82) { Logger.Instance.Error("Failed to create contact for user " + user2.Name, var_12_B82); } user2 = null; } } finally { //if (num2 < 0) //{ enumerator2.Dispose(); //} } enumerator2 = default(List <User> .Enumerator); enumerator2 = list4.GetEnumerator(); try { while (enumerator2.MoveNext()) { User user3 = enumerator2.Current; if (loggedInUserId != AppGlobalStateManager.Current.LoggedInUserId || !AppGlobalStateManager.Current.GlobalState.SyncContacts) { await this.DoDeleteAllContactsAsync(); return; } try { StoredContact var_13_D35 = await contactStore.FindContactByRemoteIdAsync(ContactsManager.GetRemoteId(user3)); if (var_13_D35 != null) { await contactStore.DeleteContactAsync(var_13_D35.Id); } list.Remove(user3); } catch (Exception var_14_DBF) { Logger.Instance.Error("Failed to delete contact for user " + user3.Name, var_14_DBF); } user3 = null; } } finally { //if (num2 < 0) //{ enumerator2.Dispose(); //} } enumerator2 = default(List <User> .Enumerator); savedContacts2.SyncedDate = DateTime.UtcNow; await this.EnsurePersistSavedContactsAsync(); savedContacts2 = null; list = null; list4 = null; list3 = null; list2 = null; contactStore = null; storedContact = null; } } catch (Exception var_15_ECB) { Logger.Instance.Error("Failed to sync contacts. ", var_15_ECB); } finally { //int num2; //if (num2 < 0) //{ this._synching = false; this.FireSyncStatusChanged(0, 0); //} } } }
public async void AddContact(string remoteId, string givenName, string familyName, string username, String avatar, String url) { ContactStore store = await ContactStore.CreateOrOpenAsync(); try { if (await store.FindContactByRemoteIdAsync(remoteId) == null) { StoredContact contact = new StoredContact(store); contact.RemoteId = remoteId; contact.GivenName = givenName; contact.FamilyName = familyName; contact.DisplayName = remoteId; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(avatar)); HttpWebResponse webResponse = await request.GetResponseAsync() as HttpWebResponse; MemoryStream memoryStream = new MemoryStream(); webResponse.GetResponseStream().CopyTo(memoryStream); IRandomAccessStream stream = await ConvertToRandomAccessStream(memoryStream); IDictionary <string, object> props = await contact.GetPropertiesAsync(); props.Add(KnownContactProperties.Nickname, username); props.Add(KnownContactProperties.Url, url); IDictionary <string, object> extprops = await contact.GetExtendedPropertiesAsync(); extprops.Add("Codename", username); extprops.Add("ProfilePic", avatar); await contact.SetDisplayPictureAsync(stream); await contact.SaveAsync(); } else { StoredContact contact = await store.FindContactByRemoteIdAsync(remoteId); IDictionary <string, object> extprops = await contact.GetExtendedPropertiesAsync(); if (!extprops.Values.Contains(avatar)) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(avatar)); HttpWebResponse webResponse = await request.GetResponseAsync() as HttpWebResponse; MemoryStream memoryStream = new MemoryStream(); webResponse.GetResponseStream().CopyTo(memoryStream); IRandomAccessStream stream = await ConvertToRandomAccessStream(memoryStream); await contact.SetDisplayPictureAsync(stream); extprops.Remove("ProfilePic"); extprops.Add("ProfilePic", avatar); await contact.SaveAsync(); } } } catch (WebException) { } }