public async Task PullAsync(PullerSettings settings, CancellationToken ct) { // ReSharper disable once InconsistentlySynchronizedField logger.Debug($"Попытка сделать pull контента из источника"); OnPullInvoked(); try { Items.Clear(); var posts = await _contentPullerStrategy.GetAsync(WallHolder, settings, ct); lock (_locker) { Items.AddRange(posts); LastTimePulled = DateTimeOffset.Now; logger.Debug($"Pull удачный. Получено элементов - {Items?.Count}"); OnPullCompleted(new ContentPullerEventArgs { Successful = true, Items = Items }); } } catch (Exception ex) { // ReSharper disable once InconsistentlySynchronizedField logger.Debug(ex, "Ошибка при пуллинге контента. Очистка текущих элементов."); Items.Clear(); OnPullCompleted(new ContentPullerEventArgs { Successful = false }); } }
public async Task <IEnumerable <IPost> > GetAsync(IWallHolder wallHolder, PullerSettings settings, CancellationToken ct) { var postList = new List <IPost>(); postList.AddRange(await getPostsWithAnOffset(wallHolder.ID, 100, 0, ct)); postList.Sort((a, b) => a.Date.CompareTo(b.Date)); return(postList); }
public async Task <IEnumerable <IPost> > GetAsync(IWallHolder wallHolder, PullerSettings settings, CancellationToken ct) { var postList = new List <IPost>(); postList.AddRange(await getPostsOfPage(wallHolder.ID, ITEMS_PER_PAGE, 0)); postList.Sort((a, b) => b.Date.CompareTo(a.Date)); return(postList); }
public async Task <IEnumerable <IPost> > GetAsync(IWallHolder wallHolder, PullerSettings settings, CancellationToken ct) { var timePeriodSettings = settings as TimePeriodSettings; if (timePeriodSettings == null) { var noSettings = settings as NoPullerSettings; if (noSettings == null) { throw new VkException("Не предоставлены корректные настройки"); } } var days = timePeriodSettings?.Days ?? 1; var postList = new List <IPost>(); const int postsToPull = 25; int offset = 0; while (true) { postList.AddRange(await getPostsWithAnOffset(wallHolder.ID, postsToPull, offset, ct)); offset += postsToPull; if (postList.LastOrDefault().Date > days) { ; } } if (postList.Count == 100) { postList.AddRange(await getPostsWithAnOffset(wallHolder.ID, 50, 100, ct)); } postList.Sort((a, b) => a.Date.CompareTo(b.Date)); return(postList); }
public Task <IEnumerable <IPost> > GetAsync(IWallHolder wallHolder, PullerSettings settings) { return(GetAsync(wallHolder, settings, CancellationToken.None)); }
public async Task PullAsync(PullerSettings settings) { await PullAsync(settings, CancellationToken.None); }