/// <exception cref="OverflowException"></exception> private void ProcessTriggerItem(SettingsCleanupTriggerItem item) { if (_triggerdItem != null && _triggerdItem != item) { return; } if (_triggerdItem == null) { // Increase to 5 minutes if (DateTime.Now - item.LastRan > TimeSpan.FromMinutes(5)) { item.LastRan = DateTime.Now; string command = string.Format("{0} quiet", item.ScanCommand); HashSet <IMyEntity> entities = CubeGrids.ScanGrids(0, command); if (entities.Count >= item.MaxCapacity) { Communication.SendPublicInformation(string.Format("[NOTICE]: Cleanup triggered. ({0} of {1}) triggered grids found. Cleanup will run in {2} minutes. Reason: {3}", entities.Count, item.MaxCapacity, item.MinutesAfterCapacity, item.Reason)); item.NotificationItemsRan.Clear( ); _triggerdItem = item; return; } } } else { if (DateTime.Now - item.LastRan > TimeSpan.FromMinutes(item.MinutesAfterCapacity)) { string command = string.Format("{0} quiet", item.ScanCommand); HashSet <IMyEntity> entities = CubeGrids.ScanGrids(0, command); CubeGrids.DeleteGrids(entities); Communication.SendPublicInformation(string.Format("[NOTICE]: Triggered cleanup has run. {0} entities removed. Have a nice day.", entities.Count)); _triggerdItem = null; return; } foreach (SettingsCleanupNotificationItem notifyItem in PluginSettings.Instance.CleanupNotificationItems) { if (item.NotificationItemsRan.Contains(notifyItem)) { continue; } if (notifyItem.MinutesBeforeCleanup > item.MinutesAfterCapacity) { continue; } if (DateTime.Now - item.LastRan > TimeSpan.FromMinutes(item.MinutesAfterCapacity - notifyItem.MinutesBeforeCleanup)) { item.NotificationItemsRan.Add(notifyItem); 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); } } } }