48 #region Commands: Close / Save / Load / New
50 private ICommand _closeWorkspaceCommand;
52 public ICommand
CloseWorkspaceCommand => _closeWorkspaceCommand ?? (_closeWorkspaceCommand =
new RelayCommand(async() =>
56 bool save =
true, cancel =
false;
57 (save, cancel) = await _shellVM.CheckForUnsavedChangesAndQueryUserAction();
61 await _workspaceService?.CloseWorkspace(CancellationToken.None, save);
75 }, () => _workspaceService.IsWorkspaceOpen));
79 private ICommand _saveWorkspaceCommand;
81 public ICommand
SaveWorkspaceCommand => _saveWorkspaceCommand ?? (_saveWorkspaceCommand =
new RelayCommand(async() =>
85 await _workspaceService?.Save(CancellationToken.None);
91 }, () => _workspaceService.IsWorkspaceOpen));
95 private ICommand _loadWorkspaceCommand;
97 public ICommand
LoadWorkspaceCommand => _loadWorkspaceCommand ?? (_loadWorkspaceCommand =
new RelayCommand(async() =>
99 bool save =
true, cancel =
false;
100 (save, cancel) = await _shellVM.CheckForUnsavedChangesAndQueryUserAction();
106 OpenFolderDialog folderDialog =
new OpenFolderDialog();
107 folderDialog.Multiselect =
false;
109 if (folderDialog.ShowDialog() ==
true)
111 if (_workspaceService?.IsWorkspaceOpen ??
false)
113 await _workspaceService?.CloseWorkspace(CancellationToken.None, save);
115 bool result = await _workspaceService?.Load(folderDialog.FolderName, CancellationToken.None);
119 _navigationService.ReloadCurrent();
136 private ICommand _loadLastWorkspaceCommand;
138 public ICommand
LoadLastWorkspaceCommand => _loadLastWorkspaceCommand ?? (_loadLastWorkspaceCommand =
new RelayCommand<string>(async (param) =>
140 bool save =
true, cancel =
false;
141 (save, cancel) = await _shellVM.CheckForUnsavedChangesAndQueryUserAction();
147 string path = param as string;
148 if (_workspaceService?.IsWorkspaceOpen ??
false)
150 await _workspaceService?.CloseWorkspace(CancellationToken.None, save);
152 bool result = await _workspaceService?.Load(path, CancellationToken.None);
156 _navigationService.ReloadCurrent();
172 private ICommand _openWorkspaceFolderCommand;
184 }, () => _workspaceService.IsWorkspaceOpen));
188 private ICommand _createNewWorkspaceCommand;
192 bool save =
true, cancel =
false;
193 (save, cancel) = await _shellVM.CheckForUnsavedChangesAndQueryUserAction();
201 await _dialogCoordinator.ShowMetroDialogAsync(_shellVM, dialog);
203 await _dialogCoordinator.HideMetroDialogAsync(_shellVM, dialog);
205 if(dialogResult == MessageDialogResult.Affirmative)
207 if (_workspaceService?.IsWorkspaceOpen ??
false)
209 await _workspaceService?.CloseWorkspace(CancellationToken.None, save);
213 if (!
string.IsNullOrEmpty(dialog.PreviousWorkspaceFolder) && dialog.CopyCompetitions)
217 if (!
string.IsNullOrEmpty(dialog.PreviousWorkspaceFolder) && dialog.CopyCompetitionDistanceRules)
221 if (!
string.IsNullOrEmpty(dialog.PreviousWorkspaceFolder) && dialog.CopyTemplates)
226 bool result = await _workspaceService?.Load(dialog.NewWorkspaceFolder, CancellationToken.None);
237 await _workspaceService.Save(CancellationToken.None);
239 if (dialog.CopyDefaultTemplates)
244 if (File.Exists(templateZipPath))
246 if (Directory.Exists(zipExtractPath))
248 Directory.Delete(zipExtractPath,
true);
276 if (!Directory.Exists(oldWorkspacePath) ||
string.IsNullOrEmpty(newWorkspacePath) || oldWorkspacePath == newWorkspacePath) {
return; }
281 List<string> localizedFileNames = GeneralLocalizationHelper.GetAllTranslationsForKey(fileNameResources, fileNameResourceKey).Values.ToList();
282 List<string> localizedFilePaths = localizedFileNames.Select(f => Path.Combine(oldWorkspacePath, f)).ToList();
283 foreach (
string localizedFilePath
in localizedFilePaths)
285 if (File.Exists(localizedFilePath))
287 string newFileName = fileNameResources.GetString(fileNameResourceKey);
289 File.Copy(localizedFilePath, Path.Combine(newWorkspacePath, newFileName),
true);
304 if (!Directory.Exists(oldWorkspacePath) ||
string.IsNullOrEmpty(newWorkspacePath) || oldWorkspacePath == newWorkspacePath) {
return; }
309 if(!Directory.Exists(oldTemplateFolder)) {
return; }
310 if(Directory.Exists(newTemplateFolder))
312 Directory.Delete(newTemplateFolder,
true);
314 Directory.CreateDirectory(newTemplateFolder);
318 foreach (
string dirPath
in Directory.GetDirectories(oldTemplateFolder,
"*", SearchOption.AllDirectories))
320 Directory.CreateDirectory(dirPath.Replace(oldTemplateFolder, newTemplateFolder));
323 foreach (
string newPath
in Directory.GetFiles(oldTemplateFolder,
"*.*", SearchOption.AllDirectories))
325 File.Copy(newPath, newPath.Replace(oldTemplateFolder, newTemplateFolder),
true);
333 private ICommand _clearAllLastWorkspacePathsCommand;
337 _workspaceService?.ClearAllLastWorkspacePaths();
352 private IDialogCoordinator _dialogCoordinator;
365 _workspaceService = workspaceService;
366 _dialogCoordinator = dialogCoordinator;
368 _navigationService = navigationService;
370 _workspaceService.PropertyChanged -= _workspaceService_PropertyChanged;
371 _workspaceService.PropertyChanged += _workspaceService_PropertyChanged;
376 private void _workspaceService_PropertyChanged(
object sender,
System.ComponentModel.PropertyChangedEventArgs e)
378 switch (e.PropertyName)