コード例 #1
0
 private async Task MakeFeed(DataUriType type, HttpMultipartFormDataContent content)
 {
     try
     {
         if (type == DataUriType.CreateFeed)
         {
             if (await DataHelper.PostDataAsync(type, content) != null)
             {
                 SendSuccessful();
             }
         }
         else
         {
             if (await DataHelper.PostDataAsync(type, content, FeedId) != null)
             {
                 SendSuccessful();
             }
         }
     }
     catch (CoolapkMessageException cex)
     {
         UIHelper.ShowMessage(cex.Message);
         if (cex.MessageStatus == CoolapkMessageException.RequestCaptcha)
         {
             var dialog = new CaptchaDialog();
             await dialog.ShowAsync();
         }
     }
 }
コード例 #2
0
        public static async Task <T> GetDataAsync <T>(DataUriType dataUriType, bool forceRefresh = false, params object[] args)
        {
            string uri    = string.Format(GetUriStringTemplate(dataUriType), args);
            string json   = string.Empty;
            T      result = default;

            if (forceRefresh || !responseCache.ContainsKey(uri))
            {
                json = await GetJson(uri);

                result = await Task.Run(() => JsonConvert.DeserializeObject <T>(json, new JsonSerializerSettings
                {
                    Error = (_, e) =>
                    {
                        if (!string.IsNullOrEmpty(json))
                        {
                            var o = JsonConvert.DeserializeObject <Models.Json.MessageModel.Rootobject>(json, new JsonSerializerSettings {
                                Error = (__, ee) => ee.ErrorContext.Handled = true
                            });
                            if (o != null)
                            {
                                throw new CoolapkMessageException(o.Message);
                            }
                        }
                        e.ErrorContext.Handled = true;
                    }
                }));

                if (responseCache.ContainsKey(uri))
                {
                    responseCache[uri] = result;

                    int i = uri.IndexOf("page=");
                    if (i != -1)
                    {
                        string u = uri.Substring(i);

                        var needDelete = (from item in responseCache
                                          where item.Key != uri
                                          where item.Key.IndexOf(u, StringComparison.Ordinal) == 0
                                          select item).ToArray();
                        foreach (var item in needDelete)
                        {
                            responseCache.Remove(item.Key);
                        }
                    }
                }
                else
                {
                    responseCache.Add(uri, result);
                }
            }
            else
            {
                result = (T)responseCache[uri];
            }

            return(result);
        }
コード例 #3
0
        /// <summary>
        ///     从服务器中获取数据。
        /// </summary>
        /// <param name="type">
        ///     要获取的数据的类型。
        /// </param>
        /// <param name="args">
        ///     一个参数数组,其中的内容用于替换格式符号。
        /// </param>
        public static async Task <JToken> GetDataAsync(DataUriType type, bool forceRefresh, params object[] args)
        {
            string uri = string.Format(GetUriStringTemplate(type), args);
            string json;

            if (forceRefresh || !responseCache.ContainsKey(uri))
            {
                json = await GetJson(uri);

                if (responseCache.ContainsKey(uri))
                {
                    responseCache[uri] = json;

                    int i = uri.IndexOf("page=");
                    if (i != -1)
                    {
                        string u = uri.Substring(i);

                        var needDelete = (from item in responseCache
                                          where item.Key != uri
                                          where item.Key.IndexOf(u, StringComparison.Ordinal) == 0
                                          select item).ToArray();
                        foreach (var item in needDelete)
                        {
                            responseCache.Remove(item.Key);
                        }
                    }
                }
                else
                {
                    responseCache.Add(uri, json);
                }
            }
            else
            {
                json = responseCache[uri] as string;
            }
            var    o     = JObject.Parse(json);
            JToken token = null;

            if (!string.IsNullOrEmpty(json) &&
                !o.TryGetValue("data", out token) &&
                o.TryGetValue("message", out _))
            {
                throw new CoolapkMessageException(o);
            }
            else
            {
                return(token);
            }
        }
コード例 #4
0
        /// <summary>
        /// 从服务器中获取数据。
        /// </summary>
        /// <param name="dataUriType">要获取的数据的类型。</param>
        /// <param name="args">一个参数数组,其中的内容用于替换格式符号。</param>
        public static async Task <JToken> GetData(DataUriType dataUriType, params object[] args)
        {
            var json = await NetworkHelper.GetJson(string.Format(GetUriStringTemplate(dataUriType), args));

            JToken token = null;
            var    o     = JObject.Parse(json);

            if (!string.IsNullOrEmpty(json) &&
                !o.TryGetValue("data", out token) &&
                o.TryGetValue("message", out JToken value))
            {
                throw new Exceptions.ServerException($"{value}");
            }
            return(token);
        }
