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