diff options
author | sr55 <[email protected]> | 2016-11-16 19:55:22 +0000 |
---|---|---|
committer | sr55 <[email protected]> | 2016-11-16 19:55:31 +0000 |
commit | b9c5daa5663a78f8d68af69f58cf476d0ccaa8b6 (patch) | |
tree | 5a5dc8aa2d57f0da3272f772b06fe05aa117c57c /win | |
parent | ef33de1a07c79ad0f6d676b5153de1548dc01709 (diff) |
WinGui: Prompt to create folder when the destination path does not exist. Fixes #394
Diffstat (limited to 'win')
-rw-r--r-- | win/CS/HandBrakeWPF/Properties/Resources.Designer.cs | 45 | ||||
-rw-r--r-- | win/CS/HandBrakeWPF/Properties/Resources.resx | 19 | ||||
-rw-r--r-- | win/CS/HandBrakeWPF/Utilities/DirectoryUtilities.cs | 20 | ||||
-rw-r--r-- | win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs | 52 |
4 files changed, 115 insertions, 21 deletions
diff --git a/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs b/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs index e8e956363..b692aa83f 100644 --- a/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs +++ b/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs @@ -594,6 +594,25 @@ namespace HandBrakeWPF.Properties { }
/// <summary>
+ /// Looks up a localized string similar to Create Folder?.
+ /// </summary>
+ public static string DirectoryUtils_CreateFolder {
+ get {
+ return ResourceManager.GetString("DirectoryUtils_CreateFolder", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to The folder you are trying to write to does not exist. Would you like HandBrake to create the following folder?
+ ///{0}.
+ /// </summary>
+ public static string DirectoryUtils_CreateFolderMsg {
+ get {
+ return ResourceManager.GetString("DirectoryUtils_CreateFolderMsg", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to Error.
/// </summary>
public static string Error {
@@ -684,7 +703,7 @@ namespace HandBrakeWPF.Properties { }
/// <summary>
- /// Looks up a localized string similar to The entered destination contained illegal characters. You must fix the path and filename before continuing..
+ /// Looks up a localized string similar to The entered destination path contained illegal characters and will not be updated..
/// </summary>
public static string Main_InvalidDestination {
get {
@@ -729,11 +748,11 @@ namespace HandBrakeWPF.Properties { }
/// <summary>
- /// Looks up a localized string similar to You do not have the appropriate folder permissions to write files into the directory you have chosen..
+ /// Looks up a localized string similar to The output directory you have chosen either does not exist, or you do not have permissions to write files to it..
/// </summary>
- public static string Main_NoPermissionsOnDirectory {
+ public static string Main_NoPermissionsOrMissingDirectory {
get {
- return ResourceManager.GetString("Main_NoPermissionsOnDirectory", resourceCulture);
+ return ResourceManager.GetString("Main_NoPermissionsOrMissingDirectory", resourceCulture);
}
}
@@ -1107,6 +1126,24 @@ namespace HandBrakeWPF.Properties { }
/// <summary>
+ /// Looks up a localized string similar to Unable to launch destination directory..
+ /// </summary>
+ public static string MainViewModel_UnableToLaunchDestDir {
+ get {
+ return ResourceManager.GetString("MainViewModel_UnableToLaunchDestDir", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Please check that you have a valid destination directory..
+ /// </summary>
+ public static string MainViewModel_UnableToLaunchDestDirSolution {
+ get {
+ return ResourceManager.GetString("MainViewModel_UnableToLaunchDestDirSolution", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to Notice.
/// </summary>
public static string Notice {
diff --git a/win/CS/HandBrakeWPF/Properties/Resources.resx b/win/CS/HandBrakeWPF/Properties/Resources.resx index be0adb41f..6791f06e6 100644 --- a/win/CS/HandBrakeWPF/Properties/Resources.resx +++ b/win/CS/HandBrakeWPF/Properties/Resources.resx @@ -465,7 +465,7 @@ Do you wish to proceed?</value> <value>You must first set the destination path for the output file before adding to the queue.</value>
</data>
<data name="Main_InvalidDestination" xml:space="preserve">
- <value>The entered destination contained illegal characters. You must fix the path and filename before continuing.</value>
+ <value>The entered destination path contained illegal characters and will not be updated.</value>
</data>
<data name="Preview" xml:space="preserve">
<value>Preview</value>
@@ -809,7 +809,20 @@ Your preset file will be archived and new one created. You will need to re-creat <data name="UserSettings_UnableToLoadSolution" xml:space="preserve">
<value>Your user settings file appears to be inaccessible or corrupted. You may have to delete the file and let HandBrake generate a new one.</value>
</data>
- <data name="Main_NoPermissionsOnDirectory" xml:space="preserve">
- <value>You do not have the appropriate folder permissions to write files into the directory you have chosen.</value>
+ <data name="Main_NoPermissionsOrMissingDirectory" xml:space="preserve">
+ <value>The output directory you have chosen either does not exist, or you do not have permissions to write files to it.</value>
+ </data>
+ <data name="DirectoryUtils_CreateFolder" xml:space="preserve">
+ <value>Create Folder?</value>
+ </data>
+ <data name="DirectoryUtils_CreateFolderMsg" xml:space="preserve">
+ <value>The folder you are trying to write to does not exist. Would you like HandBrake to create the following folder?
+{0}</value>
+ </data>
+ <data name="MainViewModel_UnableToLaunchDestDir" xml:space="preserve">
+ <value>Unable to launch destination directory.</value>
+ </data>
+ <data name="MainViewModel_UnableToLaunchDestDirSolution" xml:space="preserve">
+ <value>Please check that you have a valid destination directory.</value>
</data>
</root>
\ No newline at end of file diff --git a/win/CS/HandBrakeWPF/Utilities/DirectoryUtilities.cs b/win/CS/HandBrakeWPF/Utilities/DirectoryUtilities.cs index 45450f4eb..0f63ebfce 100644 --- a/win/CS/HandBrakeWPF/Utilities/DirectoryUtilities.cs +++ b/win/CS/HandBrakeWPF/Utilities/DirectoryUtilities.cs @@ -11,6 +11,10 @@ namespace HandBrakeWPF.Utilities { using System; using System.IO; + using System.Windows; + + using HandBrakeWPF.Properties; + using HandBrakeWPF.Services.Interfaces; /// <summary> /// The directory utilities. @@ -42,11 +46,25 @@ namespace HandBrakeWPF.Utilities /// Simple way of checking if a directory is writeable. /// </summary> /// <param name="dirPath">Path to check</param> + /// <param name="createDirectoryPrompt"> + /// Prompt to create directory if it doesn't exist. + /// </param> + /// <param name="errorService"> + /// An instance of the error service to allow prompting. + /// </param> /// <returns>True if writable</returns> - public static bool IsWritable(string dirPath) + public static bool IsWritable(string dirPath, bool createDirectoryPrompt, IErrorService errorService) { try { + if (!Directory.Exists(dirPath)) + { + MessageBoxResult result = errorService.ShowMessageBox(string.Format(Resources.DirectoryUtils_CreateFolderMsg, dirPath), Resources.DirectoryUtils_CreateFolder, MessageBoxButton.YesNo, MessageBoxImage.Question); + if (MessageBoxResult.Yes == result) + { + Directory.CreateDirectory(dirPath); + } + } using (File.Create(Path.Combine(dirPath, Path.GetRandomFileName()), 1, FileOptions.DeleteOnClose)) { } diff --git a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs index b1e231412..957ce4d29 100644 --- a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs @@ -698,21 +698,25 @@ namespace HandBrakeWPF.ViewModels {
if (!Equals(this.CurrentTask.Destination, value))
{
- this.CurrentTask.Destination = value;
- this.NotifyOfPropertyChange(() => this.Destination);
-
- if (!string.IsNullOrEmpty(this.CurrentTask.Destination))
+ if (!string.IsNullOrEmpty(value))
{
string ext = string.Empty;
try
{
- ext = Path.GetExtension(this.CurrentTask.Destination);
+ ext = Path.GetExtension(value);
}
catch (ArgumentException)
{
- this.errorService.ShowMessageBox(Resources.Main_InvalidDestination, Resources.Error, MessageBoxButton.OK, MessageBoxImage.Error);
+ this.errorService.ShowMessageBox(
+ Resources.Main_InvalidDestination,
+ Resources.Error,
+ MessageBoxButton.OK,
+ MessageBoxImage.Error);
}
+ this.CurrentTask.Destination = value;
+ this.NotifyOfPropertyChange(() => this.Destination);
+
switch (ext)
{
case ".mkv":
@@ -726,6 +730,11 @@ namespace HandBrakeWPF.ViewModels break;
}
}
+ else
+ {
+ this.CurrentTask.Destination = string.Empty;
+ this.NotifyOfPropertyChange(() => this.Destination);
+ }
}
}
}
@@ -1397,9 +1406,9 @@ namespace HandBrakeWPF.ViewModels return false;
}
- if (!DirectoryUtilities.IsWritable(Path.GetDirectoryName(this.CurrentTask.Destination)))
+ if (!DirectoryUtilities.IsWritable(Path.GetDirectoryName(this.CurrentTask.Destination), true, this.errorService))
{
- this.errorService.ShowMessageBox(Resources.Main_NoPermissionsOnDirectory, Resources.Error, MessageBoxButton.OK, MessageBoxImage.Error);
+ this.errorService.ShowMessageBox(Resources.Main_NoPermissionsOrMissingDirectory, Resources.Error, MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
@@ -1794,14 +1803,31 @@ namespace HandBrakeWPF.ViewModels {
if (!string.IsNullOrEmpty(this.Destination))
{
- string directory = Path.GetDirectoryName(this.Destination);
- if (!string.IsNullOrEmpty(directory))
+ try
{
- Process.Start(directory);
+ string directory = Path.GetDirectoryName(this.Destination);
+ if (!string.IsNullOrEmpty(directory) && Directory.Exists(directory))
+ {
+ Process.Start(directory);
+ }
+ else
+ {
+ MessageBoxResult result =
+ errorService.ShowMessageBox(
+ string.Format(Resources.DirectoryUtils_CreateFolderMsg, directory),
+ Resources.DirectoryUtils_CreateFolder,
+ MessageBoxButton.YesNo,
+ MessageBoxImage.Question);
+ if (MessageBoxResult.Yes == result)
+ {
+ Directory.CreateDirectory(directory);
+ Process.Start(directory);
+ }
+ }
}
- else
+ catch (Exception exc)
{
- Process.Start(AppDomain.CurrentDomain.BaseDirectory);
+ this.errorService.ShowError(Resources.MainViewModel_UnableToLaunchDestDir, Resources.MainViewModel_UnableToLaunchDestDirSolution, exc);
}
}
}
|