Esempio n. 1
0
        public MacroViewModel(
            ILoggerService loggerService,
            IMonitorDialog monitorDialog,
            IFileService fileService,
            IMacroService macroService)
        {
            IsRunning   = false;
            SavedMacros = new ObservableCollection <IMacro>();

            _loggerService = loggerService;
            _monitorDialog = monitorDialog;
            _fileService   = fileService;
            _macroService  = macroService;

            Recorders = _macroService.CreateRecorders();

            Record = new DelegateCommandAsync(() =>
            {
                _runningRecordSession = _macroService.CreateSession(SelectedRecorder);
                _runningRecordSession?.Start();
                Stop.RaiseCanExecuteChanged();
                Record.RaiseCanExecuteChanged();
            },
                                              () => SelectedRecorder != null && _runningRecordSession == null);

            Stop = new DelegateCommandAsync(() =>
            {
                var macro             = _runningRecordSession.Stop();
                _runningRecordSession = null;
                SavedMacros.Add(macro);
                Stop.RaiseCanExecuteChanged();
                Record.RaiseCanExecuteChanged();
                Build.RaiseCanExecuteChanged();
            },
                                            () => _runningRecordSession != null);

            Build = new DelegateCommandAsync(async() =>
            {
                var macro = SavedMacros.First();
                SavedMacros.RemoveAt(0);

                Build.RaiseCanExecuteChanged();

                var saveResult = _monitorDialog.SaveFileDialog("Save script", "test_script.cs", "Monitor Script (*.cs)|*.cs;|All files (*.*)|*.*", null);
                if (saveResult.Success)
                {
                    using (var stream = _fileService.CreateNewFileStream(saveResult.FileName))
                    {
                        await macro.Serialize(stream);
                        _loggerService.LogMessage(this, $"Script built & saved '{saveResult.FileName}'!", Severity.Info);
                    }
                }
            },
                                             () => SavedMacros.Any());
        }