示例#1
0
        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);
            }
        }
示例#2
0
        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();
        }