]> granicus.if.org Git - transmission/commitdiff
#2488 when sorting by tracker, first use the tracker that comes first alphabetically
authorMitchell Livingston <livings124@transmissionbt.com>
Sun, 11 Oct 2009 13:42:10 +0000 (13:42 +0000)
committerMitchell Livingston <livings124@transmissionbt.com>
Sun, 11 Oct 2009 13:42:10 +0000 (13:42 +0000)
libtransmission/transmission.h
macosx/Controller.m
macosx/Torrent.h
macosx/Torrent.m

index 9390400245bc3437ff5f648b71dd2ebab6b22985..47fa19fb907f07200be356a506d573f08b7324c5 100644 (file)
@@ -1270,7 +1270,7 @@ typedef struct
     /* whether or not we've ever scraped to this tracker */
     tr_bool hasScraped;
 
-    /* ex: legaltorrents.com */
+    /* ex: http://www.legaltorrents.com:7070 */
     char host[1024];
 
     /* the full announce URL */
index 2940c20dff5908d469b96b98b6be72d38462bcec..b0b8c7189175cf11b6ad6b423fbda204c1e7a99e 100644 (file)
@@ -1941,10 +1941,9 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
             descriptors = [[NSArray alloc] initWithObjects: progressDescriptor, ratioProgressDescriptor, ratioDescriptor,
                                                                 nameDescriptor, nil];
         }
-        #warning broken
         else if ([sortType isEqualToString: SORT_TRACKER])
         {
-            NSSortDescriptor * trackerDescriptor = [[[NSSortDescriptor alloc] initWithKey: @"trackerAddressAnnounce" ascending: asc
+            NSSortDescriptor * trackerDescriptor = [[[NSSortDescriptor alloc] initWithKey: @"trackerSortKey" ascending: asc
                                                     selector: @selector(localizedCaseInsensitiveCompare:)] autorelease];
             
             descriptors = [[NSArray alloc] initWithObjects: trackerDescriptor, nameDescriptor, nil];
@@ -3472,8 +3471,10 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
                 break;
             case SORT_ACTIVITY_TAG:
                 sortType = SORT_ACTIVITY;
+                break;
             default:
                 NSAssert1(NO, @"Unknown sort tag received: %d", [menuItem tag]);
+                return;
         }
         
         [menuItem setState: [sortType isEqualToString: [fDefaults stringForKey: @"Sort"]] ? NSOnState : NSOffState];
@@ -4110,7 +4111,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
         
         if (!torrent)
         {
-            [pool release];
+            [pool drain];
             
             NSLog(@"No torrent found matching the given torrent struct from the RPC callback!");
             return;
index 64a527554f0894df00b153042297ce7951a83dd3..741b616182a309ea9581b2c6b068545d229dfc02 100644 (file)
 - (BOOL) isStalled;
 
 - (NSInteger) stateSortKey;
+- (NSString *) trackerSortKey;
 
 - (tr_torrent *) torrentStruct;
 
index 3d74c6841947d3321e70176631f35ceeaff9f128..a137e7363c23fa7d7621355f3615795afb7f76f6 100644 (file)
@@ -1478,6 +1478,24 @@ int trashDataFile(const char * filename)
         return 2;
 }
 
+- (NSString *) trackerSortKey
+{
+    int count;
+    tr_tracker_stat * stats = tr_torrentTrackers(fHandle, &count);
+    
+    NSString * best = nil;
+    
+    for (int i=0; i < count; ++i)
+    {
+        NSString * tracker = [NSString stringWithUTF8String: stats[i].host];
+        if (!best || [tracker localizedCaseInsensitiveCompare: best] == NSOrderedAscending)
+            best = tracker;
+    }
+    
+    tr_torrentTrackersFree(stats, count);
+    return best;
+}
+
 - (tr_torrent *) torrentStruct
 {
     return fHandle;