public override void RemoveScenario(ScenarioBase scenario) { var linkedScenarios = _scenarios.Except(new[] { scenario }) .Where(x => x.GetAllActionsFlat() .Any(z => z is IScenariosAccess scenarioAccessObj && scenarioAccessObj.TargetScenarioId != null && scenarioAccessObj.TargetScenarioId.Equals(scenario.Id))).ToArray(); if (linkedScenarios.Any()) { throw new InvalidOperationException("Невозможно удалить сценарий, так как следующие сценарии ссылаются на него: " + linkedScenarios.Select(x => x.Name).Aggregate((z, y) => z + "; " + y)); } var linkedTriggers = _triggers .Where(x => (x.TargetScenarioId != null && x.TargetScenarioId.Equals(scenario.Id)) || x.GetAllActionsFlat() .Any(z => z is IScenariosAccess scenarioAccessObj && scenarioAccessObj.TargetScenarioId.Equals(scenario.Id))).ToArray(); if (linkedScenarios.Any()) { throw new InvalidOperationException("Невозможно удалить сценарий, так как следующие триггеры ссылаются на него: " + linkedTriggers.Select(x => x.Name).Aggregate((z, y) => z + "; " + y)); } scenario.Dispose(); _scenariosIds.Remove(scenario.Id); _scenarios.RemoveAll(x => x.Id.Equals(scenario.Id)); RaiseOnScenarioRemoved(scenario); _savior.Set(ScenariosIdsKey, _scenariosIds); _savior.Clear(scenario.Id); }
private void TryLoadCachedScenarios() { if (Savior.Has(_cachedScenariosKey)) { try { Scenarios = Savior.Get <ScenarioInfo[]>(_cachedScenariosKey); NeedRefresh?.Invoke(); } catch { Savior.Clear(_cachedScenariosKey); } } }