From: Mitchell Livingston Date: Tue, 3 Jun 2008 17:55:43 +0000 (+0000) Subject: implement most of the rpc preferences updating X-Git-Tag: 1.22~164 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=84601b3e09e0d44ca0ee5f1dd200c5f58e5668be;p=transmission implement most of the rpc preferences updating --- diff --git a/macosx/Controller.h b/macosx/Controller.h index 59001c2cf..c2f3a37a0 100644 --- a/macosx/Controller.h +++ b/macosx/Controller.h @@ -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 diff --git a/macosx/Controller.m b/macosx/Controller.m index fd63bbc41..a5380b421 100644 --- a/macosx/Controller.m +++ b/macosx/Controller.m @@ -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]; } diff --git a/macosx/PrefsController.h b/macosx/PrefsController.h index 1bb95caa2..7f923233c 100644 --- a/macosx/PrefsController.h +++ b/macosx/PrefsController.h @@ -116,4 +116,6 @@ - (void) helpForPeers: (id) sender; - (void) helpForNetwork: (id) sender; +- (void) rpcUpdatePrefs; + @end diff --git a/macosx/PrefsController.m b/macosx/PrefsController.m index ea5f504ae..c7c01ce9e 100644 --- a/macosx/PrefsController.m +++ b/macosx/PrefsController.m @@ -624,6 +624,70 @@ 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)