mirror of
https://github.com/transmission/transmission
synced 2025-02-04 13:32:19 +00:00
for now don't allow modification of non-user added trackers
This commit is contained in:
parent
2b72de34ab
commit
a4520742e5
3 changed files with 74 additions and 58 deletions
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
|
112
macosx/Torrent.m
112
macosx/Torrent.m
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue