mirror of
https://github.com/transmission/transmission.git
synced 2025-12-24 20:35:36 +00:00
when adding new files and the download/incomplete folder doesn't exist, give a sheet to choose new location/cancel
This commit is contained in:
@@ -100,6 +100,7 @@
|
||||
|
||||
- (void) openFiles: (NSArray *) filenames;
|
||||
- (void) openFiles: (NSArray *) filenames ignoreDownloadFolder: (BOOL) ignore forceDeleteTorrent: (BOOL) delete;
|
||||
- (void) openFilesWithDict: (NSDictionary *) dictionary;
|
||||
- (void) openFilesAsk: (NSMutableArray *) files forceDeleteTorrent: (BOOL) delete;
|
||||
- (void) openFilesAskWithDict: (NSDictionary *) dictionary;
|
||||
- (void) openShowSheet: (id) sender;
|
||||
|
||||
@@ -575,6 +575,55 @@ static void sleepCallBack(void * controller, io_service_t y, natural_t messageTy
|
||||
return;
|
||||
}
|
||||
|
||||
if ([fDefaults boolForKey: @"UseIncompleteDownloadFolder"]
|
||||
&& access([[[fDefaults stringForKey: @"IncompleteDownloadFolder"] stringByExpandingTildeInPath] UTF8String], 0))
|
||||
{
|
||||
NSOpenPanel * panel = [NSOpenPanel openPanel];
|
||||
|
||||
[panel setPrompt: @"Select"];
|
||||
[panel setAllowsMultipleSelection: NO];
|
||||
[panel setCanChooseFiles: NO];
|
||||
[panel setCanChooseDirectories: YES];
|
||||
[panel setCanCreateDirectories: YES];
|
||||
|
||||
[panel setMessage: NSLocalizedString(@"The incomplete download folder cannot be found."
|
||||
" Choose a new incomplete folder or cancel to not use an incomplete folder.",
|
||||
"Default incomplete folder cannot be found alert -> message")];
|
||||
|
||||
NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
filenames, @"Filenames",
|
||||
[NSNumber numberWithBool: ignore], @"Ignore",
|
||||
[NSNumber numberWithBool: delete], @"Delete", nil];
|
||||
|
||||
[panel beginSheetForDirectory: nil file: nil types: nil modalForWindow: fWindow modalDelegate: self
|
||||
didEndSelector: @selector(incompleteChoiceClosed:returnCode:contextInfo:) contextInfo: dict];
|
||||
return;
|
||||
}
|
||||
if ([downloadChoice isEqualToString: @"Constant"]
|
||||
&& access([[[fDefaults stringForKey: @"DownloadFolder"] stringByExpandingTildeInPath] UTF8String], 0))
|
||||
{
|
||||
NSOpenPanel * panel = [NSOpenPanel openPanel];
|
||||
|
||||
[panel setPrompt: @"Select"];
|
||||
[panel setAllowsMultipleSelection: NO];
|
||||
[panel setCanChooseFiles: NO];
|
||||
[panel setCanChooseDirectories: YES];
|
||||
[panel setCanCreateDirectories: YES];
|
||||
|
||||
[panel setMessage: NSLocalizedString(@"The download folder cannot be found."
|
||||
" Choose a new download folder to start the transfer.",
|
||||
"Default incomplete folder cannot be found alert -> message")];
|
||||
|
||||
NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
filenames, @"Filenames",
|
||||
[NSNumber numberWithBool: ignore], @"Ignore",
|
||||
[NSNumber numberWithBool: delete], @"Delete", nil];
|
||||
|
||||
[panel beginSheetForDirectory: nil file: nil types: nil modalForWindow: fWindow modalDelegate: self
|
||||
didEndSelector: @selector(downloadChoiceClosed:returnCode:contextInfo:) contextInfo: dict];
|
||||
return;
|
||||
}
|
||||
|
||||
Torrent * torrent;
|
||||
NSString * torrentPath;
|
||||
NSEnumerator * enumerator = [filenames objectEnumerator];
|
||||
@@ -600,6 +649,36 @@ static void sleepCallBack(void * controller, io_service_t y, natural_t messageTy
|
||||
[self updateTorrentsInQueue];
|
||||
}
|
||||
|
||||
- (void) incompleteChoiceClosed: (NSOpenPanel *) openPanel returnCode: (int) code contextInfo: (NSDictionary *) dictionary
|
||||
{
|
||||
if (code == NSOKButton)
|
||||
[fDefaults setObject: [[openPanel filenames] objectAtIndex: 0] forKey: @"IncompleteDownloadFolder"];
|
||||
else
|
||||
[fDefaults setBool: NO forKey: @"UseIncompleteDownloadFolder"];
|
||||
|
||||
[self performSelectorOnMainThread: @selector(openFilesWithDict:) withObject: dictionary waitUntilDone: NO];
|
||||
}
|
||||
|
||||
- (void) downloadChoiceClosed: (NSOpenPanel *) openPanel returnCode: (int) code contextInfo: (NSDictionary *) dictionary
|
||||
{
|
||||
if (code == NSOKButton)
|
||||
{
|
||||
[fDefaults setObject: [[openPanel filenames] objectAtIndex: 0] forKey: @"DownloadFolder"];
|
||||
[self performSelectorOnMainThread: @selector(openFilesWithDict:) withObject: dictionary waitUntilDone: NO];
|
||||
}
|
||||
else
|
||||
[dictionary release];
|
||||
}
|
||||
|
||||
- (void) openFilesWithDict: (NSDictionary *) dictionary
|
||||
{
|
||||
[self openFiles: [dictionary objectForKey: @"Filenames"]
|
||||
ignoreDownloadFolder: [[dictionary objectForKey: @"Ignore"] boolValue]
|
||||
forceDeleteTorrent: [[dictionary objectForKey: @"Delete"] boolValue]];
|
||||
|
||||
[dictionary release];
|
||||
}
|
||||
|
||||
//called by the main open method to show sheet for choosing download location
|
||||
- (void) openFilesAsk: (NSMutableArray *) files forceDeleteTorrent: (BOOL) delete
|
||||
{
|
||||
|
||||
@@ -700,6 +700,7 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
|
||||
[panel setAllowsMultipleSelection: NO];
|
||||
[panel setCanChooseFiles: NO];
|
||||
[panel setCanChooseDirectories: YES];
|
||||
[panel setCanCreateDirectories: YES];
|
||||
|
||||
[panel setMessage: [NSString stringWithFormat: NSLocalizedString(@"Select the download folder for \"%@\"",
|
||||
"Open torrent -> select destination folder"), [self name]]];
|
||||
@@ -719,27 +720,27 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
|
||||
|
||||
- (void) destinationChoiceClosed: (NSOpenPanel *) openPanel returnCode: (int) code contextInfo: (void *) context
|
||||
{
|
||||
if (code != NSOKButton)
|
||||
return;
|
||||
|
||||
NSString * folder = [[openPanel filenames] objectAtIndex: 0];
|
||||
if (code == NSOKButton)
|
||||
if (fUseIncompleteFolder)
|
||||
{
|
||||
if (fUseIncompleteFolder)
|
||||
{
|
||||
[fIncompleteFolder release];
|
||||
fIncompleteFolder = [folder retain];
|
||||
[self setDownloadFolder: nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
[fDownloadFolder release];
|
||||
fDownloadFolder = folder;
|
||||
[self setDownloadFolder: fDownloadFolder];
|
||||
}
|
||||
|
||||
[self startTransfer];
|
||||
[self update];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateInfoSettings" object: nil];
|
||||
[fIncompleteFolder release];
|
||||
fIncompleteFolder = [folder retain];
|
||||
[self setDownloadFolder: nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
[fDownloadFolder release];
|
||||
fDownloadFolder = folder;
|
||||
[self setDownloadFolder: fDownloadFolder];
|
||||
}
|
||||
|
||||
[self startTransfer];
|
||||
[self update];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateInfoSettings" object: nil];
|
||||
}
|
||||
|
||||
- (BOOL) alertForMoveFolderAvailable
|
||||
|
||||
Reference in New Issue
Block a user