diff --git a/macosx/Controller.h b/macosx/Controller.h index bb71a833c..efbb438ba 100644 --- a/macosx/Controller.h +++ b/macosx/Controller.h @@ -133,6 +133,8 @@ - (void) removeDeleteTorrent: (id) sender; - (void) removeDeleteDataAndTorrent: (id) sender; +- (void) moveDataFiles: (id) sender; + - (void) copyTorrentFile: (id) sender; - (void) copyTorrentFileForTorrents: (NSMutableArray *) torrents; - (void) saveTorrentCopySheetClosed: (NSSavePanel *) panel returnCode: (int) code diff --git a/macosx/Controller.m b/macosx/Controller.m index d169032b6..706dc0630 100644 --- a/macosx/Controller.m +++ b/macosx/Controller.m @@ -983,8 +983,7 @@ static void sleepCallBack(void * controller, io_service_t y, natural_t messageTy [self updateTorrentHistory]; } -- (void) removeTorrents: (NSArray *) torrents - deleteData: (BOOL) deleteData deleteTorrent: (BOOL) deleteTorrent +- (void) removeTorrents: (NSArray *) torrents deleteData: (BOOL) deleteData deleteTorrent: (BOOL) deleteTorrent { [torrents retain]; int active = 0, downloading = 0; @@ -1135,6 +1134,15 @@ static void sleepCallBack(void * controller, io_service_t y, natural_t messageTy deleteData: YES deleteTorrent: YES]; } +- (void) moveDataFiles: (id) sender +{ + NSEnumerator * enumerator = [[fDisplayedTorrents objectsAtIndexes: [fTableView selectedRowIndexes]] objectEnumerator]; + Torrent * torrent; + while ((torrent = [enumerator nextObject])) + [torrent moveTorrent]; +} + +#warning move to Torrent - (void) copyTorrentFile: (id) sender { [self copyTorrentFileForTorrents: [[NSMutableArray alloc] initWithArray: @@ -2659,6 +2667,10 @@ static void sleepCallBack(void * controller, io_service_t y, natural_t messageTy return NO; } + //enable move torrent file item + if (action == @selector(moveDataFiles:)) + return canUseTable && [fTableView numberOfSelectedRows] > 0; + //enable copy torrent file item if (action == @selector(copyTorrentFile:)) return canUseTable && [fTableView numberOfSelectedRows] > 0; diff --git a/macosx/English.lproj/MainMenu.nib/classes.nib b/macosx/English.lproj/MainMenu.nib/classes.nib index 252e18cf8..9989f78b2 100644 --- a/macosx/English.lproj/MainMenu.nib/classes.nib +++ b/macosx/English.lproj/MainMenu.nib/classes.nib @@ -11,6 +11,7 @@ doNothing = id; linkForums = id; linkHomepage = id; + moveDataFiles = id; openShowSheet = id; openURLCancelEndSheet = id; openURLEndSheet = id; diff --git a/macosx/English.lproj/MainMenu.nib/keyedobjects.nib b/macosx/English.lproj/MainMenu.nib/keyedobjects.nib index bd387e3b8..d621eec52 100644 Binary files a/macosx/English.lproj/MainMenu.nib/keyedobjects.nib and b/macosx/English.lproj/MainMenu.nib/keyedobjects.nib differ diff --git a/macosx/Torrent.h b/macosx/Torrent.h index c07cbc956..449469204 100644 --- a/macosx/Torrent.h +++ b/macosx/Torrent.h @@ -106,15 +106,16 @@ - (int) downloadLimit; - (void) setDownloadLimit: (int) limit; -- (void) updateSpeedSetting; +- (void) updateSpeedSetting; - (void) setWaitToStart: (BOOL) wait; - (BOOL) waitingToStart; -- (void) revealData; -- (void) revealPublicTorrent; -- (void) trashData; -- (void) trashTorrent; +- (void) revealData; +- (void) revealPublicTorrent; +- (void) trashData; +- (void) trashTorrent; +- (void) moveTorrent; - (BOOL) alertForRemainingDiskSpace; - (BOOL) alertForFolderAvailable; diff --git a/macosx/Torrent.m b/macosx/Torrent.m index 8650a8e1e..2705c72f1 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -691,6 +691,58 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 [self trashFile: [self publicTorrentLocation]]; } +- (void) moveTorrent +{ + NSOpenPanel * panel = [NSOpenPanel openPanel]; + + [panel setPrompt: NSLocalizedString(@"Select", "Move torrent -> prompt")]; + [panel setAllowsMultipleSelection: NO]; + [panel setCanChooseFiles: NO]; + [panel setCanChooseDirectories: YES]; + [panel setCanCreateDirectories: YES]; + + [panel setMessage: [NSString stringWithFormat: NSLocalizedString(@"Select the new folder for \"%@\"", + "Move torrent -> select destination folder"), [self name]]]; + + [[NSNotificationCenter defaultCenter] postNotificationName: @"MakeWindowKey" object: nil]; + [panel beginSheetForDirectory: nil file: nil types: nil modalForWindow: [NSApp keyWindow] modalDelegate: self + didEndSelector: @selector(moveTorrentChoiceClosed:returnCode:contextInfo:) contextInfo: nil]; +} + +- (void) moveTorrentChoiceClosed: (NSOpenPanel *) openPanel returnCode: (int) code contextInfo: (void *) context +{ + if (code != NSOKButton) + return; + + NSString * folder = [[openPanel filenames] objectAtIndex: 0]; + if (![[self downloadFolder] isEqualToString: folder] || ![fDownloadFolder isEqualToString: folder]) + { + //pause without actually stopping + tr_setDownloadLimit(fHandle, 0); + tr_setUploadLimit(fHandle, 0); + + if ([[NSFileManager defaultManager] movePath: [[self downloadFolder] stringByAppendingPathComponent: [self name]] + toPath: [folder stringByAppendingPathComponent: [self name]] handler: nil]) + { + //get rid of both incomplete folder and download folder + fUseIncompleteFolder = NO; + if (fIncompleteFolder) + { + [fIncompleteFolder release]; + fIncompleteFolder = nil; + } + [fDownloadFolder release]; + fDownloadFolder = [folder retain]; + + tr_torrentSetFolder(fHandle, [fDownloadFolder UTF8String]); + + [[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateInfoSettings" object: nil]; + } + + [self updateSpeedSetting]; + } +} + - (BOOL) alertForRemainingDiskSpace { if ([self allDownloaded] || ![fDefaults boolForKey: @"WarningRemainingSpace"])