public static List <ContactInfo> getContactList(JObject obj, Dictionary <string, List <ContactInfo> > new_contacts_by_id, bool isRefresh) { try { if ((obj == null) || HikeConstants.FAIL == (string)obj[HikeConstants.STAT]) { return(null); } JObject addressbook = (JObject)obj["addressbook"]; if (addressbook == null || new_contacts_by_id == null || new_contacts_by_id.Count == 0) { return(null); } bool isFavSaved = false; bool isPendingSaved = false; int hikeCount = 1, smsCount = 1; List <ContactInfo> msgToShow = null; List <string> msisdns = null; Dictionary <string, GroupInfo> allGroupsInfo = null; if (!isRefresh) { msgToShow = new List <ContactInfo>(5); msisdns = new List <string>(); } else // if refresh case load groups in cache { GroupManager.Instance.LoadGroupCache(); List <GroupInfo> gl = GroupTableUtils.GetAllGroups(); for (int i = 0; i < gl.Count; i++) { if (allGroupsInfo == null) { allGroupsInfo = new Dictionary <string, GroupInfo>(); } allGroupsInfo[gl[i].GroupId] = gl[i]; } } List <ContactInfo> server_contacts = new List <ContactInfo>(); IEnumerator <KeyValuePair <string, JToken> > keyVals = addressbook.GetEnumerator(); KeyValuePair <string, JToken> kv; int count = 0; int totalContacts = 0; while (keyVals.MoveNext()) { try { kv = keyVals.Current; JArray entries = (JArray)addressbook[kv.Key]; List <ContactInfo> cList = new_contacts_by_id[kv.Key]; for (int i = 0; i < entries.Count; ++i) { JObject entry = (JObject)entries[i]; string msisdn = (string)entry["msisdn"]; if (string.IsNullOrWhiteSpace(msisdn)) { count++; continue; } bool onhike = (bool)entry["onhike"]; ContactInfo cinfo = cList[i]; ContactInfo cn = new ContactInfo(kv.Key, msisdn, cinfo.Name, onhike, cinfo.PhoneNo); if (!isRefresh) // this is case for new installation { if (cn.Msisdn != (string)App.appSettings[App.MSISDN_SETTING]) // do not add own number { if (onhike && hikeCount <= 3 && !msisdns.Contains(cn.Msisdn)) { msisdns.Add(cn.Msisdn); msgToShow.Add(cn); hikeCount++; } if (!onhike && smsCount <= 2 && cn.Msisdn.StartsWith("+91") && !msisdns.Contains(cn.Msisdn)) // allow only indian numbers for sms { msisdns.Add(cn.Msisdn); msgToShow.Add(cn); smsCount++; } } } else // this is refresh contacts case { if (App.ViewModel.ConvMap.ContainsKey(cn.Msisdn)) // update convlist { try { App.ViewModel.ConvMap[cn.Msisdn].ContactName = cn.Name; } catch (Exception e) { Debug.WriteLine("REFRESH CONTACTS :: Update contact exception " + e.StackTrace); } } else // fav and pending case { ConversationListObject c = App.ViewModel.GetFav(cn.Msisdn); if (c != null) // this user is in favs { c.ContactName = cn.Name; MiscDBUtil.SaveFavourites(c); isFavSaved = true; } else { c = App.ViewModel.GetPending(cn.Msisdn); if (c != null) { c.ContactName = cn.Name; isPendingSaved = true; } } } GroupManager.Instance.RefreshGroupCache(cn, allGroupsInfo); } server_contacts.Add(cn); totalContacts++; } } catch (Exception ex) { Debug.WriteLine("AccountUtils : getContactList : Exception : " + ex.StackTrace); } } if (isFavSaved) { MiscDBUtil.SaveFavourites(); } if (isPendingSaved) { MiscDBUtil.SavePendingRequests(); } msisdns = null; Debug.WriteLine("Total contacts with no msisdn : {0}", count); Debug.WriteLine("Total contacts inserted : {0}", totalContacts); if (!isRefresh) { App.WriteToIsoStorageSettings(HikeConstants.AppSettings.CONTACTS_TO_SHOW, msgToShow); } return(server_contacts); } catch (ArgumentException) { return(null); } catch (Exception e) { return(null); } }
private void initPageBasedOnState() { groupId = PhoneApplicationService.Current.State[HikeConstants.GROUP_ID_FROM_CHATTHREAD] as string; groupName = PhoneApplicationService.Current.State[HikeConstants.GROUP_NAME_FROM_CHATTHREAD] as string; gi = GroupTableUtils.getGroupInfoForId(groupId); if (gi == null) { return; } if (!App.IS_TOMBSTONED) { groupImage.Source = App.ViewModel.ConvMap[groupId].AvatarImage; } else { string grpId = groupId.Replace(":", "_"); byte[] avatar = MiscDBUtil.getThumbNailForMsisdn(grpId); if (avatar == null) { groupImage.Source = UI_Utils.Instance.getDefaultGroupAvatar(grpId); } else { MemoryStream memStream = new MemoryStream(avatar); memStream.Seek(0, SeekOrigin.Begin); BitmapImage empImage = new BitmapImage(); empImage.SetSource(memStream); groupImage.Source = empImage; } GroupManager.Instance.LoadGroupParticipants(groupId); } if (Utils.isDarkTheme()) { addUserImage.Source = new BitmapImage(new Uri("images/add_users_white.png", UriKind.Relative)); } this.groupNameTxtBox.Text = groupName; List <GroupParticipant> hikeUsersList = new List <GroupParticipant>(); List <GroupParticipant> smsUsersList = GetHikeAndSmsUsers(GroupManager.Instance.GroupCache[groupId], hikeUsersList); GroupParticipant self = new GroupParticipant(groupId, (string)App.appSettings[App.ACCOUNT_NAME], App.MSISDN, true); hikeUsersList.Add(self); hikeUsersList.Sort(); for (int i = 0; i < (hikeUsersList != null ? hikeUsersList.Count : 0); i++) { GroupParticipant gp = hikeUsersList[i]; if (gi.GroupOwner == gp.Msisdn) { gp.IsOwner = true; } if (gi.GroupOwner == (string)App.appSettings[App.MSISDN_SETTING] && gp.Msisdn != gi.GroupOwner) // if this user is owner { gp.RemoveFromGroup = Visibility.Visible; } else { gp.RemoveFromGroup = Visibility.Collapsed; } groupMembersOC.Add(gp); } for (int i = 0; i < (smsUsersList != null ? smsUsersList.Count : 0); i++) { GroupParticipant gp = smsUsersList[i]; if (gi.GroupOwner == (string)App.appSettings[App.MSISDN_SETTING]) // if this user is owner { gp.RemoveFromGroup = Visibility.Visible; } else { gp.RemoveFromGroup = Visibility.Collapsed; } groupMembersOC.Add(gp); smsUsers++; } this.inviteBtn.IsEnabled = EnableInviteBtn; this.groupChatParticipants.ItemsSource = groupMembersOC; registerListeners(); }