ability to create torrent files with multiple trackers

This commit is contained in:
Mitchell Livingston 2008-06-04 20:55:38 +00:00
parent 95bd2860a7
commit d7548a75c6
4 changed files with 521 additions and 164 deletions

1
NEWS
View File

@ -4,6 +4,7 @@ NEWS file for Transmission <http://www.transmissionbt.com/>
http://trac.transmissionbt.com/query?group=component&milestone=1.30&order=severity
- All Platforms
+ Ability to add and remove tracker addresses
+ Ability to create torrent files with multiple tracker addresses
+ Creation of torrent files with no tracker address (for easier creation for upload to some tracker sites)
- Mac
+ Quick Look integration in the main window and inspector's file tab

View File

@ -29,7 +29,9 @@
@interface CreatorWindowController : NSWindowController
{
IBOutlet NSImageView * fIconView;
IBOutlet NSTextField * fNameField, * fStatusField, * fPiecesField, * fTrackerField, * fLocationField;
IBOutlet NSTextField * fNameField, * fStatusField, * fPiecesField, * fLocationField;
IBOutlet NSTableView * fTrackerTable;
IBOutlet NSSegmentedControl * fTrackerAddRemoveControl;
IBOutlet NSTextView * fCommentView;
IBOutlet NSButton * fPrivateCheck, * fOpenCheck;
@ -37,7 +39,8 @@
IBOutlet NSProgressIndicator * fProgressIndicator;
tr_metainfo_builder * fInfo;
NSString * fPath, * fLocation, * fTracker;
NSString * fPath, * fLocation;
NSMutableArray * fTrackers;
BOOL fOpenTorrent;
NSTimer * fTimer;
@ -58,4 +61,6 @@
- (void) cancelCreateWindow: (id) sender;
- (void) cancelCreateProgress: (id) sender;
- (void) addRemoveTracker: (id) sender;
@end

View File

@ -27,10 +27,13 @@
#import "NSStringAdditions.h"
#include "utils.h" //tr_httpIsValidURL
#define TRACKER_ADD_TAG 0
#define TRACKER_REMOVE_TAG 1
@interface CreatorWindowController (Private)
+ (NSString *) chooseFile;
- (void) updateEnableOpenCheckForTrackerField;
- (void) updateEnableOpenCheckForTrackers;
- (void) locationSheetClosed: (NSSavePanel *) openPanel returnCode: (int) code contextInfo: (void *) info;
- (void) createBlankAddressAlertDidEnd: (NSAlert *) alert returnCode: (int) returnCode contextInfo: (void *) contextInfo;
@ -102,6 +105,21 @@
}
fDefaults = [NSUserDefaults standardUserDefaults];
//get list of trackers
if (!(fTrackers = [[fDefaults arrayForKey: @"CreatorTrackers"] mutableCopy]))
{
fTrackers = [[NSMutableArray alloc] initWithCapacity: 1];
//check for tracker from versions before 1.3
NSString * tracker;
if ((tracker = [fDefaults stringForKey: @"CreatorTracker"]))
{
[fTrackers addObject: tracker];
[fDefaults removeObjectForKey: @"CreatorTracker"];
[fDefaults setObject: fTrackers forKey: @"CreatorTrackers"];
}
}NSLog([fTrackers description]);
}
return self;
}
@ -151,15 +169,18 @@
[fLocationField setToolTip: fLocation];
//set previously saved values
NSString * tracker;
if ((tracker = [fDefaults stringForKey: @"CreatorTracker"]))
[fTrackerField setStringValue: tracker];
if ([fDefaults objectForKey: @"CreatorPrivate"])
[fPrivateCheck setState: [fDefaults boolForKey: @"CreatorPrivate"] ? NSOnState : NSOffState];
fOpenTorrent = [fDefaults boolForKey: @"CreatorOpen"];
[self updateEnableOpenCheckForTrackerField];
[self updateEnableOpenCheckForTrackers];
if (![NSApp isOnLeopardOrBetter])
{
[fTrackerAddRemoveControl sizeToFit];
[fTrackerAddRemoveControl setLabel: @"+" forSegment: TRACKER_ADD_TAG];
[fTrackerAddRemoveControl setLabel: @"-" forSegment: TRACKER_REMOVE_TAG];
}
}
- (void) dealloc
@ -167,7 +188,7 @@
[fPath release];
[fLocation release];
[fTracker release];
[fTrackers release];
if (fInfo)
tr_metaInfoBuilderFree(fInfo);
@ -183,12 +204,6 @@
fOpenTorrent = [fOpenCheck state] == NSOnState;
}
- (void) controlTextDidChange: (NSNotification *) notification
{
if ([notification object] == fTrackerField)
[self updateEnableOpenCheckForTrackerField];
}
- (void) setLocation: (id) sender
{
NSSavePanel * panel = [NSSavePanel savePanel];
@ -207,7 +222,7 @@
- (void) create: (id) sender
{
if ([[fTrackerField stringValue] isEqualToString: @""] && [fDefaults boolForKey: @"WarningCreatorBlankAddress"])
if ([fTrackers count] == 0 && [fDefaults boolForKey: @"WarningCreatorBlankAddress"])
{
NSAlert * alert = [[NSAlert alloc] init];
[alert setMessageText: NSLocalizedString(@"The tracker address is blank.", "Create torrent -> blank address -> title")];
@ -245,6 +260,70 @@
[fTimer fire];
}
- (NSInteger) numberOfRowsInTableView: (NSTableView *) tableView
{
return [fTrackers count];
}
- (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) tableColumn row: (NSInteger) row
{
return [fTrackers objectAtIndex: row];
}
- (void) addRemoveTracker: (id) sender
{
//don't allow add/remove when currently adding - it leads to weird results
if ([fTrackerTable editedRow] != -1)
return;
if ([[sender cell] tagForSegment: [sender selectedSegment]] == TRACKER_REMOVE_TAG)
{
[fTrackers removeObjectsAtIndexes: [fTrackerTable selectedRowIndexes]];
[fTrackerTable deselectAll: self];
[fTrackerTable reloadData];
[self updateEnableOpenCheckForTrackers];
}
else
{
[fTrackers addObject: @""];
[fTrackerTable reloadData];
int row = [fTrackers count] - 1;
[fTrackerTable selectRow: row byExtendingSelection: NO];
[fTrackerTable editColumn: 0 row: row withEvent: nil select: YES];
}
}
- (void) tableView: (NSTableView *) tableView setObjectValue: (id) object forTableColumn: (NSTableColumn *) tableColumn
row: (NSInteger) row
{
NSString * tracker = (NSString *)object;
if ([tracker rangeOfString: @"://"].location == NSNotFound)
tracker = [@"http://" stringByAppendingString: tracker];
if (!tr_httpIsValidURL([tracker UTF8String]))
{
NSBeep();
[fTrackers removeObjectAtIndex: row];
}
else
{
[fTrackers replaceObjectAtIndex: row withObject: tracker];
[self updateEnableOpenCheckForTrackers];
}
[fTrackerTable deselectAll: self];
[fTrackerTable reloadData];
}
- (void) tableViewSelectionDidChange: (NSNotification *) notification
{
[fTrackerAddRemoveControl setEnabled: [fTrackerTable numberOfSelectedRows] > 0 forSegment: TRACKER_REMOVE_TAG];
}
@end
@implementation CreatorWindowController (Private)
@ -266,9 +345,9 @@
return success ? [[panel filenames] objectAtIndex: 0] : nil;
}
- (void) updateEnableOpenCheckForTrackerField
- (void) updateEnableOpenCheckForTrackers
{
BOOL hasTracker = ![[fTrackerField stringValue] isEqualToString: @""];
BOOL hasTracker = [fTrackers count] > 0;
[fOpenCheck setEnabled: hasTracker];
[fOpenCheck setState: (fOpenTorrent && hasTracker) ? NSOnState : NSOffState];
}
@ -319,15 +398,15 @@
return;
}
[fTracker release]; //incase a previous create was aborted
fTracker = [[fTrackerField stringValue] retain];
//parse non-empty tracker strings
tr_tracker_info trackerInfo;
BOOL isTracker = NO;
if (![fTracker isEqualToString: @""])
tr_tracker_info * trackerInfo = tr_new0(tr_tracker_info, [fTrackers count]);
NSUInteger i;
for (i = 0; i < [fTrackers count]; i++)
trackerInfo[i].announce = (char *)[[fTrackers objectAtIndex: i] UTF8String];
/*if ([fTrackers count] > 0)
{
isTracker = YES;
if ([fTracker rangeOfString: @"://"].location == NSNotFound)
{
NSString * fullTracker = [@"http://" stringByAppendingString: fTracker];
@ -335,6 +414,10 @@
fTracker = [fullTracker retain];
}
#warning remove
NSString * fTracker = [fTrackers objectAtIndex: 0];
#warning move to adding
if (!tr_httpIsValidURL([fTracker UTF8String]))
{
NSAlert * alert = [[[NSAlert alloc] init] autorelease];
@ -357,17 +440,18 @@
trackerInfo.tier = 0;
trackerInfo.announce = (char *)[fTracker UTF8String];
}
}*/
//store values
[fDefaults setObject: fTracker forKey: @"CreatorTracker"];
[fDefaults setObject: fTrackers forKey: @"CreatorTrackers"];
[fDefaults setBool: [fPrivateCheck state] == NSOnState forKey: @"CreatorPrivate"];
[fDefaults setBool: fOpenTorrent forKey: @"CreatorOpen"];
[fDefaults setObject: [fLocation stringByDeletingLastPathComponent] forKey: @"CreatorLocation"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"BeginCreateTorrentFile" object: fLocation userInfo: nil];
tr_makeMetaInfo(fInfo, [fLocation UTF8String], &trackerInfo, isTracker ? 1 : 0, [[fCommentView string] UTF8String],
tr_makeMetaInfo(fInfo, [fLocation UTF8String], trackerInfo, [fTrackers count], [[fCommentView string] UTF8String],
[fPrivateCheck state] == NSOnState);
tr_free(trackerInfo);
fTimer = [NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector(checkProgress)
userInfo: nil repeats: YES];
@ -384,7 +468,7 @@
switch (fInfo->result)
{
case TR_MAKEMETA_OK:
if (fOpenTorrent && ![fTracker isEqualToString: @""])
if (fOpenTorrent && [fTrackers count] > 0)
{
NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys: fLocation, @"File",
[fPath stringByDeletingLastPathComponent], @"Path", nil];

View File

@ -28,7 +28,7 @@
<object class="NSWindowTemplate" id="742202125">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{432, 603}, {480, 313}}</string>
<string key="NSWindowRect">{{432, 524}, {488, 392}}</string>
<int key="NSWTFlags">1886912512</int>
<string key="NSWindowTitle">Torrent Creator</string>
<string key="NSWindowClass">NSWindow</string>
@ -36,7 +36,7 @@
<characters key="NS.bytes">View</characters>
</object>
<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
<string key="NSWindowContentMinSize">{430, 285}</string>
<string key="NSWindowContentMinSize">{430, 350}</string>
<object class="NSView" key="NSWindowView" id="755547124">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
@ -57,7 +57,7 @@
<string>NeXT TIFF v4.0 pasteboard type</string>
</object>
</object>
<string key="NSFrame">{{20, 239}, {64, 64}}</string>
<string key="NSFrame">{{20, 318}, {64, 64}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="446555025">
@ -77,7 +77,7 @@
<object class="NSTextField" id="164784781">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{89, 272}, {371, 22}}</string>
<string key="NSFrame">{{89, 351}, {379, 22}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="750416427">
@ -113,7 +113,7 @@
<object class="NSTextField" id="1020546775">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{89, 247}, {374, 17}}</string>
<string key="NSFrame">{{89, 326}, {382, 17}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="554993357">
@ -132,7 +132,7 @@
</object>
<object class="NSScrollView" id="1007617591">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">274</int>
<int key="NSvFlags">290</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSClipView" id="468443008">
@ -166,7 +166,7 @@
<string>WebURLsWithTitlesPboardType</string>
</object>
</object>
<string key="NSFrameSize">{340, 14}</string>
<string key="NSFrameSize">{348, 14}</string>
<reference key="NSSuperview" ref="468443008"/>
<object class="NSTextContainer" key="NSTextContainer" id="742813744">
<object class="NSLayoutManager" key="NSLayoutManager">
@ -184,7 +184,7 @@
<nil key="NSDelegate"/>
</object>
<reference key="NSTextView" ref="428363936"/>
<double key="NSWidth">3.400000e+02</double>
<double key="NSWidth">3.480000e+02</double>
<int key="NSTCFlags">1</int>
</object>
<object class="NSTextViewSharedData" key="NSSharedData">
@ -237,12 +237,12 @@
<nil key="NSDefaultParagraphStyle"/>
</object>
<int key="NSTVFlags">6</int>
<string key="NSMaxSize">{697, 1e+07}</string>
<string key="NSMaxSize">{713, 1e+07}</string>
<string key="NSMinize">{83, 0}</string>
<nil key="NSDelegate"/>
</object>
</object>
<string key="NSFrame">{{1, 1}, {340, 82}}</string>
<string key="NSFrame">{{1, 1}, {348, 73}}</string>
<reference key="NSSuperview" ref="1007617591"/>
<reference key="NSNextKeyView" ref="428363936"/>
<reference key="NSDocView" ref="428363936"/>
@ -256,7 +256,7 @@
<object class="NSScroller" id="947788581">
<reference key="NSNextResponder" ref="1007617591"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{341, 1}, {15, 82}}</string>
<string key="NSFrame">{{349, 1}, {15, 73}}</string>
<reference key="NSSuperview" ref="1007617591"/>
<reference key="NSTarget" ref="1007617591"/>
<string key="NSAction">_doScroller:</string>
@ -274,7 +274,7 @@
<double key="NSPercent">9.456522e-01</double>
</object>
</object>
<string key="NSFrame">{{103, 120}, {357, 84}}</string>
<string key="NSFrame">{{103, 120}, {365, 75}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSNextKeyView" ref="468443008"/>
<int key="NSsFlags">18</int>
@ -284,8 +284,8 @@
</object>
<object class="NSTextField" id="38646839">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{28, 187}, {70, 17}}</string>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{28, 178}, {70, 17}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="4035248">
@ -301,50 +301,23 @@
<object class="NSTextField" id="421942629">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{42, 214}, {56, 17}}</string>
<string key="NSFrame">{{35, 293}, {63, 17}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="47808571">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">Tracker:</string>
<string key="NSContents">Trackers:</string>
<reference key="NSSupport" ref="364179855"/>
<reference key="NSControlView" ref="421942629"/>
<reference key="NSBackgroundColor" ref="119700158"/>
<reference key="NSTextColor" ref="517921119"/>
</object>
</object>
<object class="NSTextField" id="993309254">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{103, 212}, {357, 22}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1050944342">
<int key="NSCellFlags">-1804468671</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">http://</string>
<reference key="NSSupport" ref="364179855"/>
<reference key="NSControlView" ref="993309254"/>
<bool key="NSDrawsBackground">YES</bool>
<object class="NSColor" key="NSBackgroundColor" id="259635913">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">textBackgroundColor</string>
<reference key="NSColor" ref="885755327"/>
</object>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">textColor</string>
<reference key="NSColor" ref="319652034"/>
</object>
</object>
</object>
<object class="NSBox" id="490783512">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{12, 85}, {456, 5}}</string>
<string key="NSFrame">{{12, 85}, {464, 5}}</string>
<reference key="NSSuperview" ref="755547124"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
@ -352,7 +325,12 @@
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
<reference key="NSSupport" ref="364179855"/>
<reference key="NSBackgroundColor" ref="259635913"/>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">textBackgroundColor</string>
<reference key="NSColor" ref="885755327"/>
</object>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
@ -366,7 +344,7 @@
<object class="NSButton" id="833650385">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{388, 53}, {77, 28}}</string>
<string key="NSFrame">{{396, 53}, {77, 28}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="420120600">
@ -413,12 +391,12 @@
<object class="NSTextField" id="371133969">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{123, 45}, {265, 30}}</string>
<string key="NSFrame">{{123, 45}, {273, 30}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="649106243">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">272761344</int>
<int key="NSCellFlags2">272761600</int>
<string type="base64-UTF8" key="NSContents">RmlsZQpGaWxlA</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="371133969"/>
@ -461,7 +439,7 @@
<object class="NSButton" id="22400418">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{103, 96}, {65, 18}}</string>
<string key="NSFrame">{{101, 96}, {65, 18}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="240082396">
@ -488,7 +466,7 @@
<object class="NSButton" id="697506694">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{385, 12}, {81, 32}}</string>
<string key="NSFrame">{{393, 12}, {81, 32}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="671503663">
@ -509,7 +487,7 @@
<object class="NSButton" id="142097578">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{303, 12}, {82, 32}}</string>
<string key="NSFrame">{{311, 12}, {82, 32}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="600879109">
@ -530,7 +508,7 @@
<object class="NSTextField" id="644564296">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{169, 98}, {294, 17}}</string>
<string key="NSFrame">{{169, 98}, {302, 17}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="937588090">
@ -546,7 +524,7 @@
<object class="NSButton" id="631380462">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{102, 21}, {144, 18}}</string>
<string key="NSFrame">{{101, 21}, {144, 18}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="813600242">
@ -564,14 +542,195 @@
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSScrollView" id="453590654">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSClipView" id="87995314">
<reference key="NSNextResponder" ref="453590654"/>
<int key="NSvFlags">2304</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTableView" id="910757453">
<reference key="NSNextResponder" ref="87995314"/>
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{348, 79}</string>
<reference key="NSSuperview" ref="87995314"/>
<bool key="NSEnabled">YES</bool>
<object class="_NSCornerView" key="NSCornerView">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{345, 1}, {16, 17}}</string>
</object>
<object class="NSMutableArray" key="NSTableColumns">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTableColumn" id="423370668">
<double key="NSWidth">3.450000e+02</double>
<double key="NSMinWidth">4.000000e+01</double>
<double key="NSMaxWidth">1.000000e+03</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
<int key="NSCellFlags">75628032</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
</object>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">headerTextColor</string>
<reference key="NSColor" ref="319652034"/>
</object>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="736213532">
<int key="NSCellFlags">337772096</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Text Cell</string>
<reference key="NSSupport" ref="364179855"/>
<reference key="NSControlView" ref="910757453"/>
<object class="NSColor" key="NSBackgroundColor" id="844220701">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlBackgroundColor</string>
<reference key="NSColor" ref="756666027"/>
</object>
<reference key="NSTextColor" ref="517921119"/>
</object>
<int key="NSResizingMask">3</int>
<bool key="NSIsResizeable">YES</bool>
<bool key="NSIsEditable">YES</bool>
<reference key="NSTableView" ref="910757453"/>
</object>
</object>
<double key="NSIntercellSpacingWidth">3.000000e+00</double>
<double key="NSIntercellSpacingHeight">2.000000e+00</double>
<reference key="NSBackgroundColor" ref="885755327"/>
<object class="NSColor" key="NSGridColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">gridColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC41AA</bytes>
</object>
</object>
<double key="NSRowHeight">1.700000e+01</double>
<int key="NSTvFlags">448790528</int>
<int key="NSColumnAutoresizingStyle">4</int>
<int key="NSDraggingSourceMaskForLocal">15</int>
<int key="NSDraggingSourceMaskForNonLocal">0</int>
<bool key="NSAllowsTypeSelect">NO</bool>
</object>
</object>
<string key="NSFrame">{{1, 1}, {348, 79}}</string>
<reference key="NSSuperview" ref="453590654"/>
<reference key="NSNextKeyView" ref="910757453"/>
<reference key="NSDocView" ref="910757453"/>
<reference key="NSBGColor" ref="844220701"/>
<int key="NScvFlags">4</int>
</object>
<object class="NSScroller" id="512681079">
<reference key="NSNextResponder" ref="453590654"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{349, 1}, {15, 79}}</string>
<reference key="NSSuperview" ref="453590654"/>
<reference key="NSTarget" ref="453590654"/>
<string key="NSAction">_doScroller:</string>
<double key="NSPercent">9.843750e-01</double>
</object>
<object class="NSScroller" id="864982587">
<reference key="NSNextResponder" ref="453590654"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{-100, -100}, {344, 15}}</string>
<reference key="NSSuperview" ref="453590654"/>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="453590654"/>
<string key="NSAction">_doScroller:</string>
<double key="NSPercent">9.971014e-01</double>
</object>
</object>
<string key="NSFrame">{{103, 229}, {365, 81}}</string>
<reference key="NSSuperview" ref="755547124"/>
<reference key="NSNextKeyView" ref="87995314"/>
<int key="NSsFlags">18</int>
<reference key="NSVScroller" ref="512681079"/>
<reference key="NSHScroller" ref="864982587"/>
<reference key="NSContentView" ref="87995314"/>
<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
</object>
<object class="NSSegmentedControl" id="904557624">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{103, 202}, {67, 23}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSegmentedCell" key="NSCell" id="708229191">
<int key="NSCellFlags">-2080244224</int>
<int key="NSCellFlags2">0</int>
<reference key="NSSupport" ref="364179855"/>
<reference key="NSControlView" ref="904557624"/>
<object class="NSMutableArray" key="NSSegmentImages">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSSegmentItem">
<double key="NSSegmentItemWidth">3.200000e+01</double>
<object class="NSCustomResource" key="NSSegmentItemImage">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSAddTemplate</string>
</object>
<string key="NSSegmentItemLabel"/>
<int key="NSSegmentItemImageScaling">0</int>
</object>
<object class="NSSegmentItem">
<double key="NSSegmentItemWidth">3.200000e+01</double>
<object class="NSCustomResource" key="NSSegmentItemImage">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSRemoveTemplate</string>
</object>
<string key="NSSegmentItemLabel"/>
<int key="NSSegmentItemTag">1</int>
<bool key="NSSegmentItemDisabled">YES</bool>
<int key="NSSegmentItemImageScaling">0</int>
</object>
</object>
<int key="NSTrackingMode">2</int>
<int key="NSSegmentStyle">6</int>
</object>
</object>
<object class="NSTextField" id="415165203">
<reference key="NSNextResponder" ref="755547124"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{175, 206}, {296, 14}}</string>
<reference key="NSSuperview" ref="755547124"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="35173837">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">272760832</int>
<string key="NSContents">Trackers will be randomized in the same tier</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="415165203"/>
<reference key="NSBackgroundColor" ref="119700158"/>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">disabledControlTextColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC4zMzMzMzMzNAA</bytes>
</object>
</object>
</object>
</object>
</object>
<string key="NSFrameSize">{480, 313}</string>
<string key="NSFrameSize">{488, 392}</string>
<reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
<string key="NSMinSize">{430, 307}</string>
<string key="NSMinSize">{430, 372}</string>
<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
<string key="NSFrameAutosaveName">TorrentCreator</string>
<string key="NSFrameAutosaveName">CreatorWindow</string>
</object>
<object class="NSCustomView" id="313634217">
<nil key="NSNextResponder"/>
@ -685,14 +844,6 @@
</object>
<int key="connectionID">34</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">fTrackerField</string>
<reference key="source" ref="578092914"/>
<reference key="destination" ref="993309254"/>
</object>
<int key="connectionID">35</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">window</string>
@ -773,14 +924,6 @@
</object>
<int key="connectionID">65</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="993309254"/>
<reference key="destination" ref="578092914"/>
</object>
<int key="connectionID">86</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleOpenCheck:</string>
@ -789,6 +932,46 @@
</object>
<int key="connectionID">88</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">fTrackerTable</string>
<reference key="source" ref="578092914"/>
<reference key="destination" ref="910757453"/>
</object>
<int key="connectionID">99</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="910757453"/>
<reference key="destination" ref="578092914"/>
</object>
<int key="connectionID">100</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="910757453"/>
<reference key="destination" ref="578092914"/>
</object>
<int key="connectionID">101</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">fTrackerAddRemoveControl</string>
<reference key="source" ref="578092914"/>
<reference key="destination" ref="904557624"/>
</object>
<int key="connectionID">105</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">addRemoveTracker:</string>
<reference key="source" ref="578092914"/>
<reference key="destination" ref="904557624"/>
</object>
<int key="connectionID">106</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@ -831,10 +1014,7 @@
<reference ref="452137672"/>
<reference ref="164784781"/>
<reference ref="1020546775"/>
<reference ref="1007617591"/>
<reference ref="38646839"/>
<reference ref="421942629"/>
<reference ref="993309254"/>
<reference ref="490783512"/>
<reference ref="833650385"/>
<reference ref="631224046"/>
@ -845,6 +1025,11 @@
<reference ref="142097578"/>
<reference ref="644564296"/>
<reference ref="631380462"/>
<reference ref="38646839"/>
<reference ref="1007617591"/>
<reference ref="453590654"/>
<reference ref="904557624"/>
<reference ref="415165203"/>
</object>
<reference key="parent" ref="742202125"/>
</object>
@ -875,31 +1060,6 @@
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">11</int>
<reference key="object" ref="1007617591"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="428363936"/>
<reference ref="947788581"/>
<reference ref="704686863"/>
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">12</int>
<reference key="object" ref="428363936"/>
<reference key="parent" ref="1007617591"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">13</int>
<reference key="object" ref="38646839"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="4035248"/>
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">14</int>
<reference key="object" ref="421942629"/>
@ -909,15 +1069,6 @@
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">15</int>
<reference key="object" ref="993309254"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="1050944342"/>
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">16</int>
<reference key="object" ref="490783512"/>
@ -1067,21 +1218,11 @@
<reference key="object" ref="554993357"/>
<reference key="parent" ref="1020546775"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">70</int>
<reference key="object" ref="4035248"/>
<reference key="parent" ref="38646839"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">71</int>
<reference key="object" ref="47808571"/>
<reference key="parent" ref="421942629"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">72</int>
<reference key="object" ref="1050944342"/>
<reference key="parent" ref="993309254"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">73</int>
<reference key="object" ref="420120600"/>
@ -1138,9 +1279,35 @@
<reference key="parent" ref="1070297246"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">84</int>
<reference key="object" ref="947788581"/>
<reference key="parent" ref="1007617591"/>
<int key="objectID">-3</int>
<reference key="object" ref="350396005"/>
<reference key="parent" ref="433163838"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">13</int>
<reference key="object" ref="38646839"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="4035248"/>
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">70</int>
<reference key="object" ref="4035248"/>
<reference key="parent" ref="38646839"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">11</int>
<reference key="object" ref="1007617591"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="704686863"/>
<reference ref="947788581"/>
<reference ref="428363936"/>
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">85</int>
@ -1148,10 +1315,86 @@
<reference key="parent" ref="1007617591"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="350396005"/>
<reference key="parent" ref="433163838"/>
<string key="objectName">Application</string>
<int key="objectID">84</int>
<reference key="object" ref="947788581"/>
<reference key="parent" ref="1007617591"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">12</int>
<reference key="object" ref="428363936"/>
<reference key="parent" ref="1007617591"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">89</int>
<reference key="object" ref="453590654"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="910757453"/>
<reference ref="864982587"/>
<reference ref="512681079"/>
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">92</int>
<reference key="object" ref="910757453"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="423370668"/>
</object>
<reference key="parent" ref="453590654"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">94</int>
<reference key="object" ref="423370668"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="736213532"/>
</object>
<reference key="parent" ref="910757453"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">97</int>
<reference key="object" ref="736213532"/>
<reference key="parent" ref="423370668"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">91</int>
<reference key="object" ref="864982587"/>
<reference key="parent" ref="453590654"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">90</int>
<reference key="object" ref="512681079"/>
<reference key="parent" ref="453590654"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">103</int>
<reference key="object" ref="904557624"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="708229191"/>
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">104</int>
<reference key="object" ref="708229191"/>
<reference key="parent" ref="904557624"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">107</int>
<reference key="object" ref="415165203"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="35173837"/>
</object>
<reference key="parent" ref="755547124"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">108</int>
<reference key="object" ref="35173837"/>
<reference key="parent" ref="415165203"/>
</object>
</object>
</object>
@ -1163,6 +1406,12 @@
<string>-2.IBPluginDependency</string>
<string>10.IBPluginDependency</string>
<string>10.ImportedFromIB2</string>
<string>103.IBPluginDependency</string>
<string>103.IBSegmentedControlTracker.RoundRobinState</string>
<string>103.IBSegmentedControlTracker.WasGrowing</string>
<string>104.IBPluginDependency</string>
<string>107.IBPluginDependency</string>
<string>107.ImportedFromIB2</string>
<string>11.IBPluginDependency</string>
<string>11.ImportedFromIB2</string>
<string>12.IBPluginDependency</string>
@ -1171,8 +1420,6 @@
<string>13.ImportedFromIB2</string>
<string>14.IBPluginDependency</string>
<string>14.ImportedFromIB2</string>
<string>15.IBPluginDependency</string>
<string>15.ImportedFromIB2</string>
<string>16.IBPluginDependency</string>
<string>16.ImportedFromIB2</string>
<string>17.IBPluginDependency</string>
@ -1219,8 +1466,14 @@
<string>8.ImportedFromIB2</string>
<string>84.IBShouldRemoveOnLegacySave</string>
<string>85.IBShouldRemoveOnLegacySave</string>
<string>89.IBPluginDependency</string>
<string>9.IBPluginDependency</string>
<string>9.ImportedFromIB2</string>
<string>90.IBPluginDependency</string>
<string>91.IBPluginDependency</string>
<string>92.IBPluginDependency</string>
<string>94.IBPluginDependency</string>
<string>97.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -1229,7 +1482,11 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<integer value="0" id="8"/>
<reference ref="8"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<real value="1.000000e+00"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -1258,16 +1515,16 @@
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>{{0, 682}, {480, 313}}</string>
<string>{{139, 514}, {488, 392}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{0, 682}, {480, 313}}</string>
<string>{{139, 514}, {488, 392}}</string>
<reference ref="9"/>
<reference ref="9"/>
<string>{{432, 603}, {480, 313}}</string>
<reference ref="9"/>
<reference ref="9"/>
<string>{3.40282e+38, 3.40282e+38}</string>
<string>{430, 285}</string>
<string>{430, 350}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -1285,7 +1542,13 @@
<reference ref="9"/>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
@ -1308,7 +1571,7 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">88</int>
<int key="maxID">108</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@ -1320,6 +1583,7 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>addRemoveTracker:</string>
<string>cancelCreateProgress:</string>
<string>cancelCreateWindow:</string>
<string>create:</string>
@ -1333,6 +1597,7 @@
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
@ -1349,7 +1614,8 @@
<string>fProgressIndicator</string>
<string>fProgressView</string>
<string>fStatusField</string>
<string>fTrackerField</string>
<string>fTrackerAddRemoveControl</string>
<string>fTrackerTable</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -1363,7 +1629,8 @@
<string>NSProgressIndicator</string>
<string>NSView</string>
<string>NSTextField</string>
<string>NSTextField</string>
<string>NSSegmentedControl</string>
<string>NSTableView</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">