public void CompareAll(object ownerViewModel) { Messenger.Default.Send(new PerformingComparisonMessage()); var generator = new VarietyPairGenerator(); generator.Process(_projectService.Project); var pipeline = new MultiThreadedPipeline<VarietyPair>(GetCompareProcessors()); var progressVM = new ProgressViewModel(vm => { vm.Text = "Comparing all variety pairs..."; pipeline.Process(_projectService.Project.VarietyPairs); while (!pipeline.WaitForComplete(500)) { if (vm.Canceled) { pipeline.Cancel(); pipeline.WaitForComplete(); break; } } if (vm.Canceled) { _projectService.Project.VarietyPairs.Clear(); } else { vm.Text = "Analyzing results..."; Messenger.Default.Send(new ComparisonPerformedMessage()); } }, false, true); pipeline.ProgressUpdated += (sender, e) => progressVM.Value = e.PercentCompleted; _dialogService.ShowModalDialog(ownerViewModel, progressVM); }
private void SetupProject(ProgressViewModel vm, string path, string name, CogProject project) { _settingsService.LastProject = path; if (MigrateProjectIfNeeded(vm, project)) _isChanged = true; _project = project; _projectName = name; if (vm != null) vm.Text = "Segmenting and syllabifying words..."; _analysisService.Value.SegmentAll(); if (path != null) { string cacheFileName = Path.Combine(Path.GetTempPath(), Path.GetFileName(path) + ".cache"); if (File.Exists(cacheFileName)) { if (vm != null) vm.Text = "Loading cached results..."; bool delete = true; if (!_isChanged) { try { using (FileStream fs = File.OpenRead(cacheFileName)) { var version = Serializer.DeserializeWithLengthPrefix<int>(fs, PrefixStyle.Base128, 1); if (version == CacheVersion) { var hash = Serializer.DeserializeWithLengthPrefix<string>(fs, PrefixStyle.Base128, 1); if (hash == CalcProjectHash()) { _project.VarietyPairs.AddRange(Serializer.DeserializeItems<VarietyPairSurrogate>(fs, PrefixStyle.Base128, 1) .Select(surrogate => surrogate.ToVarietyPair(_segmentPool, _project))); delete = false; } } } } catch (Exception) { // could not load the cache, so delete it } } if (delete) File.Delete(cacheFileName); } } if (vm != null) vm.Text = "Initializing views..."; OnProjectOpened(new EventArgs()); }
private bool OpenProject(ProgressViewModel vm, string path, out string errorMsg) { string projectName = Path.GetFileNameWithoutExtension(path); vm.DisplayName = string.Format("Opening {0} - Cog", projectName); vm.Text = "Loading project file..."; errorMsg = null; FileStream fileStream = null; CogProject project = null; try { fileStream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None); if (ConfigManager.Load(_spanFactory, _segmentPool, fileStream, out project)) _isChanged = true; } catch (ConfigException) { errorMsg = "The specified file is not a valid Cog configuration file."; } catch (IOException ioe) { errorMsg = string.Format("Error opening project file:\n{0}", ioe.Message); } catch (UnauthorizedAccessException) { errorMsg = "The specified file is in use or you do not have access to it."; } if (errorMsg != null) { if (fileStream != null) fileStream.Close(); return false; } Debug.Assert(project != null); _projectFileStream = fileStream; SetupProject(vm, path, projectName, project); _isNew = false; return true; }
private void NewProject(ProgressViewModel vm) { vm.DisplayName = "Opening New Project - Cog"; vm.Text = "Loading project file..."; Stream stream = Assembly.GetAssembly(GetType()).GetManifestResourceStream("SIL.Cog.Application.NewProject.cogx"); CogProject project = ConfigManager.Load(_spanFactory, _segmentPool, stream); SetupProject(vm, null, "New Project", project); _isNew = true; }
private bool MigrateProjectIfNeeded(ProgressViewModel vm, CogProject project) { if (project.Version == ProjectVersion) return false; vm.Text = "Updating project..."; foreach (IProjectMigration pm in ProjectMigrations.SkipWhile(cm => project.Version >= cm.Version)) pm.Migrate(_segmentPool, project); project.Version = ProjectVersion; return true; }
public bool Open(object ownerViewModel) { if (_isNew && !_isChanged) { FileDialogResult result = _dialogService.ShowOpenFileDialog(ownerViewModel, CogProjectFileType); if (result.IsValid && result.FileName != _settingsService.LastProject) { string errorMsg = null; var progressVM = new ProgressViewModel(vm => { if (!OpenProject(vm, result.FileName, out errorMsg)) vm.Canceled = true; }, true, false); if (_dialogService.ShowModalDialog(ownerViewModel, progressVM) == false) { _dialogService.ShowError(ownerViewModel, errorMsg, "Cog"); return false; } return true; } } else { FileDialogResult result = _dialogService.ShowOpenFileDialog(ownerViewModel, CogProjectFileType); if (result.IsValid && result.FileName != _settingsService.LastProject) StartNewProcess(result.FileName, 5000); } return false; }
public bool New(object ownerViewModel) { if (_isNew && !_isChanged) { var progressVM = new ProgressViewModel(NewProject, true, false); _dialogService.ShowModalDialog(ownerViewModel, progressVM); return true; } StartNewProcess("<new>", 5000); return false; }
public bool Init() { string projectPath = _settingsService.LastProject; bool usingCmdLineArg = false; string[] args = Environment.GetCommandLineArgs(); if (args.Length > 1) { projectPath = args[1]; usingCmdLineArg = true; } string errorMsg = null; var progressVM = new ProgressViewModel(vm => { if (string.IsNullOrEmpty(projectPath) || projectPath == "<new>" || !File.Exists(projectPath)) { NewProject(vm); } else { if (!OpenProject(vm, projectPath, out errorMsg)) { if (usingCmdLineArg) vm.Canceled = true; else NewProject(vm); } } }, true, false); if (_dialogService.ShowModalDialog(null, progressVM) == false) { _dialogService.ShowError(null, errorMsg, "Cog"); return false; } return true; }
public void StemAll(object ownerViewModel, StemmingMethod method) { if (method == StemmingMethod.Automatic) { foreach (Variety variety in _projectService.Project.Varieties) variety.Affixes.Clear(); } var pipeline = new MultiThreadedPipeline<Variety>(GetStemProcessors(method)); var progressVM = new ProgressViewModel(pvm => { pvm.Text = "Stemming all varieties..."; pipeline.Process(_projectService.Project.Varieties); while (!pipeline.WaitForComplete(100)) { if (pvm.Canceled) { pipeline.Cancel(); pipeline.WaitForComplete(); } } }, false, true); pipeline.ProgressUpdated += (sender, e) => progressVM.Value = e.PercentCompleted; _dialogService.ShowModalDialog(ownerViewModel, progressVM); Messenger.Default.Send(new DomainModelChangedMessage(true)); }