/// <exception cref="OverflowException"></exception>
        private void ProcessTimedItem( SettingsCleanupTimedItem item )
        {
            _start = DateTime.Now; // this needs to be updated for each run so multi-day runtimes are handled properly
            DateTime itemTime;

            if ( !item.Interval )
                itemTime = new DateTime( _start.Year, _start.Month, _start.Day, item.Restart.Hour, item.Restart.Minute, 0 );
            else
                itemTime = new DateTime( _start.Year, _start.Month, _start.Day, _start.Hour, item.Restart.Minute, 0 );

            if ( DateTime.Now - itemTime > _twentySeconds )
            {
                itemTime = itemTime.AddDays( 1 );
            }

            if ( DateTime.Now - item.LastRan < _oneMinute )
                return;

            if ( itemTime - DateTime.Now < _oneSecond && DateTime.Now - item.LastRan > _oneMinute )
            {
                string command = $"{item.ScanCommand} quiet";
                HashSet<GridGroup> groups = CubeGrids.ScanGrids( 0, CommandParser.GetCommandParts( command ).ToArray( ) );

                int groupCount = groups.Count;
                int gridCount = 0;
                foreach ( var group in groups )
                {
                    gridCount += group.Grids.Count;
                    group.Close(  );
                }
                Communication.SendPublicInformation( $"[NOTICE]: Timed cleanup has run. {gridCount} grids in {groupCount} groups removed." );
                item.LastRan = DateTime.Now;
                item.NotificationItemsRan.Clear( );
                return;
            }

            foreach ( SettingsCleanupNotificationItem notifyItem in PluginSettings.Instance.CleanupNotificationItems )
            {
                if ( item.NotificationItemsRan.Contains( notifyItem ) )
                    continue;

                if ( itemTime - DateTime.Now < TimeSpan.FromMinutes( notifyItem.MinutesBeforeCleanup ) )
                {
                    item.NotificationItemsRan.Add( notifyItem );

                    if ( DateTime.Now - notifyItem.lastRan > _oneMinute )
                    {
                        notifyItem.lastRan = DateTime.Now;
                        string notification = notifyItem.Message.Replace( "%cleanup_reason%", item.Reason );
                        Communication.SendPublicInformation( notification );
                    }

                }
            }
        }
        /// <exception cref="OverflowException"></exception>
        private void ProcessTimedItem(SettingsCleanupTimedItem item)
        {
            _start = DateTime.Now;             // this needs to be updated for each run so multi-day runtimes are handled properly

            DateTime itemTime = new DateTime(_start.Year, _start.Month, _start.Day, item.Restart.Hour, item.Restart.Minute, 0);

            if (DateTime.Now - itemTime > _twentySeconds)
            {
                itemTime = itemTime.AddDays(1);
            }

            if (DateTime.Now - item.LastRan < _oneMinute)
            {
                return;
            }

            if (itemTime - DateTime.Now < _oneSecond && DateTime.Now - item.LastRan > _oneMinute)
            {
                string command = string.Format("{0} quiet", item.ScanCommand);
                HashSet <IMyEntity> entities = CubeGrids.ScanGrids(0, CommandParser.GetCommandParts(command).ToArray( ));
                CubeGrids.DeleteGrids(entities);
                Communication.SendPublicInformation(string.Format("[NOTICE]: Timed cleanup has run.  {0} entities removed.  Have a nice day.", entities.Count));
                item.LastRan = DateTime.Now;
                item.NotificationItemsRan.Clear( );
                return;
            }

            foreach (SettingsCleanupNotificationItem notifyItem in PluginSettings.Instance.CleanupNotificationItems)
            {
                if (item.NotificationItemsRan.Contains(notifyItem))
                {
                    continue;
                }

                if (itemTime - DateTime.Now < TimeSpan.FromMinutes(notifyItem.MinutesBeforeCleanup))
                {
                    item.NotificationItemsRan.Add(notifyItem);

                    if (DateTime.Now - notifyItem.lastRan > _oneMinute)
                    {
                        notifyItem.lastRan = DateTime.Now;
                        string notification = notifyItem.Message.Replace("%cleanup_reason%", item.Reason);
                        Communication.SendPublicInformation(notification);
                    }
                }
            }
        }
        /// <exception cref="OverflowException"></exception>
        private void ProcessTimedItem(SettingsCleanupTimedItem item)
        {
            DateTime time = new DateTime(_start.Year, _start.Month, _start.Day, item.Restart.Hour, item.Restart.Minute, 0);

            if (time - DateTime.Now < TimeSpan.FromSeconds(-20))
            {
                time = new DateTime(_start.Year, _start.Month, _start.Day + 1, item.Restart.Hour, item.Restart.Minute, 0);
            }

            if (DateTime.Now - item.LastRan < TimeSpan.FromMinutes(1))
            {
                return;
            }

            if (time - DateTime.Now < TimeSpan.FromSeconds(1) && DateTime.Now - item.LastRan > TimeSpan.FromMinutes(1))
            {
                string command = string.Format("{0} quiet", item.ScanCommand);
                HashSet <IMyEntity> entities = CubeGrids.ScanGrids(0, command);
                CubeGrids.DeleteGrids(entities);
                Communication.SendPublicInformation(string.Format("[NOTICE]: Timed cleanup has run.  {0} entities removed.  Have a nice day.", entities.Count));
                item.LastRan = DateTime.Now;
                item.NotificationItemsRan.Clear( );
                return;
            }

            foreach (SettingsCleanupNotificationItem notifyItem in PluginSettings.Instance.CleanupNotificationItems)
            {
                if (item.NotificationItemsRan.Contains(notifyItem))
                {
                    continue;
                }

                if (time - DateTime.Now < TimeSpan.FromMinutes(notifyItem.MinutesBeforeCleanup))
                {
                    item.NotificationItemsRan.Add(notifyItem);

                    if (DateTime.Now - notifyItem.lastRan > TimeSpan.FromMinutes(1))
                    {
                        notifyItem.lastRan = DateTime.Now;
                        string notification = notifyItem.Message.Replace("%cleanup_reason%", item.Reason);
                        Communication.SendPublicInformation(notification);
                    }
                }
            }
        }
