/// <summary>
        /// 刷新UI;
        /// </summary>
        public void Refresh()
        {
            SetActiveModificationList(ModificationController.ActivatedModificationInfos);

            var idleModificationInfos = new List <ModificationInfo>();

            ModificationController.GetIdleModificationInfos(idleModificationInfos);
            SetIdleModificationList(idleModificationInfos);
        }
예제 #2
0
        private void HandleRepositoriesDirectoryModified(object sender, FileSystemEventArgs e)
        {
            switch (e.ChangeType)
            {
            case WatcherChangeTypes.Changed:
                break;

            case WatcherChangeTypes.Created:
                var fileInfo = fileSystemProxy.GetFileInfo(e.FullPath);
                if (fileInfo.Attributes.HasFlag(FileAttributes.Directory))
                {
                    if (fileInfo.Name.StartsWith("."))
                    {
                        logger.Info($"Ignoring modification candidate {fileInfo.Name} as name has leading period.");
                    }
                    else if (displayedModificationNames.Contains(fileInfo.Name))
                    {
                        logger.Info($"Ignoring modification candidate {fileInfo.Name} as view model already exists.");
                    }
                    else
                    {
                        var modification = modificationLoader.FromPath(e.FullPath);
                        var viewModel    = new ModificationViewModel();
                        var controller   = new ModificationController(modification, viewModel);
                        viewModel.SetController(controller);
                        viewModel.SetModification(modification);
                        var modificationPhaseManager = new ModificationPhaseManager();
                        var modificationPhaseFactory = new ModificationPhaseFactory(pofSerializer, fileSystemProxy, temporaryFileService, exeggutorService, modificationPhaseManager, modificationLoader, viewModel, leagueBuildUtilities, modification);
                        modificationPhaseManager.Transition(modificationPhaseFactory.Idle());
                        controller.SetModificationPhaseManager(modificationPhaseManager);
                        controller.Initialize();

                        Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(() => {
                            modificationViewModels.Add(viewModel);
                        }));
                    }
                }
                break;

            case WatcherChangeTypes.Deleted:
                var removedViewModel = modificationViewModels.FirstOrDefault(x => x.RepositoryName.Equals(e.Name, StringComparison.OrdinalIgnoreCase));
                if (removedViewModel == null)
                {
                    logger.Error("Failed to find viewmodel match for removed directory " + e.FullPath);
                }
                else
                {
                    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(() => {
                        modificationViewModels.Remove(removedViewModel);
                    }));
                }
                break;

            case WatcherChangeTypes.Renamed:
                var renamedArgs     = (RenamedEventArgs)e;
                var parentDirectory = new FileInfo(renamedArgs.FullPath).Directory;
                HandleRepositoriesDirectoryModified(sender, new FileSystemEventArgs(WatcherChangeTypes.Deleted, parentDirectory.FullName, renamedArgs.OldName));
                HandleRepositoriesDirectoryModified(sender, new FileSystemEventArgs(WatcherChangeTypes.Created, parentDirectory.FullName, renamedArgs.Name));
                break;
            }
        }
예제 #3
0
 public void SetController(ModificationController controller)
 {
     this.controller = controller;
 }