public BeamgunViewModel() { var dictionary = new RegistryBackedDictionary(); var beamgunSettings = new BeamgunSettings(dictionary); BeamgunState = new BeamgunState(beamgunSettings) { MainWindowVisibility = Visibility.Hidden }; // TODO: This bi-directional relationship feels bad. dictionary.BadCastReport += BeamgunState.AppendToAlert; BeamgunState.Disabler = new Disabler(BeamgunState); BeamgunState.Disabler.Enable(); DisableCommand = new DisableCommand(this, beamgunSettings); TrayIconCommand = new TrayIconCommand(this); LoseFocusCommand = new DeactivatedCommand(this); ResetCommand = new ResetCommand(this); ExitCommand = new ExitCommand(this); ClearAlertsCommand = new ClearAlertsCommand(this); _keystrokeHooker = InstallKeystrokeHooker(); _usbStorageGuard = InstallUsbStorageGuard(beamgunSettings); _alarm = InstallAlarm(beamgunSettings); _networkWatcher = new NetworkWatcher(beamgunSettings, new NetworkAdapterDisabler(), x => BeamgunState.AppendToAlert(x), x => { _alarm.Trigger(x); BeamgunState.SetGraphicsLanAlert(); }, () => BeamgunState.Disabler.IsDisabled); _keyboardWatcher = new KeyboardWatcher(beamgunSettings, new WorkstationLocker(), x => BeamgunState.AppendToAlert(x), x => { _alarm.Trigger(x); BeamgunState.SetGraphicsKeyboardAlert(); }, () => BeamgunState.Disabler.IsDisabled); _mouseWatcher = new MouseWatcher(beamgunSettings, new WorkstationLocker(), x => BeamgunState.AppendToAlert(x), x => { _alarm.Trigger(x); BeamgunState.SetGraphicsMouseAlert(); }, () => BeamgunState.Disabler.IsDisabled); var checker = new VersionChecker(); _updateTimer = new VersionCheckerTimer(beamgunSettings, checker, x => BeamgunState.AppendToAlert(x)); }
public AlertsViewModel(IAlertService alertService, IUserDialogs userDialogs, IMvxMessenger mvxMessenger, AppHelper appHelper) : base(userDialogs, mvxMessenger, appHelper) { _alertService = alertService; ClearAlertsCommand = ReactiveCommand .CreateFromObservable <Unit, string>((param) => { return(_appHelper.RequestConfirmation(AppResources.Alerts_Confirm_Clear) .Do((_) => _userDialogs.ShowLoading(AppResources.Alerts_Deleting_Alerts)) .SelectMany((_) => string.IsNullOrEmpty(SonIdentity) ? _alertService.ClearSelfAlerts() : _alertService.ClearAlertsOfSon(SonIdentity)) .Do((_) => _userDialogs.HideLoading())); }); ClearAlertsCommand.Subscribe((alertsDeleted) => { Debug.WriteLine("Alerts Deleted -> " + alertsDeleted); Alerts.Clear(); DataFound = false; }); ClearAlertsCommand.ThrownExceptions.Subscribe(HandleExceptions); RefreshCommand = ReactiveCommand .CreateFromObservable <Unit, IList <AlertEntity> >((param) => { if (PopupNavigation.PopupStack.Count > 0) { PopupNavigation.PopAllAsync(); } return(string.IsNullOrEmpty(SonIdentity) ? alertService.GetSelfAlerts(CountAlertsOption.Value, AntiquityOfAlertsOption.Value, AlertLevelFilter) : _alertService.GetAlertsBySon(SonIdentity, CountAlertsOption.Value, AntiquityOfAlertsOption.Value, AlertLevelFilter)); }); RefreshCommand.Subscribe((AlertsEntities) => { Alerts.ReplaceRange(AlertsEntities); ResetCommonProps(); }); RefreshCommand.IsExecuting.Subscribe((IsLoading) => IsBusy = IsLoading); RefreshCommand.ThrownExceptions.Subscribe(HandleExceptions); DeleteAlertCommand = ReactiveCommand .CreateFromObservable <AlertEntity, string>((AlertEntity) => alertService.DeleteAlertOfSon(AlertEntity.Son.Identity, AlertEntity.Identity) .Do((_) => Alerts.Remove(AlertEntity))); DeleteAlertCommand.IsExecuting.Subscribe((IsLoading) => IsBusy = IsLoading); DeleteAlertCommand.Subscribe((_) => { _userDialogs.ShowSuccess(AppResources.Alerts_Deleted); if (Alerts.Count() == 0) { DataFound = false; } }); DeleteAlertCommand.ThrownExceptions.Subscribe(HandleExceptions); AllCategory.PropertyChanged += (sender, e) => { if (e.PropertyName == "IsFiltered") { foreach (var category in AlertsLevelCategories) { category.IsEnabled = !AllCategory.IsFiltered; if (AllCategory.IsFiltered) { category.IsFiltered = true; } } } }; foreach (AlertCategoryModel AlertCategory in AlertsLevelCategories) { AlertCategory.PropertyChanged += (sender, e) => { if (e.PropertyName == "IsFiltered") { var AlertCategoryModel = sender as AlertCategoryModel; UpdateAlertFilter(AlertCategoryModel); } }; } }