Esempio n. 4
0
        /// <exception cref="OverflowException"></exception>
        private void ProcessTimedItem(SettingsCleanupTimedItem item)
        {
            _start = DateTime.Now;             // this needs to be updated for each run so multi-day runtimes are handled properly
            DateTime itemTime;

            if (!item.Interval)
            {
                itemTime = new DateTime(_start.Year, _start.Month, _start.Day, item.Restart.Hour, item.Restart.Minute, 0);
            }
            else
            {
                itemTime = new DateTime(_start.Year, _start.Month, _start.Day, _start.Hour, item.Restart.Minute, 0);
            }

            if (DateTime.Now - itemTime > _twentySeconds)
            {
                itemTime = itemTime.AddDays(1);
            }

            if (DateTime.Now - item.LastRan < _oneMinute)
            {
                return;
            }

            if (itemTime - DateTime.Now < _oneSecond && DateTime.Now - item.LastRan > _oneMinute)
            {
                string command             = $"{item.ScanCommand} quiet";
                HashSet <GridGroup> groups = CubeGrids.ScanGrids(0, CommandParser.GetCommandParts(command).ToArray( ));

                int groupCount = groups.Count;
                int gridCount  = 0;
                foreach (var group in groups)
                {
                    gridCount += group.Grids.Count;
                    group.Close(  );
                }
                Communication.SendPublicInformation($"[NOTICE]: Timed cleanup has run. {gridCount} grids in {groupCount} groups removed.");
                item.LastRan = DateTime.Now;
                item.NotificationItemsRan.Clear( );
                return;
            }

            foreach (SettingsCleanupNotificationItem notifyItem in PluginSettings.Instance.CleanupNotificationItems)
            {
                if (item.NotificationItemsRan.Contains(notifyItem))
                {
                    continue;
                }

                if (itemTime - DateTime.Now < TimeSpan.FromMinutes(notifyItem.MinutesBeforeCleanup))
                {
                    item.NotificationItemsRan.Add(notifyItem);

                    if (DateTime.Now - notifyItem.lastRan > _oneMinute)
                    {
                        notifyItem.lastRan = DateTime.Now;
                        string notification = notifyItem.Message.Replace("%cleanup_reason%", item.Reason);
                        Communication.SendPublicInformation(notification);
                    }
                }
            }
        }