private async Task <ErrorBase> LoadNextSearchUser(string query, CancellationToken ct)
        {
            var request = new SearchWithQueryModel(query)
            {
                Limit  = ItemsLimit,
                Offset = OffsetUrl,
                Login  = AppSettings.User.Login
            };

            var response = await Api.SearchUser(request, ct);

            if (response.IsSuccess)
            {
                var result = response.Result.Results;
                if (result.Count > 0)
                {
                    lock (Items)
                    {
                        Items.AddRange(Items.Count == 0 ? result : result.Skip(1));
                        CashPresenterManager.Add(Items.Count == 0 ? result : result.Skip(1));
                    }

                    OffsetUrl = result.Last().Author;
                }

                if (result.Count < Math.Min(ServerMaxCount, ItemsLimit))
                {
                    IsLastReaded = true;
                }
                NotifySourceChanged(nameof(TryLoadNextSearchUser), true);
            }
            return(response.Error);
        }
Exemplo n.º 2
0
        private async Task <Exception> Flag(Post post, CancellationToken ct)
        {
            var wasVote  = post.Vote;
            var request  = new VoteModel(AppSettings.User.UserInfo, post, post.Flag ? VoteType.Down : VoteType.Flag);
            var response = await Api.Vote(request, ct);

            if (response.IsSuccess)
            {
                if (post.IsComment)
                {
                    ChangeFlag(post, wasVote);
                }
                else
                {
                    CashPresenterManager.Add(response.Result);
                }
            }
            else if (response.Exception is RequestException requestException)
            {
                //TODO:KOA: bad solution...
                if (requestException.RawResponse.Contains(Constants.VotedInASimilarWaySteem) ||
                    requestException.RawResponse.Contains(Constants.VotedInASimilarWayGolos))
                {
                    response.Exception = null;
                    ChangeFlag(post, wasVote);
                }
            }
            return(response.Exception);
        }
        private async Task <ErrorBase> Flag(Post post, CancellationToken ct)
        {
            var wasVote  = post.Vote;
            var request  = new VoteModel(AppSettings.User.UserInfo, post, post.Flag ? VoteType.Down : VoteType.Flag);
            var response = await Api.Vote(request, ct);

            if (response.IsSuccess)
            {
                if (post.IsComment)
                {
                    ChangeFlag(post, wasVote);
                }
                else
                {
                    CashPresenterManager.Add(response.Result);
                }
            }
            else if (response.Error is BlockchainError &&
                     (response.Error.Message.Contains(Constants.VotedInASimilarWaySteem) || response.Error.Message.Contains(Constants.VotedInASimilarWayGolos))) //TODO:KOA: unstable solution
            {
                response.Error = null;
                ChangeFlag(post, wasVote);
            }
            return(response.Error);
        }
Exemplo n.º 4
0
        protected bool ResponseProcessing(OperationResult <ListResponse <Post> > response, int itemsLimit, out ErrorBase error, string sender, bool isNeedClearItems = false, bool enableEmptyMedia = false)
        {
            error = null;
            if (response == null)
            {
                return(false);
            }

            if (response.IsSuccess)
            {
                var results = response.Result.Results;
                if (results.Count > 0)
                {
                    var isAdded = false;
                    lock (Items)
                    {
                        if (isNeedClearItems)
                        {
                            Clear(false);
                        }

                        foreach (var item in results)
                        {
                            if (User.PostBlackList.Contains(item.Url))
                            {
                                continue;
                            }

                            if (!Items.Any(itm => itm.Url.Equals(item.Url, StringComparison.OrdinalIgnoreCase)) &&
                                (enableEmptyMedia || IsValidMedia(item)))
                            {
                                var refItem = CashPresenterManager.Add(item);
                                Items.Add(refItem);
                                isAdded = true;
                            }
                        }
                    }

                    if (isAdded)
                    {
                        OffsetUrl = response.Result.Offset;
                    }
                    else if (!string.Equals(OffsetUrl, response.Result.Offset, StringComparison.OrdinalIgnoreCase))
                    {
                        OffsetUrl = response.Result.Offset;
                        return(true);
                    }

                    NotifySourceChanged(sender, isAdded);
                }
                if (results.Count < Math.Min(ServerMaxCount, itemsLimit))
                {
                    IsLastReaded = true;
                }
            }
            error = response.Error;
            return(false);
        }
