aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrowanbeentje <rowan@beent.je>2013-03-03 21:01:13 +0000
committerrowanbeentje <rowan@beent.je>2013-03-03 21:01:13 +0000
commit5ab13b27148a09e5bbf28c9ecfb7a8303b42462d (patch)
treedcaf953ecd73584a08fcf408d971c4d1e324e6d2
parentdc01fc47378ae2af794faaeb230ef01c7cd63811 (diff)
downloadsequelpro-5ab13b27148a09e5bbf28c9ecfb7a8303b42462d.tar.gz
sequelpro-5ab13b27148a09e5bbf28c9ecfb7a8303b42462d.tar.bz2
sequelpro-5ab13b27148a09e5bbf28c9ecfb7a8303b42462d.zip
- Detect deleted or non-writable folders for export targets and give appropriate errors (particularly for saved paths), addressing Issue #1566
-rw-r--r--Source/SPExportFileUtilities.m38
1 files changed, 34 insertions, 4 deletions
diff --git a/Source/SPExportFileUtilities.m b/Source/SPExportFileUtilities.m
index 13959ca1..ea5bee2e 100644
--- a/Source/SPExportFileUtilities.m
+++ b/Source/SPExportFileUtilities.m
@@ -143,6 +143,8 @@ SPExportErrorChoice;
{
// Get the number of files that already exist as well as couldn't be created because of other reasons
NSUInteger filesAlreadyExisting = 0;
+ NSUInteger parentFoldersMissing = 0;
+ NSUInteger parentFoldersNotWritable = 0;
NSUInteger filesFailed = 0;
for (SPExportFile *file in files)
@@ -168,6 +170,14 @@ SPExportErrorChoice;
[exporters removeObjectsInArray:exportersToRemove];
[exportersToRemove release];
+
+ // Check the parent folder to see if it still is present
+ BOOL parentIsFolder = NO;
+ if (![[NSFileManager defaultManager] fileExistsAtPath:[[[file exportFilePath] stringByDeletingLastPathComponent] stringByExpandingTildeInPath] isDirectory:&parentIsFolder] || !parentIsFolder) {
+ parentFoldersMissing++;
+ } else if (![[NSFileManager defaultManager] isWritableFileAtPath:[[[file exportFilePath] stringByDeletingLastPathComponent] stringByExpandingTildeInPath]]) {
+ parentFoldersNotWritable++;
+ }
}
}
@@ -208,20 +218,40 @@ SPExportErrorChoice;
[[[alert buttons] objectAtIndex:2] setKeyEquivalent:@"s"];
[[[alert buttons] objectAtIndex:2] setKeyEquivalentModifierMask:NSCommandKeyMask];
}
- }
+ }
// If one or multiple files failed, but only due to unhandled errors, show a short dialog
else {
if (filesFailed == 1) {
[alert setMessageText:[NSString stringWithFormat:NSLocalizedString(@"“%@” could not be created", @"Export file creation error title"), [[[files objectAtIndex:0] exportFilePath] lastPathComponent]]];
- [alert setInformativeText:NSLocalizedString(@"An unhandled error occurred when attempting to create the export file. Please check the details and try again.", @"Export file creation error explanatory text")];
+ if (parentFoldersMissing) {
+ [alert setInformativeText:NSLocalizedString(@"The target export folder no longer exists. Please select a new export location and try again.", @"Export folder missing explanatory text")];
+ } else if (parentFoldersNotWritable) {
+ [alert setInformativeText:NSLocalizedString(@"The target export folder is not writable. Please select a new export location and try again.", @"Export folder not writable explanatory text")];
+ } else {
+ [alert setInformativeText:NSLocalizedString(@"An unhandled error occurred when attempting to create the export file. Please check the details and try again.", @"Export file creation error explanatory text")];
+ }
}
else if (filesFailed == [exportFiles count]) {
[alert setMessageText:[NSString stringWithFormat:NSLocalizedString(@"No files could be created", @"All export files creation error title")]];
- [alert setInformativeText:NSLocalizedString(@"An unhandled error occurred when attempting to create each of the export files. Please check the details and try again.", @"All export files creation error explanatory text")];
+ if (parentFoldersMissing == [exportFiles count]) {
+ [alert setInformativeText:NSLocalizedString(@"The target export folder no longer exists. Please select a new export location and try again.", @"Export folder missing explanatory text")];
+ } else if (parentFoldersMissing) {
+ [alert setInformativeText:NSLocalizedString(@"Some of the target export folders no longer exist. Please select a new export location and try again.", @"Some export folders missing explanatory text")];
+ } else if (parentFoldersNotWritable) {
+ [alert setInformativeText:NSLocalizedString(@"Some of the target export folders are not writable. Please select a new export location and try again.", @"Some export folders not writable explanatory text")];
+ } else {
+ [alert setInformativeText:NSLocalizedString(@"An unhandled error occurred when attempting to create each of the export files. Please check the details and try again.", @"All export files creation error explanatory text")];
+ }
}
else {
[alert setMessageText:[NSString stringWithFormat:NSLocalizedString(@"%lu files could not be created", @"Export files creation error title"), filesFailed]];
- [alert setInformativeText:[NSString stringWithFormat:NSLocalizedString(@"An unhandled error occurred when attempting to create %lu of the export files. Please check the details and try again.", @"Export files creation error explanatory text"), filesFailed]];
+ if (parentFoldersMissing) {
+ [alert setInformativeText:[NSString stringWithFormat:NSLocalizedString(@"%lu of the export files could not be created because their target export folder no longer exists; please select a new export location and try again.", @"Export folder missing for some files explanatory text"), parentFoldersMissing]];
+ } else if (parentFoldersNotWritable) {
+ [alert setInformativeText:[NSString stringWithFormat:NSLocalizedString(@"%lu of the export files could not be created because their target export folder is not writable; please select a new export location and try again.", @"Export folder not writable for some files explanatory text"), parentFoldersNotWritable]];
+ } else {
+ [alert setInformativeText:[NSString stringWithFormat:NSLocalizedString(@"An unhandled error occurred when attempting to create %lu of the export files. Please check the details and try again.", @"Export files creation error explanatory text"), filesFailed]];
+ }
}
[alert addButtonWithTitle:NSLocalizedString(@"Cancel", @"cancel button")];