Exemple #1
0
        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  = 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));

                    OffsetUrl = voters.Last().Author;
                }

                if (voters.Count < Math.Min(ServerMaxCount, ItemsLimit))
                {
                    IsLastReaded = true;
                }
                NotifySourceChanged(nameof(TryLoadNextPostVoters), true);
            }
            return(response.Error);
        }
        private void GetPostVotersTest(StringBuilder sb, int num)
        {
            sb.Append($"{num}) GetPostVotersTest : ");
            StepFinished?.Invoke(sb.ToString());

            var limit = 3;

            var testPost = GetFirstPostWhere(sb, PostType.Top, i => i.Children >= limit + limit);

            if (testPost == null)
            {
                return;
            }

            var request = new VotersModel(testPost.Url, VotersType.All)
            {
                Limit = limit, Login = _user.Login
            };
            var response = _api.GetPostVoters(request, CancellationToken.None).Result;

            if (IsError1(sb, limit, response, response.Result.Results.Count))
            {
                return;
            }

            request.Offset = response.Result.Results.Last().Author;
            response       = _api.GetPostVoters(request, CancellationToken.None).Result;

            if (IsError2(sb, limit, response, request.Offset))
            {
                return;
            }

            sb.AppendLine("pass.");
        }
Exemple #3
0
        public async Task GetPostVotersCancelTestTest(KnownChains apiName, string url)
        {
            try
            {
                var count   = 40;
                var request = new VotersModel(url, VotersType.All)
                {
                    Limit  = count,
                    Offset = string.Empty
                };

                var token    = new CancellationTokenSource(50);
                var response = await Api[apiName].GetPostVoters(request, token.Token);
                Assert.IsTrue(response.IsSuccess);
                Assert.IsTrue(response.Result.Count == count);
            }
            catch (OperationCanceledException)
            {
                Assert.Pass();
                // go up
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
        public async Task <OperationResult <PromoteResponse> > FindPromoteBot(PromoteRequest promoteModel)
        {
            if (!EnableRead)
            {
                return(null);
            }

            var botsResponse = await HttpClient.Get <List <BidBot> >("https://steembottracker.net/bid_bots", CancellationToken.None);

            if (!botsResponse.IsSuccess)
            {
                return(new OperationResult <PromoteResponse>(botsResponse.Exception));
            }

            var priceResponse = await HttpClient.Get <Price>("https://postpromoter.net/api/prices", CancellationToken.None);

            if (!priceResponse.IsSuccess)
            {
                return(new OperationResult <PromoteResponse>(priceResponse.Exception));
            }

            var steemToUSD = priceResponse.Result.SteemPrice;
            var sbdToUSD   = priceResponse.Result.SbdPrice;

            var votersModel = new VotersModel(promoteModel.PostToPromote.Url, VotersType.Likes);
            var usersResult = await GetPostVoters(votersModel, CancellationToken.None);

            if (!usersResult.IsSuccess)
            {
                return(new OperationResult <PromoteResponse>(usersResult.Exception));
            }


            var postAge = (DateTime.Now - promoteModel.PostToPromote.Created).TotalDays;

            var suitableBot = botsResponse.Result
                              .Where(x => CheckBot(x, postAge, promoteModel, steemToUSD, sbdToUSD, usersResult.Result.Results))
                              .OrderBy(x => x.Next)
                              .FirstOrDefault();

            if (suitableBot == null)
            {
                return(new OperationResult <PromoteResponse>(new ValidationException()));
            }

            var response = await SearchUser(new SearchWithQueryModel(suitableBot.Name), CancellationToken.None);

            if (!response.IsSuccess)
            {
                return(new OperationResult <PromoteResponse>(response.Exception));
            }

            var promoteResponse = new PromoteResponse(response.Result.Results.First(), TimeSpan.FromMilliseconds(suitableBot.Next.Value));

            return(new OperationResult <PromoteResponse>(promoteResponse));
        }
        public async Task GetPostVotersTest(KnownChains apiName, string url)
        {
            var request = new VotersModel(url, VotersType.All)
            {
                Limit  = 40,
                Offset = string.Empty,
            };

            var result = await Gateway[apiName].GetPostVoters(request, CancellationToken.None);

            Assert.IsTrue(result.IsSuccess, result.Error?.Message);
        }
Exemple #6
0
        public async Task GetPostVotersTest(KnownChains apiName, string url)
        {
            var count   = 40;
            var request = new VotersModel(url, VotersType.All)
            {
                Limit  = count,
                Offset = string.Empty,
            };
            var response = await Api[apiName].GetPostVoters(request, CancellationToken.None);

            AssertResult(response);
            Assert.IsTrue(response.Result.Count == count);
        }
Exemple #7
0
        public async Task GetPostVotersTest(KnownChains apiName)
        {
            var request = new PostsModel(PostType.Hot);
            var result  = await Gateway[apiName].GetPosts(request, CancellationToken.None);

            var votersModel = new VotersModel(result.Result.Results.First(i => i.NetLikes > 0).Url, VotersType.All)
            {
                Limit  = 40,
                Offset = string.Empty,
            };

            var operationResult = await Gateway[apiName].GetPostVoters(votersModel, CancellationToken.None);

            Assert.IsTrue(operationResult.IsSuccess, result.Error?.Message);
        }
        public async Task <OperationResult <ListResponse <UserFriend> > > GetPostVoters(VotersModel model, CancellationToken token)
        {
            if (!EnableRead)
            {
                return(null);
            }

            var results = Validate(model);

            if (results.Any())
            {
                return(new OperationResult <ListResponse <UserFriend> >(new ValidationError(string.Join(Environment.NewLine, results.Select(i => i.ErrorMessage)))));
            }

            var parameters = new Dictionary <string, object>();

            AddOffsetLimitParameters(parameters, model.Offset, model.Limit);
            AddVotersTypeParameters(parameters, model.Type);
            if (!string.IsNullOrEmpty(model.Login))
            {
                AddLoginParameter(parameters, model.Login);
            }

            var endpoint = $"post/{model.Url}/voters";

            return(await Gateway.Get <ListResponse <UserFriend> >(GatewayVersion.V1P1, endpoint, parameters, token));
        }
        public async Task <OperationResult <ListResponse <UserFriend> > > GetPostVoters(VotersModel model, CancellationToken token)
        {
            if (!EnableRead)
            {
                return(null);
            }

            var results = Validate(model);

            if (results != null)
            {
                return(new OperationResult <ListResponse <UserFriend> >(results));
            }

            var parameters = new Dictionary <string, object>();

            AddOffsetLimitParameters(parameters, model.Offset, model.Limit);
            AddVotersTypeParameters(parameters, model.Type);
            if (!string.IsNullOrEmpty(model.Login))
            {
                AddLoginParameter(parameters, model.Login);
            }

            var endpoint = $"{BaseUrl}/{GatewayVersion.V1P1}/post/{model.Url}/voters";

            return(await HttpClient.Get <ListResponse <UserFriend> >(endpoint, parameters, token));
        }