Exemplo n.º 5
0
        private async Task <ErrorBase> LoadPostInfo(string url, CancellationToken ct)
        {
            var request = new NamedInfoModel(url)
            {
                Login = User.Login
            };

            var response = await Api.GetPostInfo(request, ct);

            if (response.IsSuccess)
            {
                PostInfo = response.Result;
                CashPresenterManager.Add(PostInfo);
                NotifySourceChanged(nameof(TryLoadPostInfo), true);
            }
            return(response.Error);
        }
        private async Task <ErrorBase> GetUserInfo(string user, CancellationToken ct)
        {
            var req = new UserProfileModel(user)
            {
                Login        = AppSettings.User.Login,
                ShowNsfw     = AppSettings.User.IsNsfw,
                ShowLowRated = AppSettings.User.IsLowRated
            };
            var response = await Api.GetUserProfile(req, ct);

            if (response.IsSuccess)
            {
                UserProfileResponse = response.Result;
                CashPresenterManager.Add(UserProfileResponse);
                NotifySourceChanged(nameof(TryGetUserInfo), true);
            }
            return(response.Error);
        }
        private async Task <ErrorBase> LoadNextUserFriends(string username, CancellationToken ct)
        {
            if (!FollowType.HasValue)
            {
                return(null);
            }

            var request = new UserFriendsModel(username, FollowType.Value)
            {
                Login  = AppSettings.User.Login,
                Offset = OffsetUrl,
                Limit  = ItemsLimit
            };

            var response = await Api.GetUserFriends(request, ct);

            if (response.IsSuccess)
            {
                var result = response.Result.Results;
                if (result.Count > 0)
                {
                    lock (Items)
                    {
                        Items.AddRange(Items.Count == 0 ? result : result.Skip(1));
                        CashPresenterManager.Add(Items.Count == 0 ? result : result.Skip(1));
                    }

                    OffsetUrl = result.Last().Author;
                }

                if (result.Count < Math.Min(ServerMaxCount, ItemsLimit))
                {
                    IsLastReaded = true;
                }
                NotifySourceChanged(nameof(TryLoadNextUserFriends), true);
            }

            return(response.Error);
        }
        protected Exception ResponseProcessing(OperationResult <Post> response, string sender)
        {
            if (response == null)
            {
                return(null);
            }

            if (response.IsSuccess)
            {
                var isAdded = false;
                var item    = response.Result;
                if (IsValidMedia(item))
                {
                    CashPresenterManager.Add(item);
                    PostInfo = item;
                    isAdded  = true;
                }

                NotifySourceChanged(sender, isAdded);
            }
            return(response.Exception);
        }
        private async Task <ErrorBase> LoadNextPostVoters(string url, CancellationToken ct)
        {
            if (!VotersType.HasValue)
            {
                return(null);
            }

            var request = new VotersModel(url, VotersType.Value)
            {
                Offset = OffsetUrl,
                Limit  = ItemsLimit,
                Login  = AppSettings.User.Login
            };

            var response = await Api.GetPostVoters(request, ct);

            if (response.IsSuccess)
            {
                var voters = response.Result.Results;
                if (voters.Count > 0)
                {
                    lock (Items)
                    {
                        Items.AddRange(Items.Count == 0 ? voters : voters.Skip(1));
                        CashPresenterManager.Add(Items.Count == 0 ? voters : voters.Skip(1));
                    }

                    OffsetUrl = voters.Last().Author;
                }

                if (voters.Count < Math.Min(ServerMaxCount, ItemsLimit))
                {
                    IsLastReaded = true;
                }
                NotifySourceChanged(nameof(TryLoadNextPostVoters), true);
            }
            return(response.Error);
        }