Inheritance: ViewModelBase
Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        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;
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
        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));
        }