From 5d2ae4eb613bbc8e8c700d097f8052e91f7470b6 Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Fri, 2 Feb 2007 17:33:32 +0000 Subject: [PATCH] simplify options for download limits in inspector with 3 check states: mixed for system defaults, checked for override with limit, and no check for no limit --- libtransmission/internal.h | 3 +- libtransmission/peer.c | 26 +++--- libtransmission/ratecontrol.c | 2 +- libtransmission/torrent.c | 9 +- .../English.lproj/InfoWindow.nib/classes.nib | 2 - .../InfoWindow.nib/keyedobjects.nib | Bin 41500 -> 41043 bytes macosx/InfoWindowController.h | 4 +- macosx/InfoWindowController.m | 83 +++++------------- macosx/Torrent.h | 13 ++- macosx/Torrent.m | 41 ++++----- 10 files changed, 70 insertions(+), 113 deletions(-) diff --git a/libtransmission/internal.h b/libtransmission/internal.h index 81a771094..d8f52edd2 100644 --- a/libtransmission/internal.h +++ b/libtransmission/internal.h @@ -151,7 +151,8 @@ struct tr_torrent_s tr_handle_t * handle; tr_info_t info; - int customSpeedLimit; + int customUploadLimit; + int customDownloadLimit; tr_ratecontrol_t * upload; tr_ratecontrol_t * download; tr_ratecontrol_t * swarmspeed; diff --git a/libtransmission/peer.c b/libtransmission/peer.c index bdc685c04..14e936325 100644 --- a/libtransmission/peer.c +++ b/libtransmission/peer.c @@ -211,7 +211,14 @@ int tr_peerRead( tr_peer_t * peer ) { if( tor ) { - if( !tor->customSpeedLimit ) + if( tor->customDownloadLimit ) + { + if( !tr_rcCanTransfer( tor->download ) ) + { + break; + } + } + else { tr_lockUnlock( &tor->lock ); if( !tr_rcCanGlobalTransfer( tor->handle, 0 ) ) @@ -221,10 +228,6 @@ int tr_peerRead( tr_peer_t * peer ) } tr_lockLock( &tor->lock ); } - else if( !tr_rcCanTransfer( tor->download ) ) - { - break; - } } if( peer->size < 1 ) @@ -398,7 +401,14 @@ writeBegin: /* Send pieces if we can */ while( ( p = blockPending( tor, peer, &size ) ) ) { - if( !tor->customSpeedLimit ) + if( tor->customUploadLimit ) + { + if( !tr_rcCanTransfer( tor->upload ) ) + { + break; + } + } + else { tr_lockUnlock( &tor->lock ); if( !tr_rcCanGlobalTransfer( tor->handle, 1 ) ) @@ -408,10 +418,6 @@ writeBegin: } tr_lockLock( &tor->lock ); } - else if( !tr_rcCanTransfer( tor->upload ) ) - { - break; - } ret = tr_netSend( peer->socket, p, size ); if( ret & TR_NET_CLOSE ) diff --git a/libtransmission/ratecontrol.c b/libtransmission/ratecontrol.c index 9e45f5022..4c0abe592 100644 --- a/libtransmission/ratecontrol.c +++ b/libtransmission/ratecontrol.c @@ -97,7 +97,7 @@ int tr_rcCanGlobalTransfer( tr_handle_t * h, int isUpload ) tr_sharedLock( h->shared ); for( tor = h->torrentList; tor; tor = tor->next ) { - if( tor->customSpeedLimit ) + if( isUpload ? tor->customUploadLimit : tor->customDownloadLimit ) { continue; } diff --git a/libtransmission/torrent.c b/libtransmission/torrent.c index d5fa0aaa1..df101d959 100644 --- a/libtransmission/torrent.c +++ b/libtransmission/torrent.c @@ -33,9 +33,14 @@ static tr_torrent_t * torrentRealInit( tr_handle_t *, tr_torrent_t * tor, static void torrentReallyStop( tr_torrent_t * ); static void downloadLoop( void * ); -void tr_setUseCustomLimit( tr_torrent_t * tor, int limit ) +void tr_setUseCustomUpload( tr_torrent_t * tor, int limit ) { - tor->customSpeedLimit = limit; + tor->customUploadLimit = limit; +} + +void tr_setUseCustomDownload( tr_torrent_t * tor, int limit ) +{ + tor->customDownloadLimit = limit; } void tr_setUploadLimit( tr_torrent_t * tor, int limit ) diff --git a/macosx/English.lproj/InfoWindow.nib/classes.nib b/macosx/English.lproj/InfoWindow.nib/classes.nib index c313a24ad..324fce6f8 100644 --- a/macosx/English.lproj/InfoWindow.nib/classes.nib +++ b/macosx/English.lproj/InfoWindow.nib/classes.nib @@ -9,7 +9,6 @@ revealFile = id; revealTorrentFile = id; setLimitCheck = id; - setLimitCustom = id; setRatioCustom = id; setRatioLimit = id; setRatioSetting = id; @@ -37,7 +36,6 @@ fHashField = NSTextField; fImageView = NSImageView; fLeechersField = NSTextField; - fLimitCustomCheck = NSButton; fNameField = NSTextField; fPeerTable = NSTableView; fPiecesField = NSTextField; diff --git a/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib b/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib index 9b2bf70fc9c502d4b14055afa6f91e8db68dbdc9..1ba9c58f8bbafb708263477dfdd9beb191ea111d 100644 GIT binary patch literal 41043 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

5k#LMub(gtE}8(9NM+Lmv%&EcEfvCqthN zeJ%7<=;_ceL(hbM6Z&oF+0Y-tNLbUb=3zI6-5hpnSc|ZPu*9$dVVPlr!iIzm4I3Ud zGRzw`J8Vv*xO<6guNT~e%QXSPr?p{9S!?ATn`Tn4-O9v4-bzBj|z_o z&j{}l-Zi{?c+c?O;eEsVhu;;xB7AfBQ{k_K?+HH`emMMS`0?;h!#@lEJp7CBuforS ze-r*w_=WJ_!vBbHMz|u}5qd;mL~z8-5j`V%NA!*8A2Bc@Gh$H0kccr6<048TrbaA? zSQ4={;)#g85&I$zM0^}^Fye5;@rdsu&PAM$_$AU7X^&JQ)yROzrjdz}DUoTB8Ik=X z2SyH$%!`~5xj6E^$fc3XBUeV=AGtbmP2|&&2O|$h9*sO6`Dx^5k)KEY9%YNNM=4RR zsFqQ;MI}Y0M5RTwifR+pE^1&@SyV;T)TrrEGoxlj&5kmoHb!lV+7h)bYJ1d-xl3JdSG-`^x)|1=%LZW zqen)UN3V*0AbM@|L(%J_ACBG-T^0RK^t;jTM}H9gVf6m!kD^aSUx`66Bu0vnW9%_X zj2hE4rb|rMnC>w>V|vH*iRl+JAf_~?JZ4JFw3rz&vtnk)+#ORD^G?jWG4IEG5c6To zzL<|U9r1k-;3Q7yEpdZ*bA}0#r_fdSM1-hmtrr+UWp5dYZccf zu3cP*xQ=mm#HGh|j?0V7j~gF1A+9j4D6S-KR^0t@FUP$b_kP?5aUaI*kNYU@lej~1 z$K$?_`#tW8$K?s|Xdc5887s&tlKLo~52O zo<}^-dvI)=e^Q4VwjH&#TI;BFudqkhn*f0TAp`;m zArM9q!iF3;aI!dfM%-GpYOPxL-h1yj>b9-5T069LZ;jh(wfg#f-_QH}@H~ISbKlpM z)0{IYXHL$#oWnUsa*pMk$T^ksL(We*Kj-|K^IOiJIhS%C6WS9#CUhorA#@`QAPgc5 zAq*oh2oi#fkVjAw3JF$%n-C#15-`F9!Z(Dqgd2ogggb5c^w43xd=?du@=?3W*=?>{0=>h3K(mQfHatHE9?FI$9&!VD26+~FHhC_2K6xQ|F?k*ND)~D3Ciyn`F8MzBA^8#cG5IO^ z4f!3V9i;=MFQq?aAZ0LRC?$s?qc|v)6gS07siycS2?|IVN7+U>NI6OQm2#bOlX9DK zmvW!-kn)J~gz}8?g4&1Lk2-)lh&qHij7p#~sX}TVRY}dKYN%Rj0~Mu?qfVpFp)RAY zpsu2>p{}EDpl+gWp>Ct@pzfmXrS7L5qn@Omrv6BMNBe}Lh2r{&RUnJ4-u9`Xv5#?x@jc@x z<2d6I<8Q_l#x=$bW(Q_pW`E{D=3wSfrhutnYM2&gIkST4WO|v^Odr$FOfrWvM=-}T zzhX{je#hL%+{Zk|Jj1-iyu*By+bOqK?x0+HE;E;vE6P>nYIDuG6}i6L3Aqz)A!@Vs<&ZnqA8dvLoy` zJHZCo7vxKvhvz)Vv zbC7eDbAxl6bC2_o)5dwsdB*L{?ZfTI9l#y@fr3x?P}wqYque@flAGo>a2vVJ+$?t? zcQJP9aU0^VZYGTutwD&892dfrjqHQr6$9o~K316~{N3BMP=H@^?RAAcZ! z2!9x#%2)G4{0KkBuj429DSkb_kw23^n?H}gkiUe#l)s$6ihq#*7yk1(&&55& zbaA2BAU29^Vy8GPo-Up#o-LjyUMOB7UM^lGUMpTN-XY#EJ}CZPd`x^o{9620{9e*Q z(n-=;(pAz;(p}O^(pxfEGE730kR>)rg``sAkyJ}+B|%A85|z|RMo4B#=1LYw7E6{& zc1iY1_Dc>(4ol8R&PvWnE=Vp*u1fAn9!efdo=U%v_L26J4v-F(4wdFeiBhgqB$Y^I zQk7IA)kzDb<n9r^8!Qvc%4H6jOXihT$!cVNSynbzHea?-wpg}Iwo}T0I*#+4j zvdgmPvVUZ+Wp8Egs{2rD4P2*qT@H;NgG?-X+tixkThD-^2~ zYZaRmTNOJLyA}Hs2NZ`DM-)FQo+@4_UMb!v-YMHDJ1ILW$x5D5sFWz>N~Kb*)G7fb zsDzY_%8YWj5>t*)j#5rmu28O4u2XJQZc%PmwknS+FDjoZ->5!P^->K~(Ns(oTg6ie zRT7n4rBKzXk}6m=S~W$rR<%L3S+z~IQ?*C6Uv*q{Lv>qqPxV06rh1b9aen9guKC^a zyXOzg=jQYCMfs9^S-vUXo?nw+pFcH!TK@F>W%+CJx91Ke6Q9Z|>Cb?T(LUfraI)rfkwdY*crda-($dZl`c`i%M)^?CIL z^&jes>MQE&>R0N2)&HsAYualDXqXzdhNlr~L>jdwp-E}#H5m=6Y0-?(jMhxhOwvrz z%+zev?9lAi?A5et4rz{Q&S@@du4>*Dv@hsb(5awvL6?Go1w#sQ3P=Uyg8TxY04#tC znhUZ8!way25e1_QCKs$JSYNQIU`xUFf?WlB3N9Bs(SD@ut{tMKYU$cstw<}?YP7}L zS}mk))Mm89wTO1LcAa*kcAIv$cAs{?_MrBt_JsDd_N=x|`$YR(`%?Q_`&Rp2H%K>B zm!l)rc>zhbp<-D&Y~Nx!*nBbqjh6+<8_mDQ+3mIb9K9Pdv&e4L%Jin-->Sc@zo&nwf2@C|f2n_^|F5uJVgEvTp|Vh2s4XlkG!zyWnhULkb%hOu&4t-Q zr0|=kXR>TMXw67Yu(GE*UNxt{AQvZW`Ve4K5m1L@Xi~(TeCr z%p!J?wWzG9yr`n6vdB|ZRTM5li(vBu~(28~JMSmR3L8smE7CgWD)HscQC zZsVWEOUA#ASB%$Hy_e@y?H{xiKZw=;J%lgtz| z&CD>f%v>|yTxhN~k1~%jk26m&Pc(mRo@SnIUT5B5-fZ4#-eKNt-e*2+K4-pQ{@r}h z{FnKb`M$Z${KWjMq({jYC4EZzmkcNwTr#wTP$DaFmv~F6OME4Pl5k11BvCT5WNXQe zlHDcyN)D79E;(9qqU3bRk0n=1?v^|*c~#Z3pYW?u%v5vNmvre+Ewyv{ov~IR;v+lGWu^zKtx8AbevEH*j zv_2~BQTjz`pVEP)LrQZ>Nu`WZLuqkoNvXBeR$5W|Rq3SCDW%_(ep@=LbYAI#(nY1q zOE;A6DcxUsu=Hf$11Dk8Is+6dT=^Yvb7XHjzzg%d@F$8k^2$uoc_P zwuCKZtG6}UGB(&Y+=kg^+4k95ZHH_}Y{zUTZKrHM*nYMBS)Nl)E0>oSd=Qvbl?Th4 z%SV^bDqm2(rhI$(q4HnLZ|(pro@ZCtHTF{b2XmL*W%t@^?0$R59uKw{;r~Z#pe~>D|%G)su)-?tb$O%tYBC0DpVDk3SEVv!c-BhXs#GlF{NU5#qx?x z72j7JsW@J7qT+1Dg^FhtFDl+SIyw3~*bc5k;1D?^4voX_2sxsTI!Dq0I?|2?$7II_ z$7aVi$4>$6M!M=P)PHNpaGh3}>#B<1BKwMsR=zQdSTG^$NS;?;CRSGL5 zmC{OirLq#LY^ZFmge#FsymCb4sLC;w<0>ar&aT{2d9m{E%Bz((DsNZbtGr*?R{5mz zxvRfxplgUL$3=8eTvQj`m2%a)8eGk;tP6FuxJJ50xyHE0yS{Qwc1?9ncg=LocFl3E zbnS5McI|T=a2;|TaUFM^a{b}D2|w4?kcy>4ZG*K=erlVm%3NDSGrfb*SW8{ue)!#@3`-~+uV=c zPd)8D13X$!p~vVkd#oOtr`+T4xIA9Z2+t_bSkDB{M9N>ZN;gy&Ny!tMTf*25+&q#9Qhu z_d2|l-jFxyt@9?m&EBjR^?v1@?49bJ?p@(M;JxC#=Dp#)<-O~D;BE6htNN^pRmG{| zRSBxZRkEtQDsNRymA@)f6|IU@)m0^{##QaBYOOj{^?lW`s*_cxtA4DyRrS7FSS_xW zRp(W!sx{TxYJGL2x}|!1_0H-&)%&UsR3ENBQhluYa`m0+CpDdGhSe}?3^k=S6*bWs zu%@MEWX+hGaWxZazO7kav$AGQ&AOTmHM?t0)%;L%rsizTxtdEg4{ILPJgs?N^Rni> zuZORf?@M1_Uw{b@huAK@SCpXmSE zKg~bgKhrjSNUgMse@M*}AU=K?nZw*q$q_XBN# z_rVUqPQg!tp9XV+{Gcc(4a$Rxpf%_V27=*WG#C$Nf)j$1f>VOig42Ubf?I<-g1duz zgZqQ$gExbBg7bojgQ>hRj|hVZ8Fmhi#w+3>mWh4Am;Kf|}fuflJ_?;`CY z9U?;`+=w6|jz}Z&h$T`Jsf`39;Yc)69~m7P8<`N97?~WI6ImPC5ZN5r8rdE>9k~>_ z9Jv;`5xEt48|@bD5&a_iWwdXU8C678QB71AHAEfJNHi7&qF@w?j*5JV*q1R%j22_Y*fCyA8?(n8F;~nR ztBFCeQL(YH39*T>$+1PT&9QB_o3T5w`?3GxpT~Q~d&m34`^9tP z%D6hNjqBrvcvUGlShxnQJmH4&z&G_y3 zz4)8>ySnyu9qT@>>sr^lu5aCdxnvp`l2$%sYU<2%c18@Nzpc<$JfGzne8kO(G1iAZ8}VoYLOVpU>oVnbqQVqfBD za#eC|a(!}Ra&vNPa(i-Da&NLVc_?`#c`SJ{c{=%1@@(>a^0(xl$-k19lUI{BlDCp~ zlMj-Ql24M)lP{C6lW&vn!46<2@Ds2L*bVFfegS?7_5}xkgTSF+4oCtiARWvF*&q)T zfMQSv=7B0u4QfF>XaJ3%3ABJ^pdECAF3<~BgSB7~41=)`sBsWXgY{q|*bKrT0^;CE za11yeoCr<^r-IYLnc!@29=H%(3@!s#fUCf@;0ACrxDDI^?gICK`@sX?A@FZ{b`)YR1U)Xda(skx~Isl};fsTHZ!sdcH1sm-Zvshz1k zsr{(~sl%zGsS~MFsUK25rOu|#r!J)aNL@-@PF+jgNZn4|OFc-nr5>lAre368rQW38 zrQ4-DraPrOr@N*uiWP&VE8Dxi?kQ=Ikd{6)iLoo>W;KhKTMkoUfhcIXaG#VNQeFaU1rb5%9nb2%# z9<&fz0xgGDL2IE6&}L{Gv=iC`?S~FR-$Tcslh6;)8R!@2SLk=>BJ?+O6}kc4hVDTR zp~uiO=w*G^`abo9dTxC|eMNnwet7-l`q}mC>JQfcQh&AnasB&-ZVmk!7!Aq>Q-ix9 z(a_Q`qhU$IriNV&M;b0P+-&%#u}kCNMs8z4V`-zmv7vEPB~1dfxP3bGzn_%^x>^+WcAbm(4?( zbDBxb)MiFAt67|xn^}-qoLQDxky({ln^~XPnAwuqp4pk%o!Ogd%^b`e&K%90$ehmn zlsTI@m${JnJ##VhSLRCQdgfN_WSLvR$X zgOhL?u7?}p3_Kjh;1Td>cpUr{JQFQyJfp)du6}O_R9{;4$0M`y=nrw)HH{MGO`!`~t8k&lp1kS<6! zqzCc^(g*2}3_^w?1cZ#x5GKM#c!&^@AaX>Bs1Yqvh!_zwVnu971yYH4kZPnB2_g|B zjwFy2QjattFoGaBG7=esj7KISUnA3yZ;@HZ9ArMS2w94(KvpB`kd4R|WIM78*^9Iy zhma%4apV;8Bl0tH4!MB*fm}i^BiE3d$Q|T9(uO=io+JMt|04gP?a+?shtNIx8QLA~ zg?@?lLkFTm&>WP6Qc(uVLb<2_6{9j#f##zHs2(jsO{fJeL+z*&b)!|N4-KFpG>X=t zNi>Z%pv`C&MbQ>?6gn22fKEcEpx>Y~(C^T>=mK;xx(r>3u0hwMo6xQ34s78-xwT2pAcoVN8sT@h~AK!Q_|{Q)61J5Hn(C%!=8t3ak?IVAWVH7Q`Z097|v+ ztR8E^U<|=e6*mi6ewij!~4q->I z#;##Eu{+p(tPOjDJ;(mRUSn^u_jm`q6W$r`ihqvx#Czj? z@d5Z?d>Br|DL5U^#W^@17vWMo4_DzDT!$O*V!Q+|#mjLA?!vuz4erN-cm$8*2^_>B zyb*84vp9;k;G^)d_yl|s{xv=g{}!Kx&%x*8i}0oR3Vb!b4&R7x!MEeP@V$5|eh5E; zAIDGOKjJ^*=kN>oANVEwGJXxeiQmER<8Am8{5k#){xAOD2ZvL~mXBNhSAyx*(x;_w oOaB%^3$caL!fD}tFzYH>H0}QHbofAC`rq`p@c-`r-z}y82NLEpkN^Mx diff --git a/macosx/InfoWindowController.h b/macosx/InfoWindowController.h index ae5488122..391693bc5 100644 --- a/macosx/InfoWindowController.h +++ b/macosx/InfoWindowController.h @@ -56,8 +56,7 @@ IBOutlet NSOutlineView * fFileOutline; IBOutlet NSTextField * fFileTableStatusField; - IBOutlet NSButton * fRatioCustomCheck, * fRatioStopCheck, - * fLimitCustomCheck, * fUploadLimitCheck, * fDownloadLimitCheck; + IBOutlet NSButton * fRatioCustomCheck, * fRatioStopCheck, * fUploadLimitCheck, * fDownloadLimitCheck; IBOutlet NSTextField * fUploadLimitField, * fDownloadLimitField, * fRatioLimitField, * fUploadLimitLabel, * fDownloadLimitLabel; } @@ -72,7 +71,6 @@ - (void) revealDataFile: (id) sender; - (void) revealFile: (id) sender; -- (void) setLimitCustom: (id) sender; - (void) setLimitCheck: (id) sender; - (void) setSpeedLimit: (id) sender; diff --git a/macosx/InfoWindowController.m b/macosx/InfoWindowController.m index 1ac85f7d3..45f533bdf 100644 --- a/macosx/InfoWindowController.m +++ b/macosx/InfoWindowController.m @@ -41,7 +41,7 @@ #define TAB_ACTIVITY_HEIGHT 170.0 #define TAB_PEERS_HEIGHT 268.0 #define TAB_FILES_HEIGHT 268.0 -#define TAB_OPTIONS_HEIGHT 142.0 +#define TAB_OPTIONS_HEIGHT 127.0 #define INVALID -99 @@ -393,54 +393,41 @@ NSEnumerator * enumerator = [fTorrents objectEnumerator]; torrent = [enumerator nextObject]; //first torrent - int limitCustom = [torrent customLimitSetting] ? 1 : 0, - checkUpload = [torrent checkUpload] ? 1 : 0, - checkDownload = [torrent checkDownload] ? 1 : 0, + int checkUpload = [torrent checkUpload], + checkDownload = [torrent checkDownload], uploadLimit = [torrent uploadLimit], downloadLimit = [torrent downloadLimit]; - while ((limitCustom != INVALID - || checkUpload != INVALID || uploadLimit != INVALID - || checkDownload != INVALID || downloadLimit != INVALID) + while ((checkUpload != NSMixedState || uploadLimit != INVALID + || checkDownload != NSMixedState || downloadLimit != INVALID) && (torrent = [enumerator nextObject])) { - if (limitCustom != INVALID && limitCustom != ([torrent customLimitSetting] ? 1 : 0)) - limitCustom = INVALID; - - if (checkUpload != INVALID && checkUpload != ([torrent checkUpload] ? 1 : 0)) - checkUpload = INVALID; + if (checkUpload != NSMixedState && checkUpload != [torrent checkUpload]) + checkUpload = NSMixedState; if (uploadLimit != INVALID && uploadLimit != [torrent uploadLimit]) uploadLimit = INVALID; - if (checkDownload != INVALID && checkDownload != ([torrent checkDownload] ? 1 : 0)) - checkDownload = INVALID; + if (checkDownload != NSMixedState && checkDownload != [torrent checkDownload]) + checkDownload = NSMixedState; if (downloadLimit != INVALID && downloadLimit != [torrent downloadLimit]) downloadLimit = INVALID; } - [fLimitCustomCheck setEnabled: YES]; - [fLimitCustomCheck setState: limitCustom == INVALID ? NSMixedState - : (limitCustom == 1 ? NSOnState : NSOffState)]; - - [fUploadLimitCheck setEnabled: limitCustom == 1]; - [fUploadLimitLabel setEnabled: limitCustom == 1]; - [fUploadLimitCheck setState: checkUpload == INVALID ? NSMixedState - : (checkUpload == 1 ? NSOnState : NSOffState)]; - - [fDownloadLimitCheck setEnabled: limitCustom == 1]; - [fDownloadLimitLabel setEnabled: limitCustom == 1]; - [fDownloadLimitCheck setState: checkDownload == INVALID ? NSMixedState - : (checkDownload == 1 ? NSOnState : NSOffState)]; - - [fUploadLimitField setEnabled: limitCustom == 1 && checkUpload == 1]; + [fUploadLimitCheck setEnabled: YES]; + [fUploadLimitCheck setState: checkUpload]; + [fUploadLimitLabel setEnabled: checkUpload == NSOnState]; + [fUploadLimitField setEnabled: checkUpload == NSOnState]; if (uploadLimit != INVALID) [fUploadLimitField setIntValue: uploadLimit]; else [fUploadLimitField setStringValue: @""]; - - [fDownloadLimitField setEnabled: limitCustom == 1 && checkDownload == 1]; + + [fDownloadLimitCheck setEnabled: YES]; + [fDownloadLimitCheck setState: checkDownload]; + [fDownloadLimitLabel setEnabled: checkDownload == NSOnState]; + [fDownloadLimitField setEnabled: checkDownload == NSOnState]; if (downloadLimit != INVALID) [fDownloadLimitField setIntValue: downloadLimit]; else @@ -483,9 +470,6 @@ } else { - [fLimitCustomCheck setEnabled: NO]; - [fLimitCustomCheck setState: NSOffState]; - [fUploadLimitCheck setEnabled: NO]; [fUploadLimitCheck setState: NSOffState]; [fUploadLimitField setEnabled: NO]; @@ -835,42 +819,19 @@ [[fFileOutline itemAtRow: i] objectForKey: @"Path"]] inFileViewerRootedAtPath: nil]; } -- (void) setLimitCustom: (id) sender -{ - BOOL custom = [sender state] != NSOffState; - if (custom) - [sender setState: NSOnState]; - - Torrent * torrent; - NSEnumerator * enumerator = [fTorrents objectEnumerator]; - while ((torrent = [enumerator nextObject])) - [torrent setCustomLimitSetting: custom]; - - [fUploadLimitCheck setEnabled: custom]; - [fUploadLimitLabel setEnabled: custom]; - [fUploadLimitField setEnabled: custom && [fUploadLimitCheck state] == NSOnState]; - - [fDownloadLimitCheck setEnabled: custom]; - [fDownloadLimitLabel setEnabled: custom]; - [fDownloadLimitField setEnabled: custom && [fDownloadLimitCheck state] == NSOnState]; -} - - (void) setLimitCheck: (id) sender { - BOOL upload = sender == fUploadLimitCheck, - limit = [sender state] != NSOffState; - - if (limit) - [sender setState: NSOnState]; + BOOL upload = sender == fUploadLimitCheck; + int state = [sender state]; Torrent * torrent; NSEnumerator * enumerator = [fTorrents objectEnumerator]; while ((torrent = [enumerator nextObject])) - upload ? [torrent setLimitUpload: limit] : [torrent setLimitDownload: limit]; + upload ? [torrent setCheckUpload: state] : [torrent setCheckDownload: state]; NSTextField * field = upload ? fUploadLimitField : fDownloadLimitField; - [field setEnabled: limit]; + [field setEnabled: state == NSOnState]; } - (void) setSpeedLimit: (id) sender diff --git a/macosx/Torrent.h b/macosx/Torrent.h index f7161fd05..08ff5d050 100644 --- a/macosx/Torrent.h +++ b/macosx/Torrent.h @@ -50,7 +50,8 @@ int fUploadLimit, fDownloadLimit; float fRatioLimit; - BOOL fLimitCustom, fCheckUpload, fCheckDownload, fRatioCustom, fShouldStopAtRatio, + int fCheckUpload, fCheckDownload; + BOOL fRatioCustom, fShouldStopAtRatio, fFinishedSeeding, fWaitToStart, fError, fChecking; int fOrderValue; @@ -92,17 +93,15 @@ - (float) ratioLimit; - (void) setRatioLimit: (float) limit; -- (BOOL) checkUpload; -- (void) setLimitUpload: (BOOL) limit; +- (int) checkUpload; +- (void) setCheckUpload: (int) setting; - (int) uploadLimit; - (void) setUploadLimit: (int) limit; -- (BOOL) checkDownload; -- (void) setLimitDownload: (BOOL) limit; +- (int) checkDownload; +- (void) setCheckDownload: (int) setting; - (int) downloadLimit; - (void) setDownloadLimit: (int) limit; -- (BOOL) customLimitSetting; -- (void) setCustomLimitSetting: (BOOL) setting; - (void) updateSpeedSetting; - (void) setWaitToStart: (BOOL) wait; diff --git a/macosx/Torrent.m b/macosx/Torrent.m index f573e21ad..2b2a5b05a 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -152,10 +152,9 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 [NSNumber numberWithBool: fRatioCustom], @"StopRatioCustom", [NSNumber numberWithBool: fShouldStopAtRatio], @"ShouldStopAtRatio", [NSNumber numberWithFloat: fRatioLimit], @"RatioLimit", - [NSNumber numberWithBool: fLimitCustom], @"LimitSpeedCustom", - [NSNumber numberWithBool: fCheckUpload], @"CheckUpload", + [NSNumber numberWithInt: fCheckUpload], @"CheckUpload", [NSNumber numberWithInt: fUploadLimit], @"UploadLimit", - [NSNumber numberWithBool: fCheckDownload], @"CheckDownload", + [NSNumber numberWithInt: fCheckDownload], @"CheckDownload", [NSNumber numberWithInt: fDownloadLimit], @"DownloadLimit", [NSNumber numberWithBool: fWaitToStart], @"WaitToStart", [self orderValue], @"OrderValue", nil]; @@ -559,14 +558,14 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 fRatioLimit = limit; } -- (BOOL) checkUpload +- (int) checkUpload { return fCheckUpload; } -- (void) setLimitUpload: (BOOL) limit +- (void) setCheckUpload: (int) setting { - fCheckUpload = limit; + fCheckUpload = setting; [self updateSpeedSetting]; } @@ -581,14 +580,14 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 [self updateSpeedSetting]; } -- (BOOL) checkDownload +- (int) checkDownload { return fCheckDownload; } -- (void) setLimitDownload: (BOOL) limit +- (void) setCheckDownload: (int) setting { - fCheckDownload = limit; + fCheckDownload = setting; [self updateSpeedSetting]; } @@ -603,22 +602,13 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 [self updateSpeedSetting]; } -- (BOOL) customLimitSetting -{ - return fLimitCustom; -} - -- (void) setCustomLimitSetting: (BOOL) setting -{ - fLimitCustom = setting; - [self updateSpeedSetting]; -} - - (void) updateSpeedSetting { - tr_setUseCustomLimit(fHandle, fLimitCustom); - tr_setUploadLimit(fHandle, fCheckUpload ? fUploadLimit : -1); - tr_setDownloadLimit(fHandle, fCheckDownload ? fDownloadLimit : -1); + tr_setUseCustomUpload(fHandle, fCheckUpload != NSMixedState); + tr_setUploadLimit(fHandle, fCheckUpload == NSOnState ? fUploadLimit : -1); + + tr_setUseCustomDownload(fHandle, fCheckDownload != NSMixedState); + tr_setDownloadLimit(fHandle, fCheckDownload == NSOnState ? fDownloadLimit : -1); } - (void) setWaitToStart: (BOOL) wait @@ -1167,10 +1157,9 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 fRatioLimit = ratioLimit ? [ratioLimit floatValue] : [fDefaults floatForKey: @"RatioLimit"]; fFinishedSeeding = NO; - fLimitCustom = limitCustom ? [limitCustom boolValue] : NO; - fCheckUpload = checkUpload ? [checkUpload boolValue] : NO; + fCheckUpload = checkUpload ? [checkUpload intValue] : NSMixedState; fUploadLimit = uploadLimit ? [uploadLimit intValue] : [fDefaults integerForKey: @"UploadLimit"]; - fCheckDownload = checkDownload ? [checkDownload boolValue] : NO; + fCheckDownload = checkDownload ? [checkDownload intValue] : NSMixedState; fDownloadLimit = downloadLimit ? [downloadLimit intValue] : [fDefaults integerForKey: @"DownloadLimit"]; [self updateSpeedSetting];