Ejemplo n.º 1
0
        /// <summary>
        /// ローカルもしくはサーバー取得に失敗した場合Falseが返されます。Falseでもデーターが存在する可能性があります。
        /// </summary>
        public async Task <bool> Get()
        {
            if (!await GetFromLocal()) // ローカルから取得できない場合サーバーからの情報をすべて利用
            {
                if (FriendProfiles.Count <= 0)
                {
                    return(false);
                }
                UserProfiles = new List <UserProfile>();

                var my = await MeChat.Connection.GetUserProfile(MeChatHost.MeChat.Config.Id);

                if (my == null)
                {
                    return(false);
                }
                UserProfiles.Add(my);

                var res = await MeChat.Connection.GetUserProfiles(FriendProfiles.ConvertAll <string>((x) => {
                    return(x.Id);
                }).ToArray());

                if (res == null)
                {
                    return(false);
                }
                UserProfiles.AddRange(res);
                await MeChat.Filer.SaveUserProfiles(UserProfiles.ToArray());

                return(true);
            }
            List <string> reqIdList = new List <string>(); //サーバーに要求するIDリスト

            foreach (var f in FriendProfiles)
            {
                if (!UserProfiles.Exists(x => x.Id == f.Id))
                {
                    reqIdList.Add(f.Id); // ローカルに存在しないIDをリストに追加
                }
            }
            var get = await MeChat.Connection.GetUserProfiles(reqIdList.ToArray());

            if (get == null)
            {
                return(false);
            }

            Debug.Log("Add : " + get.Length + " items. in UserProfiles.GET()");
            UserProfiles.AddRange(get);
            return(true);
        }