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

				}
			}
		}
Ejemplo n.º 2
0
        private void ProcessTimedItem(SettingsCleanupTimedItem item)
        {
            DateTime time = new DateTime(m_start.Year, m_start.Month, m_start.Day, item.Restart.Hour, item.Restart.Minute, 0);
            if (time - DateTime.Now < TimeSpan.FromSeconds(-20))
            {
                time = new DateTime(m_start.Year, m_start.Month, m_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 = item.ScanCommand + " quiet";
                HashSet<IMyEntity> entities = CubeGrids.ScanGrids(0, command.Split(new char[] { ' ' }));
                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);
                    }

                }
            }
        }