コード例 #5
0
ファイル: DataHelper.cs プロジェクト: longzekai/Coolapk-UWP
        public static async Task <T> GetDataAsync <T>(DataUriType dataUriType, bool forceRefresh = false, params object[] args)
        {
            string uri    = string.Format(GetUriStringTemplate(dataUriType), args);
            string json   = string.Empty;
            T      result = default;

            if (forceRefresh || !responseCache.ContainsKey(uri))
            {
                json = await NetworkHelper.GetJson(uri);

                result = await Task.Run(() => JsonConvert.DeserializeObject <T>(json, new JsonSerializerSettings
                {
                    Error = (_, e) =>
                    {
                        if (!string.IsNullOrEmpty(json))
                        {
                            var o = JsonConvert.DeserializeObject <Models.Json.MessageModel.Rootobject>(json, new JsonSerializerSettings {
                                Error = (__, ee) => ee.ErrorContext.Handled = true
                            });
                            if (o != null)
                            {
                                throw new CoolapkMessageException(o.Message);
                            }
                        }
                        e.ErrorContext.Handled = true;
                    }
                }));

                if (responseCache.ContainsKey(uri))
                {
                    responseCache[uri] = result;
                }
                else
                {
                    responseCache.Add(uri, result);
                }
            }
            else
            {
                result = (T)responseCache[uri];
            }

            return(result);
        }
コード例 #6
0
        public static async Task <JToken> PostDataAsync(DataUriType type, Windows.Web.Http.IHttpContent content, params object[] args)
        {
            var uri  = string.Format(GetUriStringTemplate(type), args);
            var json = await PostAsync(uri, content);

            var    o     = JObject.Parse(json);
            JToken token = null;

            if (!string.IsNullOrEmpty(json) &&
                !o.TryGetValue("data", out token) &&
                o.TryGetValue("message", out _))
            {
                throw new CoolapkMessageException(o);
            }
            else
            {
                return(token);
            }
        }
コード例 #7
0
ファイル: DataHelper.cs プロジェクト: longzekai/Coolapk-UWP
        /// <summary>
        ///     从服务器中获取数据。
        /// </summary>
        /// <param name="type">
        ///     要获取的数据的类型。
        /// </param>
        /// <param name="args">
        ///     一个参数数组,其中的内容用于替换格式符号。
        /// </param>
        public static async Task <JToken> GetDataAsync(DataUriType type, params object[] args)
        {
            bool   forceRefresh = false;
            string uri          = string.Format(GetUriStringTemplate(type), args);
            string json;

            if (forceRefresh || !responseCache.ContainsKey(uri))
            {
                json = await NetworkHelper.GetJson(uri);

                if (responseCache.ContainsKey(uri))
                {
                    responseCache[uri] = json;
                }
                else
                {
                    responseCache.Add(uri, json);
                }
            }
            else
            {
                json = responseCache[uri] as string;
            }
            var    o     = JObject.Parse(json);
            JToken token = null;

            if (!string.IsNullOrEmpty(json) &&
                !o.TryGetValue("data", out token) &&
                o.TryGetValue("message", out JToken value))
            {
                throw new CoolapkMessageException(value);
            }
            else
            {
                return(token);
            }
        }
コード例 #8
0
        private static string GetUriStringTemplate(DataUriType type)
        {
            switch (type)
            {
            case DataUriType.CheckLoginInfo: return("/account/checkLoginInfo");

            case DataUriType.CreateFeed: return("/feed/createFeed");

            case DataUriType.CreateFeedReply: return("/feed/reply?id={0}&type=feed");

            case DataUriType.CreateReplyReply: return("/feed/reply?id={0}&type=reply");

            case DataUriType.GetAnswers: return("/question/answerList?id={0}&sort={1}&page={2}{3}{4}");

            case DataUriType.GetDyhDetail: return("/dyh/detail?dyhId={0}");

            case DataUriType.GetDyhFeeds: return("/dyhArticle/list?dyhId={0}&type={1}&page={2}{3}{4}");

            case DataUriType.GetFeedDetail: return("/feed/detail?id={0}");

            case DataUriType.GetFeedReplies: return("/feed/replyList?id={0}&listType={1}&page={2}{3}&discussMode=1&feedType=feed&blockStatus=0&fromFeedAuthor={4}");

            case DataUriType.GetHotReplies: return("/feed/hotReplyList?id={0}&page={1}{2}&discussMode=1");

            case DataUriType.GetIndexPage: return("{0}{1}page={2}");

            case DataUriType.GetIndexPageNames: return("/main/init");

            case DataUriType.GetLikeList: return("/feed/likeList?id={0}&listType=lastupdate_desc&page={1}{2}");

            case DataUriType.GetMyPageCard: return("/account/loadConfig?key=my_page_card_config");

            case DataUriType.GetNotifications: return("/notification/{0}?page={1}{2}{3}");

            case DataUriType.GetNotificationNumbers: return("/notification/checkCount");

            case DataUriType.GetReplyReplies: return("/feed/replyList?id={0}&listType=&page={1}{2}&discussMode=0&feedType=feed_reply&blockStatus=0&fromFeedAuthor=0");

            case DataUriType.GetSearchWords: return("/search/suggestSearchWordsNew?searchValue={0}&type=app");

            case DataUriType.GetShareList: return("/feed/forwardList?id={0}&type=feed&page={1}");

            case DataUriType.GetTagDetail: return("/topic/newTagDetail?tag={0}");

            case DataUriType.GetTagFeeds: return("/topic/tagFeedList?tag={0}&page={1}{2}{3}&listType={4}&blockStatus=0");

            case DataUriType.GetUserFeeds: return("/user/feedList?uid={0}&page={1}{2}{3}");

            case DataUriType.GetUserHistory: return("/user/hitHistoryList?page={0}{1}{2}");

            case DataUriType.GetUserList: return("/user/{0}?uid={1}&page={2}{3}{4}");

            case DataUriType.GetUserRecentHistory: return("/user/recentHistoryList?page={0}{1}{2}");

            case DataUriType.GetUserSpace: return("/user/space?uid={0}");

            case DataUriType.GetUserProfile: return("/user/profile?uid={0}");

            case DataUriType.OperateFollow: return("/user/follow?uid={0}");

            case DataUriType.OperateLike: return("/feed/like{0}?id={1}&detail=0");

            case DataUriType.OperateUnfollow: return("/user/follow?uid={0}");

            case DataUriType.OperateUnlike: return("/feed/unlike{0}?id={1}&detail=0");

            case DataUriType.RequestValidate: return("/account/requestValidate");

            case DataUriType.SearchFeeds: return("/search?type=feed&feedType={0}&sort={1}&searchValue={2}&page={3}{4}&showAnonymous=-1");

            case DataUriType.SearchTags: return("/search?type=feedTopic&searchValue={0}&page={1}{2}&showAnonymous=-1");

            case DataUriType.SearchUsers: return("/search?type=user&searchValue={0}&page={1}{2}&showAnonymous=-1");

            case DataUriType.SearchWords: return("/search/suggestSearchWordsNew?searchValue={0}&type=app");

            default: throw new ArgumentException($"{typeof(DataUriType).FullName}值错误");
            }
        }
