diff --git a/macosx/Defaults.plist b/macosx/Defaults.plist
index d7d3e11d9..b24ea7233 100644
--- a/macosx/Defaults.plist
+++ b/macosx/Defaults.plist
@@ -44,6 +44,8 @@
History
+ IncompleteDownloadFolder
+ ~/Desktop
InfoTab
Info
InfoVisible
@@ -104,5 +106,7 @@
20
UseAdvancedBar
+ UseIncompleteDownloadFolder
+
diff --git a/macosx/English.lproj/PrefsWindow.nib/classes.nib b/macosx/English.lproj/PrefsWindow.nib/classes.nib
index 943615f29..3448a766a 100644
--- a/macosx/English.lproj/PrefsWindow.nib/classes.nib
+++ b/macosx/English.lproj/PrefsWindow.nib/classes.nib
@@ -9,6 +9,7 @@
folderSheetShow = id;
helpForNetwork = id;
importFolderSheetShow = id;
+ incompleteFolderSheetShow = id;
setAutoImport = id;
setAutoSize = id;
setAutoSpeedLimit = id;
@@ -31,6 +32,7 @@
fFolderPopUp = NSPopUpButton;
fGeneralView = NSView;
fImportFolderPopUp = NSPopUpButton;
+ fIncompleteFolderPopUp = NSPopUpButton;
fNatCheck = NSButton;
fNatStatusField = NSTextField;
fNatStatusImage = NSImageView;
diff --git a/macosx/English.lproj/PrefsWindow.nib/info.nib b/macosx/English.lproj/PrefsWindow.nib/info.nib
index e6d4c2d74..ec7c4587f 100644
--- a/macosx/English.lproj/PrefsWindow.nib/info.nib
+++ b/macosx/English.lproj/PrefsWindow.nib/info.nib
@@ -3,15 +3,15 @@
IBDocumentLocation
- 18 87 356 240 0 0 1152 842
+ 19 87 356 240 0 0 1152 842
IBEditorPositions
153
- 123 483 563 267 0 0 1152 842
+ 294 445 563 267 0 0 1152 842
28
294 434 563 290 0 0 1152 842
41
- 294 420 563 317 0 0 1152 842
+ 108 420 563 342 0 0 1152 842
66
294 507 563 144 0 0 1152 842
@@ -23,7 +23,7 @@
IBOpenObjects
- 153
+ 41
IBSystem Version
8L127
diff --git a/macosx/English.lproj/PrefsWindow.nib/keyedobjects.nib b/macosx/English.lproj/PrefsWindow.nib/keyedobjects.nib
index 2a542f12f..16114bf1d 100644
Binary files a/macosx/English.lproj/PrefsWindow.nib/keyedobjects.nib and b/macosx/English.lproj/PrefsWindow.nib/keyedobjects.nib differ
diff --git a/macosx/PrefsController.h b/macosx/PrefsController.h
index 8e07c0641..a38cb12fd 100644
--- a/macosx/PrefsController.h
+++ b/macosx/PrefsController.h
@@ -36,7 +36,7 @@
NSToolbar * fToolbar;
IBOutlet NSView * fGeneralView, * fTransfersView, * fBandwidthView, * fNetworkView;
- IBOutlet NSPopUpButton * fFolderPopUp, * fImportFolderPopUp,
+ IBOutlet NSPopUpButton * fFolderPopUp, * fIncompleteFolderPopUp, * fImportFolderPopUp,
* fDownloadSoundPopUp, * fSeedingSoundPopUp;
NSArray * fSounds;
@@ -68,8 +68,9 @@
- (void) setCopyTorrents: (id) sender;
-- (void) setDownloadLocation: (id) sender;
-- (void) folderSheetShow: (id) sender;
+- (void) setDownloadLocation: (id) sender;
+- (void) folderSheetShow: (id) sender;
+- (void) incompleteFolderSheetShow: (id) sender;
- (void) setPort: (id) sender;
- (void) updatePortStatus;
diff --git a/macosx/PrefsController.m b/macosx/PrefsController.m
index 420348fe8..341442449 100644
--- a/macosx/PrefsController.m
+++ b/macosx/PrefsController.m
@@ -44,6 +44,7 @@
- (void) setPrefView: (id) sender;
- (void) folderSheetClosed: (NSOpenPanel *) openPanel returnCode: (int) code contextInfo: (void *) info;
+- (void) incompleteFolderSheetClosed: (NSOpenPanel *) openPanel returnCode: (int) code contextInfo: (void *) info;
- (void) importFolderSheetClosed: (NSOpenPanel *) openPanel returnCode: (int) code contextInfo: (void *) info;
@end
@@ -396,6 +397,21 @@
@selector(folderSheetClosed:returnCode:contextInfo:) contextInfo: nil];
}
+- (void) incompleteFolderSheetShow: (id) sender
+{
+ NSOpenPanel * panel = [NSOpenPanel openPanel];
+
+ [panel setPrompt: @"Select"];
+ [panel setAllowsMultipleSelection: NO];
+ [panel setCanChooseFiles: NO];
+ [panel setCanChooseDirectories: YES];
+ [panel setCanCreateDirectories: YES];
+
+ [panel beginSheetForDirectory: nil file: nil types: nil
+ modalForWindow: [self window] modalDelegate: self didEndSelector:
+ @selector(incompleteFolderSheetClosed:returnCode:contextInfo:) contextInfo: nil];
+}
+
- (void) setAutoImport: (id) sender
{
if ([fDefaults boolForKey: @"AutoImport"])
@@ -508,6 +524,13 @@
}
}
+- (void) incompleteFolderSheetClosed: (NSOpenPanel *) openPanel returnCode: (int) code contextInfo: (void *) info
+{
+ if (code == NSOKButton)
+ [fDefaults setObject: [[openPanel filenames] objectAtIndex: 0] forKey: @"IncompleteDownloadFolder"];
+ [fIncompleteFolderPopUp selectItemAtIndex: 0];
+}
+
- (void) importFolderSheetClosed: (NSOpenPanel *) openPanel returnCode: (int) code contextInfo: (void *) info
{
if (code == NSOKButton)
diff --git a/macosx/Torrent.h b/macosx/Torrent.h
index e5e28e960..aa91e429f 100644
--- a/macosx/Torrent.h
+++ b/macosx/Torrent.h
@@ -39,6 +39,9 @@
BOOL fResumeOnWake;
NSDate * fDate;
+ BOOL fUseIncompleteFolder;
+ NSString * fDownloadFolder, * fIncompleteFolder;
+
BOOL fPrivateTorrent, fPublicTorrent;
NSString * fPublicTorrentLocation;
diff --git a/macosx/Torrent.m b/macosx/Torrent.m
index 790afa140..2e046147b 100644
--- a/macosx/Torrent.m
+++ b/macosx/Torrent.m
@@ -65,6 +65,9 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
if (self)
{
+ fUseIncompleteFolder = [fDefaults boolForKey: @"UseIncompleteDownloadFolder"];
+ fIncompleteFolder = [[fDefaults stringForKey: @"IncompleteDownloadFolder"] copy];
+
if (!fPublicTorrent)
[self trashFile: path];
}
@@ -85,9 +88,27 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
if (self)
{
+ //download folders
NSString * downloadFolder;
if (!(downloadFolder = [history objectForKey: @"DownloadFolder"]))
downloadFolder = [[fDefaults stringForKey: @"DownloadFolder"] stringByExpandingTildeInPath];
+
+ NSNumber * useIncompleteFolder;
+ if ((useIncompleteFolder = [history objectForKey: @"UseIncompleteFolder"]))
+ {
+ if ((fUseIncompleteFolder = [useIncompleteFolder boolValue]))
+ {
+ NSString * incompleteFolder;
+ if (incompleteFolder = [history objectForKey: @"IncompleteFolder"])
+ fIncompleteFolder = [incompleteFolder copy];
+ else
+ fIncompleteFolder = [[[fDefaults stringForKey: @"IncompleteDownloadFolder"]
+ stringByExpandingTildeInPath] copy];
+ }
+ }
+ else
+ fUseIncompleteFolder = NO;
+
[self setDownloadFolder: downloadFolder];
NSString * paused;
@@ -105,14 +126,18 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
NSMutableDictionary * history = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool: fPrivateTorrent], @"PrivateCopy",
[NSNumber numberWithBool: fPublicTorrent], @"PublicCopy",
- [self downloadFolder], @"DownloadFolder",
+ fDownloadFolder, @"DownloadFolder",
+ [NSNumber numberWithBool: fUseIncompleteFolder], @"UseIncompleteFolder",
[self isActive] ? @"NO" : @"YES", @"Paused",
[self date], @"Date",
[NSNumber numberWithInt: fStopRatioSetting], @"StopRatioSetting",
[NSNumber numberWithFloat: fRatioLimit], @"RatioLimit",
[NSNumber numberWithBool: fWaitToStart], @"WaitToStart",
[self orderValue], @"OrderValue", nil];
-
+
+ if (fUseIncompleteFolder)
+ [history setObject: fIncompleteFolder forKey: @"IncompleteFolder"];
+
if (fPrivateTorrent)
[history setObject: [self hashString] forKey: @"TorrentHash"];
@@ -128,6 +153,11 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
{
tr_torrentClose(fLib, fHandle);
+ if (fDownloadFolder)
+ [fDownloadFolder release];
+ if (fIncompleteFolder)
+ [fIncompleteFolder release];
+
if (fPublicTorrentLocation)
[fPublicTorrentLocation release];
@@ -151,7 +181,13 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
- (void) setDownloadFolder: (NSString *) path
{
- tr_torrentSetFolder(fHandle, [path UTF8String]);
+ fDownloadFolder = [path copy];
+
+ if (!fUseIncompleteFolder || [[NSFileManager defaultManager] fileExistsAtPath:
+ [path stringByAppendingPathComponent: [self name]]])
+ tr_torrentSetFolder(fHandle, [path UTF8String]);
+ else
+ tr_torrentSetFolder(fHandle, [fIncompleteFolder UTF8String]);
}
- (NSString *) downloadFolder
@@ -175,7 +211,19 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
//notification when downloading finished
if ([self justFinished])
+ {
+ //move file from incomplete folder to download folder
+ if (fUseIncompleteFolder && ![[self downloadFolder] isEqualToString: fDownloadFolder])
+ {
+ tr_torrentStop(fHandle);
+ if ([[NSFileManager defaultManager] movePath: [[self downloadFolder] stringByAppendingPathComponent: [self name]]
+ toPath: [fDownloadFolder stringByAppendingPathComponent: [self name]] handler: nil])
+ tr_torrentSetFolder(fHandle, [fDownloadFolder UTF8String]);
+ tr_torrentStart(fHandle);
+ }
+
[[NSNotificationCenter defaultCenter] postNotificationName: @"TorrentFinishedDownloading" object: self];
+ }
//check to stop for ratio
if ([self isSeeding] && ((fStopRatioSetting == RATIO_CHECK && [self ratio] >= fRatioLimit)