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);
        }
Example #2
0
 private void TryLoadCachedScenarios()
 {
     if (Savior.Has(_cachedScenariosKey))
     {
         try
         {
             Scenarios = Savior.Get <ScenarioInfo[]>(_cachedScenariosKey);
             NeedRefresh?.Invoke();
         }
         catch
         {
             Savior.Clear(_cachedScenariosKey);
         }
     }
 }