public StatusServer(ProcessingStatus status) { this.workingStatus = status; }
void InitializeViewModel() { if (this.didInitialize) { return; } ViewModel.Initialize(this.Dispatcher); this.currentStatus = new ProcessingStatus(); var viewModel = ViewModel; void UpdateStatusFromViewModel() { this.currentStatus.NumComplete = viewModel.CompletedOutputFiles.Count; this.currentStatus.NumPending = viewModel.PendingInputFiles.Count; this.currentStatus.NumProcessing = viewModel.ProcessingQueueFiles.Count; this.currentStatus.NumImagesProcessing = -1; this.currentStatus.NumImagesProcessingPending = -1; this.currentStatus.ProcessingQueueStates = string.Join("\n", viewModel.ProcessingQueueFiles.Select(ti => ti.TaskState)); } UpdateStatusFromViewModel(); ViewModel.TaskItems.CollectionChanged += (s, e) => { UpdateStatusFromViewModel(); }; ViewModel.TaskItems.TaskItemChanged += (t) => { UpdateStatusFromViewModel(); }; if (ViewModel.Settings.AutoStartOnOpen || RootConfig.IsHeadless) { Logger.Debug("Auto-starting processing queue since AutoStartOnOpen=true, or running in headless mode"); ViewModel.StartProcessing(); } ViewModel.PropertyChanged += ViewModel_PropertyChanged; PendingFilesPane.Title = ViewModel.PendingFileListLabel; ProcessingFilesPane.Title = ViewModel.ProcessingFileListLabel; OutputFilesPane.Title = ViewModel.OutputFileListLabel; this.statusServer = new StatusServer(this.currentStatus); try { this.statusServer.Start(); } catch (Exception e) { Logger.Error("Unable to start status server: {Exception}", e.ToString()); } this.didInitialize = true; }