]> granicus.if.org Git - transmission/commitdiff
implement most of the rpc preferences updating
authorMitchell Livingston <livings124@transmissionbt.com>
Tue, 3 Jun 2008 17:55:43 +0000 (17:55 +0000)
committerMitchell Livingston <livings124@transmissionbt.com>
Tue, 3 Jun 2008 17:55:43 +0000 (17:55 +0000)
macosx/Controller.h
macosx/Controller.m
macosx/PrefsController.h
macosx/PrefsController.m

index 59001c2cfff7cd5fefe8a2a1773db30d41f5c92c..c2f3a37a00b8037c8043cea54a30a272c7cf21c4 100644 (file)
@@ -268,5 +268,9 @@ typedef enum
 - (void) prepareForUpdate:  (NSNotification *) notification;
 
 - (void) rpcCallback: (tr_rpc_callback_type) type forTorrentStruct: (struct tr_torrent *) torrentStruct;
+- (void) rpcAddTorrentStruct: (NSValue *) torrentStructPtr;
+- (void) rpcRemoveTorrent: (Torrent *) torrent;
+- (void) rpcStartedStoppedTorrent: (Torrent *) torrent;
+- (void) rpcChangedTorrent: (Torrent *) torrent;
 
 @end
index fd63bbc41f7009bea000a121467083d089b18969..a5380b42159e6c2df8ddf2df7ff6bf653d039f18 100644 (file)
@@ -4159,7 +4159,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
     
     //get the torrent
-    Torrent * torrent;
+    Torrent * torrent = nil;
     if (torrentStruct != NULL && (type != TR_RPC_TORRENT_ADDED && type != TR_RPC_SESSION_CHANGED))
     {
         NSEnumerator * enumerator = [fTorrents objectEnumerator];
@@ -4197,10 +4197,12 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
             break;
         
         case TR_RPC_SESSION_CHANGED:
+            [fPrefsController performSelectorOnMainThread: @selector(rpcUpdatePrefs) withObject: nil waitUntilDone: NO];
             break;
         
         default:
             NSLog(@"Unknown RPC command received!");
+            [torrent release];
     }
     
     [pool release];
@@ -4248,6 +4250,8 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
     
     if ([[fTableView selectedTorrents] containsObject: torrent])
     {
+        #warning update the file table as well
+        
         [fInfoController updateInfoStats];
         [fInfoController updateOptions];
     }
index 1bb95caa2c48ba543dda9c7eb3844735ce2abe61..7f923233c08d7fd9d0eb5ca2d1621e00c8068a3b 100644 (file)
 - (void) helpForPeers: (id) sender;
 - (void) helpForNetwork: (id) sender;
 
+- (void) rpcUpdatePrefs;
+
 @end
index ea5f504aed67a39561e500da94eae238310790ee..c7c01ce9e48f207c5286d9fd77d65b3bd6fcb613 100644 (file)
         inBook: [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleHelpBookName"]];
 }
 
+- (void) rpcUpdatePrefs
+{
+    //encryption
+    tr_encryption_mode encryptionMode = tr_sessionGetEncryption(fHandle);
+    [fDefaults setBool: encryptionMode != TR_PLAINTEXT_PREFERRED forKey: @"EncryptionPrefer"];
+    [fDefaults setBool: encryptionMode == TR_ENCRYPTION_PREFERRED forKey: @"EncryptionPrefer"];
+    
+    //download directory
+    #warning missing!
+    
+    //peers
+    uint16_t peersTotal = tr_sessionGetPeerLimit(fHandle);
+    [fDefaults setInteger: peersTotal forKey: @"PeersTotal"];
+    
+    //pex
+    BOOL pex = tr_sessionIsPexEnabled(fHandle);
+    [fDefaults setBool: pex forKey: @"PEXGlobal"];
+    
+    //port
+    int port = tr_sessionGetPeerPort(fHandle);
+    [fDefaults setInteger: port forKey: @"BindPort"];
+    
+    BOOL nat = tr_sessionIsPortForwardingEnabled(fHandle);
+    [fDefaults setBool: nat forKey: @"NatTraversal"];
+    
+    fPeerPort = -1;
+    fNatStatus = -1;
+    [self updatePortStatus];
+    
+    //speed limit - down
+    BOOL downLimitEnabled = tr_sessionIsSpeedLimitEnabled(fHandle, TR_DOWN);
+    [fDefaults setBool: downLimitEnabled forKey: @"CheckDownload"];
+    
+    int downLimit = tr_sessionGetSpeedLimit(fHandle, TR_DOWN);
+    [fDefaults setInteger: downLimit forKey: @"DownloadLimit"];
+    
+    //speed limit - up
+    BOOL upLimitEnabled = tr_sessionIsSpeedLimitEnabled(fHandle, TR_UP);
+    [fDefaults setBool: upLimitEnabled forKey: @"CheckUpload"];
+    
+    int upLimit = tr_sessionGetSpeedLimit(fHandle, TR_UP);
+    [fDefaults setInteger: upLimit forKey: @"UploadLimit"];
+    
+    
+    //update gui if necessary
+    if (fHasLoaded)
+    {
+        //encryption handled by bindings
+        
+        [fPeersGlobalField setIntValue: peersTotal];
+        
+        //pex handled by bindings
+        
+        [fPortField setIntValue: port];
+        //port forwarding (nat) handled by bindings
+        
+        //limit check handled by bindings
+        [fDownloadField setIntValue: downLimit];
+        
+        //limit check handled by bindings
+        [fUploadField setIntValue: upLimit];
+    }
+}
+
 @end
 
 @implementation PrefsController (Private)