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