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."); }
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); }
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); }
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)); }