コード例 #9
0
        static string GetUriStringTemplate(DataUriType type)
        {
            switch (type)
            {
            case DataUriType.CheckLoginInfo: return("/account/checkLoginInfo");

            case DataUriType.GetAnswers: return("/question/answerList?id={0}&sort={1}&page={2}{3}{4}");

            case DataUriType.GetDyhDetail: return("/dyh/detail?dyhId={0}");

            case DataUriType.GetDyhFeeds: return("/dyhArticle/list?dyhId={0}&type={1}&page={2}{3}{4}");

            case DataUriType.GetFeedDetail: return("/feed/detail?id={0}");

            case DataUriType.GetFeedReplies: return("/feed/replyList?id={0}&listType={1}&page={2}{3}{4}&discussMode=1&feedType=feed&blockStatus=0&fromFeedAuthor={5}");

            case DataUriType.GetHotReplies: return("/feed/hotReplyList?id={0}&page={1}{2}&discussMode=1");

            case DataUriType.GetLikeList: return("/feed/likeList?id={0}&listType=lastupdate_desc&page={1}{2}{3}");

            case DataUriType.GetIndexPage: return("{0}{1}page={2}");

            case DataUriType.GetIndexPageNames: return("/main/init");

            case DataUriType.GetNotifications: return("/notification/{0}?page={1}{2}{3}");

            case DataUriType.GetNotificationNumbers: return("/notification/checkCount");

            case DataUriType.GetReplyReplies: return("/feed/replyList?id={0}&listType=&page={1}{2}&discussMode=0&feedType=feed_reply&blockStatus=0&fromFeedAuthor=0");

            case DataUriType.GetSearchWords: return("/search/suggestSearchWordsNew?searchValue={0}&type=app");

            case DataUriType.GetShareList: return("/feed/forwardList?id={0}&type=feed&page={1}");

            case DataUriType.GetTagDetail: return("/topic/newTagDetail?tag={0}");

            case DataUriType.GetTagFeeds: return("/topic/tagFeedList?tag={0}&page={1}{2}{3}&listType={4}&blockStatus=0");

            case DataUriType.GetUserFeeds: return("/user/feedList?uid={0}&page={1}{2}{3}");

            case DataUriType.GetUserList: return("/user/{0}?uid={1}&page={2}{3}{4}");

            case DataUriType.GetUserSpace: return("/user/space?uid={0}");

            case DataUriType.GetUserProfile: return("/user/profile?uid={0}");

            case DataUriType.OperateFollow: return("/user/follow?uid={0}");

            case DataUriType.OperateLike: return("/feed/like{0}?id={1}&detail=0");

            case DataUriType.OperateUnfollow: return("/user/follow?uid={0}");

            case DataUriType.OperateUnlike: return("/feed/unlike{0}?id={1}&detail=0");

            case DataUriType.SearchFeeds: return("/search?type=feed&feedType={0}&sort={1}&searchValue={2}&page={3}{4}&showAnonymous=-1");

            case DataUriType.SearchTags: return("/search?type=feedTopic&searchValue={0}&page={1}{2}&showAnonymous=-1");

            case DataUriType.SearchUsers: return("/search?type=user&searchValue={0}&page={1}{2}&showAnonymous=-1");

            default: return(string.Empty);
            }
        }