Example #1
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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));
 }
Example #6
0
 public async Task PullAsync(PullerSettings settings)
 {
     await PullAsync(settings, CancellationToken.None);
 }