コード例 #1
0
        private List <Post> GetNewAndOldPublishedPosts(DownloadingPostsOptions downloadingPostsOptions, out long idBorderInPreList)
        {
            idBorderInPreList = 0;
            if (_typeOfCurrentChecking == TypesOfChecking.Short)
            {
                if (_model.ShortMonitoringLimits.MonitoringPeriod != null)
                {
                    // здесь вообще должен быть не _periodOfShortCheck, а время которое реально прошло после последней короткой проверки (оно будет чуть больше)
                    idBorderInPreList = _postsProvider.GetMinIdForPeriod(_model.WallId, _publishedType, _model.ShortMonitoringLimits.MonitoringPeriod.Value + _shortCheckPeriod); // возвращает id первого поста, идущего за указанным периодом
                }
                if (_model.ShortMonitoringLimits.MonitoringLimit != null)
                {
                    long idBorderForLimit = _postsProvider.GetIdNumPostFromTop(_model.WallId, _publishedType, _model.ShortMonitoringLimits.MonitoringLimit.Value); // возвращает id ( N+1)-ого сверху поста
                    if (idBorderForLimit < idBorderInPreList)
                    {
                        idBorderInPreList = idBorderForLimit;
                    }
                }
            }
            else
            {
                if (_model.MonitoringLimits.MonitoringPeriod != null)
                {
                    // здесь вообще должен быть не _periodOfShortCheck, а время которое реально прошло после последней короткой проверки (оно будет чуть больше)
                    idBorderInPreList = _postsProvider.GetMinIdForPeriod(_model.WallId, _publishedType, _model.MonitoringLimits.MonitoringPeriod.Value + _longCheckPeriod); // возвращает id первого поста, идущего за указанным периодом
                }
                if (_model.MonitoringLimits.MonitoringLimit != null)
                {
                    long idBorderForLimit = _postsProvider.GetIdNumPostFromTop(_model.WallId, _publishedType, _model.MonitoringLimits.MonitoringLimit.Value); // возвращает id ( N+1)-ого сверху поста
                    if (idBorderForLimit < idBorderInPreList)
                    {
                        idBorderInPreList = idBorderForLimit;
                    }
                }
            }

            List <Post> publishedPosts = _api.Wall.GetPosts(_logger, downloadingPostsOptions, idBorderInPreList);

            return(publishedPosts);
        }
コード例 #2
0
        private async Task <PostsCollection> LoadWallPosts()
        {
            long            latestOldPostId = -1;
            PostsCollection res             = new PostsCollection();
            int             loadCount       = FirstLoadCount; // TODO: how to calculate

            var getParams = new WallGetParams()
            {
                OwnerId = _model.WallId
            };
            WallGetObject wallGetRes = null;


            _api.Wall.Get(getParams);


            DownloadingPostsOptions downloadingPostsOptions = new DownloadingPostsOptions(_model.WallId, loadInFirstCount, WallFilter.All, _wallWatcherOptions.TimeForReconnecting);

            // если _prePublishedList пустой, то грузим не до самого нового имющегося поста (так как его у нас нет), а за MonitoringLimits(период и/или количество)
            if (!_postsProvider.AnyExistingPosts(_model.WallId, _publishedType, 0))
            {
                List <Post> publishedPosts = _api.Wall.GetPosts(_logger, downloadingPostsOptions, _model.MonitoringLimits);
                res.AddPosts(publishedPosts);
            }
            else
            {
                res.AddPosts(GetNewAndOldPublishedPosts(downloadingPostsOptions, out latestOldPostId));
            }

            // Download suggests and postpone
            downloadingPostsOptions.CountInFirstLoad = MaxLoadCount;
            downloadingPostsOptions.WallFilter       = WallFilter.Suggests;
            res.AddPosts(_api.Wall.GetPosts(_logger, downloadingPostsOptions));
            downloadingPostsOptions.WallFilter = WallFilter.Postponed;
            res.AddPosts(_api.Wall.GetPosts(_logger, downloadingPostsOptions));
            return(res);
        }