1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-02-04 05:22:40 +00:00

for now don't allow modification of non-user added trackers

This commit is contained in:
Mitchell Livingston 2008-06-02 19:42:14 +00:00
parent 2b72de34ab
commit a4520742e5
3 changed files with 74 additions and 58 deletions

View file

@ -933,7 +933,7 @@ typedef enum
[fTrackers replaceObjectAtIndex: row withObject: object];
Torrent * torrent= [fTorrents objectAtIndex: 0];
if (![torrent updateAllTrackers: fTrackers forAdd: YES])
if (![torrent updateAllTrackersForAdd: fTrackers])
NSBeep();
//reset table with either new or old value
@ -959,7 +959,17 @@ typedef enum
- (BOOL) tableView: (NSTableView *) tableView shouldEditTableColumn: (NSTableColumn *) tableColumn row: (NSInteger) row
{
return ![[fTrackers objectAtIndex: row] isKindOfClass: [NSNumber class]];
if (tableView != fTrackerTable)
return NO;
//only allow modification of custom-added trackers
if ([[fTrackers objectAtIndex: row] isKindOfClass: [NSNumber class]] || ![[fTorrents objectAtIndex: 0] hasAddedTrackers])
return NO;
NSUInteger i;
for (i = row-1; ![[fTrackers objectAtIndex: i] isKindOfClass: [NSNumber class]]; i--);
return [[fTrackers objectAtIndex: i] intValue] == 0;
}
- (BOOL) shouldQuickLookFileView
@ -1500,7 +1510,6 @@ typedef enum
//determine if removing trackers built into the torrent
if (numberBuiltIn > 0 && [[NSUserDefaults standardUserDefaults] boolForKey: @"WarningRemoveBuiltInTracker"])
{
#warning pluralize?
NSAlert * alert = [[NSAlert alloc] init];
if (numberBuiltIn > 1)
@ -1539,7 +1548,7 @@ typedef enum
[fTrackers removeObjectsAtIndexes: indexes];
if (![torrent updateAllTrackers: fTrackers forAdd: NO])
if (![torrent updateAllTrackersForRemove: fTrackers])
NSBeep();
else
[fTrackerTable deselectAll: self];

View file

@ -151,7 +151,8 @@ typedef enum
- (NSString *) scrapeResponse;
- (NSMutableArray *) allTrackers: (BOOL) separators;
- (BOOL) updateAllTrackers: (NSMutableArray *) trackers forAdd: (BOOL) add;
- (BOOL) updateAllTrackersForAdd: (NSMutableArray *) trackers;
- (BOOL) updateAllTrackersForRemove: (NSMutableArray *) trackers;
- (BOOL) hasAddedTrackers;
- (NSString *) comment;

View file

@ -54,6 +54,8 @@
- (NSString *) etaString: (int) eta;
- (BOOL) updateAllTrackers: (NSMutableArray *) trackers;
- (void) trashFile: (NSString *) path;
- (void) setTimeMachineExclude: (BOOL) exclude forPath: (NSString *) path;
@ -803,66 +805,37 @@ void completenessChangeCallback(tr_torrent * torrent, cp_status_t status, void *
return allTrackers;
}
- (BOOL) updateAllTrackers: (NSMutableArray *) trackers forAdd: (BOOL) add
- (BOOL) updateAllTrackersForAdd: (NSMutableArray *) trackers
{
#warning break up into methods
if (add)
//find added tracker at end of first tier
int i;
for (i = 1; i < [trackers count]; i++)
if ([[trackers objectAtIndex: i] isKindOfClass: [NSNumber class]])
break;
i--;
NSString * tracker = [trackers objectAtIndex: i];
if ([tracker rangeOfString: @"://"].location == NSNotFound)
{
//find added tracker at end of first tier
int i;
for (i = 1; i < [trackers count]; i++)
if ([[trackers objectAtIndex: i] isKindOfClass: [NSNumber class]])
break;
i--;
NSString * tracker = [trackers objectAtIndex: i];
if ([tracker rangeOfString: @"://"].location == NSNotFound)
{
tracker = [@"http://" stringByAppendingString: tracker];
[trackers replaceObjectAtIndex: i withObject: tracker];
}
if (!tr_httpIsValidURL([tracker UTF8String]))
return NO;
fAddedTrackers = YES;
}
else
{
//check if any user-added groups
if ([[trackers objectAtIndex: 0] intValue] != 0)
fAddedTrackers = NO;
tracker = [@"http://" stringByAppendingString: tracker];
[trackers replaceObjectAtIndex: i withObject: tracker];
}
//get count
int count = 0;
NSEnumerator * enumerator = [trackers objectEnumerator];
id object;
while ((object = [enumerator nextObject]))
if (![object isKindOfClass: [NSNumber class]])
count++;
if (!tr_httpIsValidURL([tracker UTF8String]))
return NO;
//recreate the tracker structure
tr_tracker_info * trackerStructs = tr_new(tr_tracker_info, count);
int tier = 0;
int i = 0;
enumerator = [trackers objectEnumerator];
while ((object = [enumerator nextObject]))
{
if (![object isKindOfClass: [NSNumber class]])
{
trackerStructs[i].tier = tier;
trackerStructs[i].announce = (char *)[object UTF8String];
i++;
}
else
tier++;
}
fAddedTrackers = YES;
tr_torrentSetAnnounceList(fHandle, trackerStructs, count);
tr_free(trackerStructs);
return [self updateAllTrackers: trackers];
}
- (BOOL) updateAllTrackersForRemove: (NSMutableArray *) trackers
{
//check if any user-added groups
if ([[trackers objectAtIndex: 0] intValue] != 0)
fAddedTrackers = NO;
return YES;
return [self updateAllTrackers: trackers];
}
- (BOOL) hasAddedTrackers
@ -1929,6 +1902,39 @@ void completenessChangeCallback(tr_torrent * torrent, cp_status_t status, void *
}
}
- (BOOL) updateAllTrackers: (NSMutableArray *) trackers
{
//get count
int count = 0;
NSEnumerator * enumerator = [trackers objectEnumerator];
id object;
while ((object = [enumerator nextObject]))
if (![object isKindOfClass: [NSNumber class]])
count++;
//recreate the tracker structure
tr_tracker_info * trackerStructs = tr_new(tr_tracker_info, count);
int tier = 0;
int i = 0;
enumerator = [trackers objectEnumerator];
while ((object = [enumerator nextObject]))
{
if (![object isKindOfClass: [NSNumber class]])
{
trackerStructs[i].tier = tier;
trackerStructs[i].announce = (char *)[object UTF8String];
i++;
}
else
tier++;
}
tr_torrentSetAnnounceList(fHandle, trackerStructs, count);
tr_free(trackerStructs);
return YES;
}
- (void) trashFile: (NSString *) path
{
//attempt to move to trash