private void InitImportMovieOption() { ImportProgressVisibility = Visibility.Hidden; ImportProgressValue = 0; ImportStatusMessage = ""; ImportButtonIsEnabled = false; if (!string.IsNullOrEmpty(Sys.Settings.FF7Exe) & File.Exists(Sys.Settings.FF7Exe)) { ImportButtonIsEnabled = !GameConverter.AllMovieFilesExist(Sys.Settings.MovieFolder); Dictionary <string, string[]> missingMovies = GameConverter.GetMissingMovieFiles(Sys.Settings.MovieFolder); if (missingMovies.Count > 0) { List <string> discsToInsert = GetDiscsToInsertForMissingMovies(missingMovies); ImportStatusMessage = string.Format(ResourceHelper.Get(StringKey.InsertAndClickImport), discsToInsert[0]); } else { ImportStatusMessage = ResourceHelper.Get(StringKey.AllMovieFilesAlreadyImported); } } else { ImportStatusMessage = ResourceHelper.Get(StringKey.Ff7ExeNotFoundYouMayNeedToConfigure); } }
private void InitImportMovieOption() { ImportProgressVisibility = Visibility.Hidden; ImportProgressValue = 0; ImportStatusMessage = ""; ImportButtonIsEnabled = !GameConverter.AllMovieFilesExist(Sys.Settings.MovieFolder); Dictionary <string, string[]> missingMovies = GameConverter.GetMissingMovieFiles(Sys.Settings.MovieFolder); if (missingMovies.Count > 0) { List <string> discsToInsert = GetDiscsToInsertForMissingMovies(missingMovies); ImportStatusMessage = $"Insert {discsToInsert[0]} and click 'Import'."; } }
internal void ImportMissingMovies() { string warningMessage = string.Format(ResourceHelper.Get(StringKey.ImportMissingMoviesWarningMessage), Sys.Settings.MovieFolder); MessageDialogViewModel result = MessageDialogWindow.Show(warningMessage, ResourceHelper.Get(StringKey.Warning), MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result.Result == MessageBoxResult.No) { return; } ImportButtonIsEnabled = false; ImportProgressVisibility = Visibility.Visible; bool cancelProcess = false; int totalFiles = 0; int filesCopied = 0; Task importTask = Task.Factory.StartNew(() => { Dictionary <string, string[]> missingMovies = GameConverter.GetMissingMovieFiles(Sys.Settings.MovieFolder); List <string> discsToInsert = GetDiscsToInsertForMissingMovies(missingMovies); totalFiles = missingMovies.Count; foreach (string disc in discsToInsert) { List <string> driveLetters; do { SetImportStatus($"{ResourceHelper.Get(StringKey.LookingFor)} {disc} ..."); driveLetters = GameLauncher.GetDriveLetters(disc); if (driveLetters.Count == 0) { SetImportStatus(string.Format(ResourceHelper.Get(StringKey.InsertToContinue), disc)); App.Current.Dispatcher.Invoke(() => { string discNotFoundMessage = string.Format(ResourceHelper.Get(StringKey.PleaseInsertToContinueCopying), disc); MessageDialogViewModel insertDiscResult = MessageDialogWindow.Show(discNotFoundMessage, ResourceHelper.Get(StringKey.InsertDisc), MessageBoxButton.OKCancel, MessageBoxImage.Warning); cancelProcess = (insertDiscResult.Result == MessageBoxResult.Cancel); }); } if (cancelProcess) { return; } } while (driveLetters.Count == 0); SetImportStatus($"{string.Format(ResourceHelper.Get(StringKey.FoundDiscAt), disc)} {string.Join(" ", driveLetters)} ..."); // loop over missing files on the found disc and copy to data/movies destination foreach (string movieFile in missingMovies.Where(kv => kv.Value.Any(s => s.Equals(disc, StringComparison.InvariantCultureIgnoreCase))) .Select(kv => kv.Key)) { foreach (string drive in driveLetters) { string fullTargetPath = Path.Combine(Sys.Settings.MovieFolder, movieFile); string sourceFilePath = Path.Combine(drive, "ff7", "movies", movieFile); if (File.Exists(sourceFilePath)) { if (File.Exists(fullTargetPath)) { SetImportStatus($"{ResourceHelper.Get(StringKey.Overwriting)} {movieFile} ..."); } else { SetImportStatus($"{ResourceHelper.Get(StringKey.Copying)} {movieFile} ..."); } File.Copy(sourceFilePath, fullTargetPath, true); filesCopied++; UpdateImportProgress(filesCopied, totalFiles); break; } else { SetImportStatus(string.Format(ResourceHelper.Get(StringKey.FailedToFindAt), movieFile, sourceFilePath)); } } } } }); importTask.ContinueWith((taskResult) => { if (taskResult.IsFaulted) { Logger.Error(taskResult.Exception); SetImportStatus($"{ResourceHelper.Get(StringKey.AnErrorOccurredCopyingMovies)}: {taskResult.Exception.GetBaseException().Message}"); } else if (cancelProcess) { InitImportMovieOption(); } else { if (filesCopied == totalFiles) { SetImportStatus(ResourceHelper.Get(StringKey.SuccessfullyCopiedMovies)); } else { SetImportStatus(ResourceHelper.Get(StringKey.FinishedCopyingMoviesSomeFailed)); } ImportButtonIsEnabled = !GameConverter.AllMovieFilesExist(Sys.Settings.MovieFolder); ImportProgressValue = 0; ImportProgressVisibility = Visibility.Hidden; } }); }
internal void ImportMissingMovies() { string warningMessage = $"This will copy missing movie files from your game discs to your movie path in 'General Settings'.\n\nThis process will overwrite any movie files already in {Sys.Settings.MovieFolder}.\n\nDo you want to proceed?"; MessageDialogViewModel result = MessageDialogWindow.Show(warningMessage, "Import Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result.Result == MessageBoxResult.No) { return; } ImportButtonIsEnabled = false; ImportProgressVisibility = Visibility.Visible; bool cancelProcess = false; int totalFiles = 0; int filesCopied = 0; Task importTask = Task.Factory.StartNew(() => { Dictionary <string, string[]> missingMovies = GameConverter.GetMissingMovieFiles(Sys.Settings.MovieFolder); List <string> discsToInsert = GetDiscsToInsertForMissingMovies(missingMovies); totalFiles = missingMovies.Count; foreach (string disc in discsToInsert) { List <string> driveLetters; do { SetImportStatus($"Looking for {disc} ..."); driveLetters = GameLauncher.GetDriveLetters(disc); if (driveLetters.Count == 0) { SetImportStatus($"Insert {disc} to continue."); App.Current.Dispatcher.Invoke(() => { string discNotFoundMessage = $"Please insert {disc} to continue copying missing movie files.\n\nClick 'Cancel' to stop the process."; MessageDialogViewModel insertDiscResult = MessageDialogWindow.Show(discNotFoundMessage, "Insert Disc", MessageBoxButton.OKCancel, MessageBoxImage.Warning); cancelProcess = (insertDiscResult.Result == MessageBoxResult.Cancel); }); } if (cancelProcess) { return; } } while (driveLetters.Count == 0); SetImportStatus($"Found {disc} at {string.Join(" ", driveLetters)} ..."); // loop over missing files on the found disc and copy to data/movies destination foreach (string movieFile in missingMovies.Where(kv => kv.Value.Any(s => s.Equals(disc, StringComparison.InvariantCultureIgnoreCase))) .Select(kv => kv.Key)) { foreach (string drive in driveLetters) { string fullTargetPath = Path.Combine(Sys.Settings.MovieFolder, movieFile); string sourceFilePath = Path.Combine(drive, "ff7", "movies", movieFile); if (File.Exists(sourceFilePath)) { if (File.Exists(fullTargetPath)) { SetImportStatus($"Overwriting {movieFile} ..."); } else { SetImportStatus($"Copying {movieFile} ..."); } File.Copy(sourceFilePath, fullTargetPath, true); filesCopied++; UpdateImportProgress(filesCopied, totalFiles); break; } else { SetImportStatus($"Failed to find {movieFile} at {sourceFilePath}"); } } } } }); importTask.ContinueWith((taskResult) => { if (taskResult.IsFaulted) { Logger.Error(taskResult.Exception); SetImportStatus($"An error occurred while copying movies: {taskResult.Exception.GetBaseException().Message}"); } else if (cancelProcess) { InitImportMovieOption(); } else { if (filesCopied == totalFiles) { SetImportStatus("Successfully copied movies."); } else { SetImportStatus("Finished copying movies. Some movies failed to copy. Check app log for details."); } ImportButtonIsEnabled = !GameConverter.AllMovieFilesExist(Sys.Settings.MovieFolder); ImportProgressValue = 0; ImportProgressVisibility = Visibility.Hidden; } }); }