Beispiel #1
0
        //public TimeSpan MaxSleepTime { get; set; }

        //public TimeSpan IncrementSleepTime { get; set; }

        public WallWatchModel(long wallId,
                              MonitoringLimits monitoringLimits,
                              MonitoringLimits shortMonitoringLimits,
                              TimeSpan monitoringPeriod,
                              TimeSpan shortMonitoringPeriod)
        {
            WallId                = wallId;
            MonitoringLimits      = monitoringLimits ?? throw new ArgumentNullException(nameof(monitoringLimits));
            ShortMonitoringLimits = shortMonitoringLimits ?? throw new ArgumentNullException(nameof(shortMonitoringLimits));
            MonitoringPeriod      = monitoringPeriod;
            ShortMonitoringPeriod = shortMonitoringPeriod;
        }
Beispiel #2
0
        /// <summary>
        /// Загрузка постов по лимитам установленным в модели (Все посты за период ИЛИ заданное кол-во постов)
        /// </summary>
        /// <param name="wall"></param>
        /// <param name="downloadingPostsOptions"></param>
        /// <param name="monitoringLimits"></param>
        /// <param name="logger"></param>
        /// <returns></returns>
        public static List <Post> GetPosts(this IWallCategory wall,
                                           ILogger logger,
                                           DownloadingPostsOptions downloadingPostsOptions,
                                           MonitoringLimits monitoringLimits)
        {
            List <Post> res                  = new List <Post>();
            int         loadCount            = downloadingPostsOptions.CountInFirstLoad;
            bool        allPostsReceived     = true;
            ulong       offset               = 0;
            long?       monitoringNumBorder  = null;
            DateTime?   monitoringTimeBorder = null;

            if (monitoringLimits.MonitoringLimit != null)
            {
                monitoringNumBorder = 0;
            }
            if (monitoringLimits.MonitoringPeriod != null)
            {
                monitoringTimeBorder = DateTime.UtcNow - monitoringLimits.MonitoringPeriod;
            }

            while (allPostsReceived)
            {
                WallGetObject wallPosts = LoadPosts(wall, logger, downloadingPostsOptions, loadCount, offset);
                if (wallPosts.WallPosts.Count != 0)
                {
                    if (monitoringNumBorder == null)
                    {
                        res.AddRange(SelectionLoadedPosts(wallPosts, ref allPostsReceived, monitoringTimeBorder.Value));
                    }
                    else if (monitoringTimeBorder == null)
                    {
                        res.AddRange(SelectionLoadedPosts(wallPosts, ref allPostsReceived, ref monitoringNumBorder, monitoringLimits.MonitoringLimit.Value));
                    }
                    else
                    {
                        res.AddRange(SelectionLoadedPosts(wallPosts, ref allPostsReceived, monitoringTimeBorder.Value, ref monitoringNumBorder, monitoringLimits.MonitoringLimit.Value));
                    }

                    if (wallPosts.WallPosts.Count < loadCount)
                    {
                        allPostsReceived = false;
                    }
                    offset   += (ulong)loadCount;
                    loadCount = MaxLoadCount;
                }
            }

            return(res);
        }