/// <summary> /// 刷新UI; /// </summary> public void Refresh() { SetActiveModificationList(ModificationController.ActivatedModificationInfos); var idleModificationInfos = new List <ModificationInfo>(); ModificationController.GetIdleModificationInfos(idleModificationInfos); SetIdleModificationList(idleModificationInfos); }
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; } }
public void SetController(ModificationController controller) { this.controller = controller; }