From d7c9da2c8f677d1977a3827a9d678073cfc6a6d6 Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Mon, 18 Dec 2006 06:25:40 +0000 Subject: [PATCH] display actual upload/download rate in inspector for individual peers --- .../InfoWindow.nib/keyedobjects.nib | Bin 37791 -> 37886 bytes macosx/InfoWindowController.h | 2 +- macosx/InfoWindowController.m | 7 ++-- macosx/Torrent.m | 32 ++++++++++++------ 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib b/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib index 22e2981bb5cc996c61b1f2e8c136107b6507c9b5..42fa6b5b9af1a7e15d811fe4d9709d3eea8cdef8 100644 GIT binary patch delta 19850 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 ThCdYT{Wbkm?kyomciH~~1d!I+ delta 19579 zcmaL82VfIN(*SyVl23Oh%htKua+Q0x<=%Vmy;oV5ZH$Bpz37hK+X114VtVf+^pZg6 zy>|$ZkPrfaKp+s_o(%buyzf0^oo>s_&dlzVon8J~g)Ux&PVWR~W^~;KH@0O06V#x> z24Dtk6t)!W!PaBjv3=Nn>|5+R>={e1YwRs{PXGj{z(jxx ztOV8qiNI0dA@CLW!BVgwL=Y#4hu<_orXU~wmIz7(b%J_9t3WR37O3Gn5aW(yVw777-_Hy~IpSR+^~*dW*_*do{}*dy4>A0jvczefcp1SbWj z1g8a;1-AsZ1$P8LfSZC}1#bj@;0P|jahw1*aSPl5m*DQWAMTF_;Nf^29*-x$`V2f1 zFND99cop7+x8q8@1D5*XhC%pXoW{rDfxrj>{E7%m!hw*$uN&b*_!6>SvWYMvoQNk9 zhz$Nld@hkm6cB|(8Bs&%iT=b;Vw`~(PfRAJ5Yvfy#C)QMSVk-dX~YU*9kHI+OngOr zO&lh^Cw?bh6K{w=h_}Q$^d0dhGL`s1{7IrD2A??kfh52U(v%dF6zNF1kglXV=|lRG zA!H~S&EH5AkTGN&8BZpViDVL)N~V$7WDZ$K7Lnzop@OU>>&RxZg={C4WH;HD)RH=K z5IL9}K^n->CE6BCvI&w3)h1^MgMeZf{k%!3(?7PsE85>L>3}TzKO_6WG%80*^2B$ zmLhwRgGeGWIEtJ^&LS7s#Z}}cl8W46vxmr2d2|Ucjo^ z06{H^eZh_ubee>lN14ZNo&tX!SH+;o*#qWVR$|a?-axHr!j_in#LLQE`wfW zcqg~bA_kFGCUh*p0GR@31e1iQmQjB9BP2cTn5J0#!+dIVRX*+UXL)=whl>FIuKf+P|jNDtr| z2C+jWiTF@@2v-;ed-?DN)BV|}l6+x5dMQBxf?h)Ru!kHS*(OH|-avXdt9Q)6$IxGJ z4Rc{b5Kl`p>~D@~U^E-)6pD|d$8xyFvudX#Y$EqM$vF5aCoyjVJ%+vOR4c7Nk6R+XmR`dZ)z^hdA5P$Uc8)Y2+ro9)YJ~n(O7S++YgwLqp4&Fa?nZhy9exRY zjQ#-G{1MsCW6+;@qj36b$o_U#?QU)LHDq(wGTubqB;I6t2fdU2ik`)8mRhmv-OaGQ z9OixOLH88ietHkf_ehUANGHP2A^HgY4gD=nw_ZRJ5gXnbWbjg653H`fgp5K)BV!O7 zFbB-xZ9?Y3^>u(g%o;pmO}?WW=%eg@k1*^whxi2h#v_?`l0L@9dUkl9HX=Sl|3Uvw zzo5_1Z+kIcM+PtBUEp2jU4nHl=-=7no^4)d;eve%zvtkmnf^u0r+=mhgnr%&@`5Ag zNBSIF=GAO*27=w7&(lw6gd!~HpXdwh5wB*!Ir^d)(AU`j?-YkiG(umauU_Q6hO_q; z3F6!G?O@dv`Z7DtyAE7nzxUprdy^8jz{)WCd-_NC+x%(m@T2&#{DdBUG(U#EL*MJ+ z$MNIoTl8)E!DZkHynr|Gfuiu`Cj);F00QY?`YwClCl=gi9ercW9@9Vc@Jslm^h5d) z{eYGG?&m$De`P)V23Ve=Pf3$#1c6-sMgfF=MZaV>_zmRh;pa640R2juq_s(-->^~s zgYozDpPWoTuwVPf3O>SD1|Y^IVIDy7{-WQp?g6p(P><*H*Z*r7sp$6%0PKK(eA0vg z(1vs~;4OP9AV!GM@eB~qi44G5abTh;$(8#sK*&|p20CJ4a%9LdJm!w#y4gnbia#fO-zS@Yl+Q7>W#W3!|eL9hki z9#Y7T3@+zGP)GKR%+Be$i9a$GnFa(VK}J#_93f-Sn%B- zmnA)ncSTzeV2`>!`|`inXoLkUV$YsAd9g42>;Otw-j<1kj;Q(_?E~-$vKm=u+rGn3N={5rbRgT z6c`soqw!hDfI?1{8PM=ajZGdwH8!~e>)A08fmRS0{#7ubhynFb0e@mZF?%#ZhC#>@ zsK|ds*gBTN`fCg*|A!`FOEIUbm;`fVKrI96VCA=wx#n;|_x?50uNct6Iz^@aU!9z*YhzVW(Vv!) z(l`$t?6#;BekW7~_Kzqp)4rTq{lNegr&fN^PK26Mt9}f4!xl&T)WerU3^>k!a}2n^ z0Lb2H2Hao(6wD(AJYm4E40u6T-$rJ0h8GOPnvgNPlgK#UDc)(`8N>!_##*op_-Vrw zSUaY~I}m&MdGIp?8;T9#J;jFep79{DIwNzC zEeHY!fzSP)W*np8jAKJ!9bJ7_Y=w=+#$aQyamXlaJZMA4ViSrn z4V#6{My6t4Kq}^8^O3EX9$Sbh+4nJrMfHVcX=<%Xp{?vx3}pAm1{nr2U@s(6n$nCQ z7G(!%gb{UaE#i*BwSDvJsaa19xLvsbWuHS}s@Il&?}d;`Cq zkv9c=u0p2r2k=Mp2V!fnb)T7ol7uXNLvTiV__XU#&%V8iZNR4V;zGtjHilrEpx~hB z_ye$Qb%kZ+Ev?-Oj$ETq1{>uF(Ll0>vdu9z9XpI8&VbUK0j0U8SDHsY4+x>4G~x3o z{k*1^^w6l`S3Zq5#yBE38*SKOINmp(!QiA1W5DnWNE8x{9l?$+$Bwd+_^8g~*oo!X z3FIVl3W;lI`lm2^C;t>OcqMikJA<9Y&SB@V3k)zYUs9eFdBwA&@znuhrdNVu_vGWZ8HN#(SdYG zU5BEjO`%OwcdNDk=n0~+Ux7bibj{EtjA5rGIAX7`-&bJ2vs)4pMendbA=&S-57=MW zNA`V!o6`gaOk}_$yjrgA+pk5dh&75%z!UI$1bj9&QIduU1U&))6x*jMg=6;btGWrd zkbjFqKz#$Fy%Q4L;^Epsz5BDusZ@vc5b4p9TdtmY3f#PbxtK1FhiPpjC+S` zKhZ{Fl!L(j-*RBUbSMZGBuPSs0x>AVh5##pRNxMm1{bq)iWP2Q<@Q%Hg(LqIg0H}f zZB6nseBxH%F9^UsB2yVKn*nnmvqbGDW^;;T|3CNuVUQ1*AWRT0h=6=V38En%+=vXA zCrw#`Akx%@9QAV{Ckv(NLyVj-;LFOi?oNeDZ=7aUm@M>7;3im*j6D{laudA3IKd2< z4;i!IGk+l$K`8J>Yy|0SQnJ+W|H@zb3g2G;A7BOHk$4ryhR^Fmh1U=Fepo1^OhVXTQE#nar zwOpWLcc!@fJ$wBGnqG!iF<>>v@c-09!2rlkgzx z#)^u3*K+m$=7jkdCnTKh^^ld)ihTBTg7j~4#tSAua<(&I69YDLn)AQOnQA0wnqazM z1|)|ylCzBga0%>?ruO?p&d#dzeAi5^y6^ucXx={vGKF@50dUx{rRhe3@;)z!C4!~B z1bxMTuQ`JLp$dW(f|b3Ng8_ROu$wa-HA-z~o6&H5UVH1Y=dAk`z9^V z<16R_2Ji<8b_sTWHm%TYLlyKDA3fx1VFcePjEB-qF3W zihqxO3r0}vv8;GW$R|)}^m|dmVCta}^l>j}G*{B~*-o5Rw zjE%qdjyM{t`}c@1VYtc8$;~%R`!5?1?`t~z3h?Cb;_pU=!N9==nBy$+5uc6E;UA;} z81N1*4%CYQf5JewBD1qwp}WiltzaOREx_j^LHI)aOJp7c-qX-gd|*&dy2==A;7gFf zJ+QIISnEbt-(p+xY{Q!I75E(ZS&gs3*J2$&jjzL3^RD6>8Ss~J6gbdF26bgn69$#Q zcls^6F3;X_Gu)CupmjJjb+BCm+hMe7YruEHF&5&xu%Y-a-cx+9F~CBNq;S*#F2I6M z)ZtUOiXVV_itmDTpTpI${|!|UnaO%CT*aoqzJY|eU4FaxLiLN{~$uhmowa@pe|h6#uy~RX}HY= zh;R;20gMb;+X5%UeNJQ#@bB@53`#Jlm_e=S>TCZO&-6w!_%8fM7y*RgPw<~OA8C}9 zkU>cXHG{6PJV&lp{l{?Q&p3CFzxd?tQBkkEM@^yK{%md2fgucLPC~9B>yY&@6x@hx z>h+MwRw%O9a09;;*#X1BuNc&vpzSXKd*A?9p9Fsg>VY%QMVbOF3LQuL-}ql47+(m< z{zxDMAW)cf=l@N(g*25^(9$&7yk-M~Qjl#cj)}sSzKZ`a(HoQ!!hd)l&iSC0kcm%S zf!U|{6$UK$Ykb!~;xb4zw}is~hd2pqo+DvH*g6n)f0Jb^O;vfrxv^nTXci~4TMDhy zjKLt`^5608{{P1(yp3^T@AxcH6z&e!3RKvIL{P6YBSMJK-nGJ+b+}X<=~rxXQH~|l zIwA@RD+UONxL#Fb_ZGzwDR>WO7l`zk#r}qD zx=Y3_E7X0W2nixepys1~+^TE-r1nHPTy;bRQAt!Ws6T@yFlareX_m+sqL!#5>WK!T zk!XSocP!BibB;Dd3(-o*i8kO4goxWXLP4~HFha=}5*evcCt6h63urLdmz~`yaiUo zLE;eWT`o=ehWM5^LL4Q&BaRWri4(+0;uLY3fH?*9N8&7TjyO+TfHJ*ATqdp%SCJrO zJDf)NOWY>z5O;}t#C>*R`Mbi0#8dRmD%j~UaS44v+=mT6GbprVxeS^|Lz7y>pv4SY zvWobHct-q6JSScdzY#APG?hWq7&M(hGZ-|JL9-Y%8>Xf&R17jD{({={miR~_Bw#Bm zof~*0pP#T~3H`vxD=FYR_wb#OxRQViTu0aqTA@M)ExY&+NT_uM#@dRq!j{6Tqy=e7 zT9MYI4Prw=xs!IBc|oR<4($2L4$O&k?jfDoq$+RBjg&4UrEGVV7tGj*&vW%RwNKT zy#;gjYMnp6tGD3IlJ)+f2gvc{A#TtG49YMldyV{t{FXdI9womckCDfr)K8En$y4NM z@(j2{o+Hn*?e+c4k8-x0yhvVxbyvu%?4x=axWU>rc*6KKvB3j-NIvQzAF&+`?%^lM zCmh8LI*UP<7)dTKP^kJFLkRL2^ws1cI4oV=yGDK^zv&^rVGlGoxRb9TofkRMdT2-5 z`TrQbP5#--K`{Hi!KrD85a!{b6ye4XT?u=lwe7_Uh1TeI{{})rgaU-dhH&UsLn?s& zpG~Hpo7Voj3GWe7?4U*&ZreLT6uY(23wP=*++puEy5a7YCjIbsROYeL=IgpvCxZV2?NZ!96Zlzma_h>-!qtSF%1WZUUY0{Ty4|;))OE-eGc+ z9n=zn8+r?c?B*74!5Cw&_w1b(XE2HV(Bf*CF8r`b+zq$OcfnjR2l*(N4ki+V01MvW z-wPLF7la959vF+26O~{*m=G z+;I#wxr5yXqrf;Yfqz*r2rI)%kiW2M<8C+#p8Fi&Jn;^CAcKa%)7x@mCc*f!aED57qhWj&0pmJ4 z1G;j$)Od6wG-j7g;4ue1)R^Liu?*Z)eBhJ|9?l-4;Z7?Mo+qbr2PP<&`|IX1(Wo_p zUWccEm9!^=!eK--M6?9v18LX;j&YMa6oNW986HEwhety+%=f8`hequTnrzG-E@w~} zm%#3DM{$jYB^WZCrseP$0A>g2EO_b+le92#yTOSRzk=sobzeG}}2uL?vuL2jPZrL&KJx#^-(P zbT5Gr?mX85nSt}y4<5!C&ryX?f?MEZ!yqFO&MCKVfm;YYjdHD=&{1DwKVwPH9pP{l z+#?>UFn}`;=LP=#Xw8*LfYB5xb>g9aaC}U(c^mQG-8HJ3wDOp(3C+^mvETiFGnDR z;+6~d%N@iRdU@hH8@MF2v5S!^^j7Z*7{;xDY^)YL3k6>RRroql1@k8~m;s;%<==pQ z?-10#srr3EYN}e+#SO^+4lr z32N{>@C7tGb1*|Gv@?_Vcfe4rihl*#opCS|G8Zd{w&NO@fYtGDB7Z@H04))C!zuU^ zC=N~**ErRJI#myoICL_-obG3w0Z-1bvT*%Fjfvt!SjnlYEmT0L$e`Ug^Dk&m<8f;t zR1n(m9$xr>%B+V*0org*b>R*+5b8Az6H`!DaI1A1nv7%6jvRmn0a^?#)KN~;pyFC` zR-_ZE7&nQ~q(H5A;uP;!sK9h2)Lv*^p!wlc?~`D^GYZ!9nCWrT6Q(CkPg$6rHa%l{ z*7Tg|dD9D~7fmmjUS^#-^leiL80uePN^&` z0#f;}9vmhAqC>`=Qv5CRFqZ1$9>mGuUr?bk*?-A{RiV|!q1eD~Tl0U-f-G!imk-;& z%QX!`{i`J`^uKtZEM;}@v_}tV;AZ6i1;9$Wz1$-HMP>MZI)#RXvZ>wfhA>&EQOQNw z!Vf)AEn)Bimpt@;y-QS7z*QeNfq4RG;h^F8R9(ug+{OI6NEM+*73 z1cQ)%NC{RALy0`3Kj?z4pdA^6v?Ar;3+QPoksPEGsS$FvWDc}1x3ROF??)PuCNK}F zhvs4=3_<3QCx|_W8p+1;kRt57@D^a9q1PhKF#H%NTnK}Y2}mh_C(?z;!BoVM3oXuQ zqywvmF6;u*hyMVn17o4lx(s8T`<$sl%8xiZuG7%%X<+y<2qybz zcLmcC6;{r_$NLfg9;?8r zpz(!vX&r-}=j;^Bn2dxm0W@eR3{5mJa_Ps}D`-~6a=UmTj9|D(U@|;3fz}*_B_TbA zJLyJO7{iiBMxzI_)X<`xBV_u?-A*gh2;G3&e#lz6^R6T6`1ENN!@# z%M7}TK@IdVqtiRhpq&i5gFz?4m;~N(J76@K!JNG{h85^S23<RCN5L{bppovENKywPc z?l$gh9=awdgI%1JMyJw6G-L_JFEBEL8{l5UJe)zH35H;O8FZg9eA>gHqm8QK#N!l3zu9syXVOs8 zPy*2M!z_CObTO#dc$eVD-&*j>s0E_mMXyC~M1P3hir$I-6ulRH5d9_kXoj#+{W4L0 zA#3P29X0FAQkr}o!wX=hbgp?LNh6FoI=|v z@EwJAQK*DMn<=!O0>u>Qp};E&T%ph?3N5G5DHOPCpiqU_kpe{&x{U()6xx?U4^k+^ z`8|cMq`(pim5bq{AB74jG=)O48zLZ?#b3<{i}&@B{LVGu(h9-zQa6uOy0yD6}a zLZ?ySB?W$=&^Z)3mI7xfR7rs!D6moNL80?0w249&Qm79FzNOF#3Y|cqEfhMKLN`%h z8HKh|Xq(Zbn#+*EOSr8wyzFNlA^fo9^SUvQ{#=Mc@M!Zm^Y|X~cs8xSj{(C?;Z5vL zd<^~t-h*$%_u|*^NBAEw*D8XSsC|hvq6jANlrSHsfmfvm5<`gL1Wk-0#=`s3lZ^MJ zSz-<`7v7ovl2}ZvCbknh;a%yo#5I^gdP=;2NgV>-h4wVwfewRrpVP=5Sqf9$`R{?<>TK$2>Sii4O)yO|O)*V3 z%``1Ctv78nZ8mK+Z8L2*?J(^!9c#MV^rq<_BC#j{UM5zE`ilCCXwf7QD_SgCFWM;D zEZQR4Ci+^mPjo_bU361)TXa|SgXop$gBjn<*3925+$_N?$E?z<$*jv@Ho%NF8)wGC z3&*R>HkutVyJYsr><6=-%$}M(Gj}l$GtV$DGH)>NV?M}yjQKS4h2|^Gx0-J^-)X+f ze2@7)^8@CG&5xLWXMWE7qWNX>=VHFtRBSDF5qpTe#KGc7akjWbTq~A~6=J2hQ`|?~ zS3FTXSv*xdT|7fPOFTzxm@D2Qz94=q{!RRzA}LeKj1p58loe$|Nhnt;lFFhAsS2u* zl2ZywNp(>psBzR}iltUlo2k9jaq22{ow`ZgrtVVrsUNA|El>;6!p6eR!okAb!p9=P zBFQ4fBF!ShqS``X(P7bLp|cofG1X#$#d3=+7W*tt7%YCUcw+Ih#V;1mES_8ZW+}7` zune*cv6NYcTSi(&TP9ehTIO3eShiZWS+-ktS`M&WWqHu@n&nf=*H$K0m=$hCTA5mz zTTxaPR@PPyR*qIKR#Gc}t01coE16ZERgG1hRfAQNRf|=dRlAkiYPHo`tMyhJtu|Y2 zwc2jA(~4CN@-f`A2G%@l6KjDrVNF__TANvWS*KZNSZ7)1Sm#>jTNhfZtu@v<>;BdQ ztp{5VwWh5nSg*BSZ@tlav-MW%ZPq)izp_4S{oMLD>sQvVt^croYyGG72ODP_R~xB~ zhmDtwkBy&=%qGvKpUqgC@ir4}CfiK4nQk-FW|qx7n?*K@4K~Yc_S)RGxodOZ=6jn* zHjiz7wE4-_+?KMnw6(UiwY9gE*gDyk+BVs0Y=_&9vz=|b*mkMyGTRllt8CZUuCv`> zyUBL5?N-}8w)<@l+8(yOYJ1)GrtNLpySDdjU)$N*+1p9%oa|ieT2_syb#^+tA$DKb8Rpq7u=~<(vE5R;6?QxAzP8(Kx6kf^-6gv#cGv7~*gd!VV2{|N z_U86Z_Ad55_M!Gs_SN>a_VxCS_RaP!_HuiL{RsQT_Dk)T*{`r)WxvLLo&90^i}si8 zuiD?R|INYD!P>#r!QMgQ;OOA&;Oda#kmiu#kmZo$kmpd~P~o65IIs@09lmgw=di%x zONYe{OC1h7eCu%3;h4h-hm#Jc9nLyDmIx$-L?{tS%q3!pg~Un{A&HX2Na7?3k|arr zq)5_FqLt_+10;hagC#>H!zHsNJ0)LBc1!k3_Dc>(4oSX|Jd`|^{3!WJ@>KFn@?7$# zqm^TXW0YfzW1OQQ!7#WBq>!?DY;+fn7%&r$2BcO2k2$Z@#iY{#9BUpwx0-0QgC z@qptY$8Q{ebo|NjspB)p=Z?QQzH)r+WbPE=By$RPigb#0igk*2N^@#+YIo{z>T>FK z>g%L-(m0KGTI00NX@k=yr!7ufowhsebh_$v-RY*&ZKu0V_np2sIQ{A@a1L;ec8+z9 zcTRLpc20Fpcg}RqbFOz*I%}K_&b0GL=h4n%omuAv&OOe{omV=qcHZQ?#d(|a4(G3& zk2{}te&qa@^G6rdMd)JT;^PwGlIW7*Qsts{S?#jh<+RI9m!Didx{6#~Tq9hgTw`40 zToYWATvJ@rT(ezsT@3}UMXqvJz3X7tp{~PS4X%@2r@Bseo$0#Jb&cyf*A1?lT)%cb zT@#LTV+ok-A8ur8UwzgS0`~ByEwlO53FE z(n-=O(rMBeQdT-!`h|3!bc^(i^qlm9^pffN_gv|@+Hga??X$yYx6fXm{XXCL9P#;Bd_T~H9`$~MBd|iCqd?S1lebao4eJgycd~19geVct-ecOEd`3^Vuj`E%8JK1-( z?|k1azWaT@^S$JI&-Vx44}PSdm7klRyPv0DpkJh4oL{GyLZJE%aOD zx6E&a-zvYge(U`<`W^AR;CIvSvEK`S2Y(NLFMl6@KmP##VE<76NdIX6GXHM>{{AEU zC;6}U-{`;Df2;p?{~i8c`S0>KocDj`|J?sK|5yIM`@ivj7a$363UCQ<3vdtc4Db#J z49E=V6VNw69iR!&1@sRX6fh)!4cHj)RlwnZBLT+(P6nI_I3I8^;Az0yKwh9pARb5t ziUQ38Edp%=T?0J>!vgaI3j<36%K|F{YXa*76@dc+2L}!f91%zdP6%8ZxWN#(IdEIx z&cI!Pdjk&y9u7Pbcr5T_;F-YlftLcW23`+*7x*Cv3E~A|L4qJ6$TY|!C?hC4C@-im zs3fQ~s641DXi(6QpkYBHf|#JuL1Tkv2CWM^6?8V}LeS-)YeCn8ZU)^6<^`Js3xbJY zVX#>+6>J&oADkVW7hD)z5?mT=C=ad*9uzzzcv$d=U?zBU@Yvw#!E1ug1fL7O5PT{4 zO7QjITfujNKZc+oCLwr;FvK*(EQAX24ap423CRyB3MmdL4XFqj5HcuaNXW1dL&(UG z(IJyUmWLb;~&h4b2NJ z2rUlPgz7^3hYk!K5;{E85IP~WC-l3}16$7gJeTx!)2poU&;>4zLg!79h04qotB-GU68$$ zy_UU|y_bCqL&DH7lQ5?+Lu^<=SaMieSbA7ySWZ}1Sa+BztY4TeY(Utcu+d>(h8+(3 zHtcBFv9J?ir^C*LT?qRaZXIqHE(v!IcMF$>`-caGhlYoTM}$X*=Z2SsH;2o^+rvA< zyTjGt+HigNl<>9T>%upL?+o7)ej@x$_`C2A5l93t0*fFbOe4%AC_{upgjN@M9z$y6*(u;upn|#yD{_D2p~!C|k49dMd=h0AMMYUf z*+w};IYzleMMgD6wMHqTI->eS^^NKmH6dzc)S9UEQJbPRM{SMT5p_E1S=95W-=bbc zy@`4k^*)*x?HKJG?H27G?G^1C9S|*x&Wg^B&W|pNE{!gaZipTfJv4fRA)1LE9X&33 zV)T^g>CtTToalMc3!@iDFO9wu{UrKz^xNq7(H~>b7?T)0Mi^rjBaX3*v5B#Z@sA0Q zNs390$%x60$%`qBDUKN&Gc3jsGcsmO%=nl|F;iov$IOda7_&HLY0Rrwvsg)NRBUE! zX{;u8a_q*~J+a@#UWt7W`$MeZr`TU&pU3_l`!4p+*bi|?oJkxWCyXWA z-M9yF596N23*yOmQM@?bGTtWMCEh1KKE5ozK3);8iysz0A%1fFwD_6vvkmcc;}^t# z8GktbZ2XP*NAb@SOcTr#EE22}>=Gmi&IvvV841}5c?ksxMG2(|%7o5@?gUjrzl324 zGZNT@ISF$U<|nLA*pYBB;Znkjgx?ZgC7L7(6KxWuiJpl*iT;TJi4lp3iD`+IiA{-Z ziQ2@)i5nC5B_2%tCh=I}$;4BMhO>#660auSNW7i+F7ZPWl7uFiB;iSxNg+vLNfAj= zNwG=sNhwL`Ni|7zNsUR(Nv%mklO`ukOPZN9J84eR(xfv<=aViaT~E4`bU*1q(xarG zl72~gp7bW!D%m#KA=xq6C0Uy6ogAK=oSd56l-!!!mfW7)ncOFNSh68`Wbzn8^4R1h z$)}UgC0|UwmV7h$R`T8C2g#3;pQQ*>%u=Wn%M_aw`xHq^d`e+TOGQYME-E8kriC8lRe&nv$BHnw8p? zsz_C)4oV%GIwF-x9htf+b#3Z~RKw=fZK+?U?n&LBdNlR>)W@k$Qh!c;mii*~RT`CM zk!F?VndXz`pB9uBoR*%Jm6n^9pH`Swou)|ZO6yJ=nl?IZM%tpZooRQ|9;7`=`!Vh3 zv}bA0(|%9;Bb`c@rAMSkr^lryrYEJRrl+T8rOVU1)79zPbbb27^kwP0({HBVF{Iy5 zf0+J5`j6>9rT>y)mLblt$gs+=&2Y$Y%<#@g%4p7zXS8Q@W^`xt&FGh*&FG&oKVxCW zqKqXOJsB%9R%fiuIGJ%K<9x=YjH?;fGHztt&Ulq+ooSaT$#lwe&2-Cj&-BX7%FM~k z%Phz&&MeEU$ZX8)pE*BsVdkRDC7C^$h83BsGuLKr$~>2OG4o31^~_tDw=?f%KFEBR zCCPHma?A3_^3L+f^2-X$D$FX*D$Od-s>-U(s?TcA8j-a)t0!wk*6OTvS?jYlW^Kv3 zkaa2RO4hZkn^||V?qxm62H9TOKG}ZR0og&>q1oZtk=cdW>TGRx|Lj58L$ilvkH}^W z*(}AOZN8co!O_epJl(uewFECa*b9 zp4Xn&nb#+8R^AtR^YgyUTavddZ)M(^ymfio^S;X4owqmNJl`VUHs3MdDc?2UJ>M(e zH$Nah*pM&FkI0Y8kIm1{FUcR0KRln#AC*5ge?tDG{Hghi^Oxo?&tH|lKmWV@Gx_K9 zFXdm&zn=dt|3d*%z$?HChyt?$|AL@`(1Ngn$by)H%!2HK&VufOz6I(6x?oJfxPl1< zTMKp+d|j}w;Bdi_f};h;3r-cBFL+k)qTp4*>w>ohhWCZ`g^q>Jg>Ho&gqI*T( z7dP~u+VRpMLXR}xqfQW91YQ4(8{P?A)VQc_zYFX<}jThgyYSJJ;^ zZOQtQO(k1OwwHWWva4i&$-$DtCEu1DFS%3lL&?jM*CmFxrGip%sdcG;Xe9HpLg33b6BFm!763ep6 z%F7zclx3sK#+6Mhn^HElY3OCE9F0xzc2q-fmHA+unMBWw8E^yyn?E*s<5fBuW+nz zsgPE9R(Mr}RisvARAg7=RTNYdSCmy$RwybuD*9BYDl`@Pih&hFDuz`|s+e1`wcQ}KCb+^3a=uoEUO%ZjGeR==ozS^d67RAXLa zQDaqOQ{zz+Q4>`YTN7WCSd&*%U(;CAQX{WX)C{SaR5PV!ddT5DNrQ)^!qK?pI*U5%I&DkDsoPSwz3!{JU3GivF4jG)dtCRV?rGhx z_2PQlde8cp`jq;-`btB+yuQ7@Pkq07UHyRiLG?rHN7PTNUr@iOeo6hZ`jz#&>W|hR zuRmFTy8dqc)B0cQU(~;Bz#7aOtQuSz{2SsMk{VJQ(i^fG@*64|svGJW8XDRg`ZNq` zn9wk(VQRzlhM5h^8df%}X;{~=pqf6e-^PH(pvI8K?8chL`o^ZlmPUEwfW~o+6C0;APHUXexVUk1|~jbAtJ zZam(2qw#j*y~YQP4;%k%GHo(%vS_kuvS|uxN@_}N%4o`J%4uq7QZ;Fs^i2br1~-jt z8r?LmX=c;1rj<==n$|UKXxe3HI?;5x>0Hx=rprx_n|^Hix#?Nc^JcW!ve~-Xu36IT z)GTXGYtCrSZq9AaZ*FeZH0zoNG!JSX(mbQNr+Invs^&G#>zWTVpKHF*e7X5*^Y!K* zn*V5i*ZiURV+&|8YjJ6jws^L9xA?YXwp6v$wluUfwY0SKZyDP%zGYI&lorFZmiaB~ zS~j$7ZrR$hz2#8LiPjaZt6SH#ZfM=qx}|k{>(16)t$SMcwH|E!ruAs+@z#^Ar(4gp zUTnSGdbRa>>&@0Xt@m3Wwmxos()zUZS?lxGm#wc`-?qMQ{U`@=o*a`Ca-rNzE|y!$ zZRGZHN4bmKP3|H0mix&AhsuY`Y56GmSos9`Wcf7tO!;j2T=@d|m+~d@W%3pB z)$(=n4f0L$E%NR1ujISs`{W1Yhvi4)59Hs=AGM)vyf%|IX`6eS!Lu#3Ev+r1t+1`E ztzHqOh*cygk`yV5G)1N&Tal+IP!uUj6%~qVMXjP<(Wq!qv?{Rwqs+9edT4jIbK;;nSa3!rAsT`vmr<|yqqMWXrshq8xtDLV~s9dC6qU=$w$W^XZ zZs|zx$m+=LDCj8eDC?-~sOhNhXzFO~P;_*3^yyG_Xgc&A13QLv4DX;jMsR8&bykk|z+L_ae3}Ky#oh6-Zo!U;Ob86?3&b6JpI*)c<=)B+g zvJ3BW=<@A~>&oeB?CS2KyQXw4>DttFsOwVKt*&Q%kUo}u-1-FfN$peKN7-jcpHY2g z_gU3vcb_wTZuj}M8+2QByLQXEGrOz1+q(yKPwHOOy{dbC_onWx-8;JXcYo7;wEKAX zDMR;Vm5s_?<*0H|NmU*yZgR1vQ>GiLRGP zR@JE*RV}JEl~UEE>Z|If(y0ch2CIgt462c;F{<&ZNvf%;=_*z=M>S8iK($DWS*9 z>Y3_=>Xqt^>YeJn>Z2M}o2YR$sTQft)s)&wZL4-rJE>jNQniQLOYN%;PzR|))#2(W zb*wsGov2Pxr>nEnx#|LSvARrMsjgAis~gqL>Q=Qv-J$NIRvFY9wN5=iJy<r>bYDXQ}6?=c*T|7pa%3m#J5%SE<*kH>fwOx2kujzgF*2?^hpGf1^IC zKCV8czO1p)*lQd$E*h!EQ{$uY*92)oHQ|~lO{^wCldMV8WNLCW`I;h4sis0xt*O&A zYFadH8iP{PrRl5br_pH!Xa;MBX$+c?nlYO3nn{|eni-l|nlCi-HD79$XqIVKXjW_1 zX*O!MXtry<((Kmk(;U=%qdBTMt~sSStGS@LthuJSskx)MuX(8XLGzR57tM3cOU-M| zTg`jTM=h!~(c)U6)=W!jt+cjU2d$IVRqJlhdTD*N0oq`#OdFw%*2ZZQwJF+kZI(7y zTc9o0mT4=sHQIV@leSf>&~|A1XjNK`R<9kX9iknsrM089W3>~sleN>dGqtm|bF~Y! zi?mC%%eAYtYqcA+o3-1tJGHyCd$k9&hqXtv$FwK4XSC=z?owd$RC($|U+;ko~Z=IhmP#2;L(?#lH zbn&_*U8*iam#xdw73xZK<+>_et*$}Wtdr~7b)C9yom!`5H_o&To~8RjH(&RqZi#N0 zZl!LGZoO`kZmVvG?rYs1-G1F6-M6~$bSHGDb?0;!b(eM5*jF>%%|&{#-coO)x7R!B zUG!4ciw#q&^;&&@{UH5N{RlmyAFUs!pQxXrpRQ;1bM*7{3-pWhOZCh3tMqI28}ys? z+w?p2yYzeY2lR*aC-tZFXY^O~*Yr2_5A~1qKk8rTUn9nUDBAmLp3wXI`Ptv({{cqW Bn4|yz diff --git a/macosx/InfoWindowController.h b/macosx/InfoWindowController.h index c554e3738..e83d8337a 100644 --- a/macosx/InfoWindowController.h +++ b/macosx/InfoWindowController.h @@ -31,7 +31,7 @@ { NSArray * fTorrents; NSMutableArray * fPeers, * fFiles; - NSImage * fAppIcon, * fDotGreen, * fDotRed, * fCheckImage; + NSImage * fAppIcon, * fDotGreen, * fDotRed; IBOutlet NSTabView * fTabView; diff --git a/macosx/InfoWindowController.m b/macosx/InfoWindowController.m index a7c41c3da..b98ea9699 100644 --- a/macosx/InfoWindowController.m +++ b/macosx/InfoWindowController.m @@ -67,7 +67,6 @@ fAppIcon = [[NSApp applicationIconImage] copy]; fDotGreen = [NSImage imageNamed: @"GreenDot.tiff"]; fDotRed = [NSImage imageNamed: @"RedDot.tiff"]; - fCheckImage = [NSImage imageNamed: @"NSMenuCheckmark"]; } return self; } @@ -540,9 +539,11 @@ else if ([ident isEqualToString: @"Progress"]) return [peer objectForKey: @"Progress"]; else if ([ident isEqualToString: @"UL To"]) - return [[peer objectForKey: @"UL To"] boolValue] ? fCheckImage : nil; + return [[peer objectForKey: @"UL To"] boolValue] + ? [NSString stringForSpeedAbbrev: [[peer objectForKey: @"UL To Rate"] floatValue]] : @""; else if ([ident isEqualToString: @"DL From"]) - return [[peer objectForKey: @"DL From"] boolValue] ? fCheckImage : nil; + return [[peer objectForKey: @"DL From"] boolValue] + ? [NSString stringForSpeedAbbrev: [[peer objectForKey: @"DL From Rate"] floatValue]] : @""; else return [peer objectForKey: @"IP"]; } diff --git a/macosx/Torrent.m b/macosx/Torrent.m index 68f00c2f2..2a616fda2 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -839,20 +839,30 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 tr_peer_stat_t * peers = tr_torrentPeers(fHandle, & totalPeers); NSMutableArray * peerDics = [NSMutableArray arrayWithCapacity: totalPeers]; - tr_peer_stat_t peer; + NSMutableDictionary * dic; + + tr_peer_stat_t * peer; NSString * client; for (i = 0; i < totalPeers; i++) { - peer = peers[i]; - [peerDics addObject: [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool: peer.isConnected], @"Connected", - [NSNumber numberWithBool: peer.isIncoming], @"Incoming", - [NSString stringWithCString: (char *) peer.addr encoding: NSUTF8StringEncoding], @"IP", - [NSString stringWithCString: (char *) peer.client encoding: NSUTF8StringEncoding], @"Client", - [NSNumber numberWithFloat: peer.progress], @"Progress", - [NSNumber numberWithBool: peer.isDownloading], @"UL To", - [NSNumber numberWithBool: peer.isUploading], @"DL From", - [NSNumber numberWithInt: peer.port], @"Port", nil]]; + peer = &peers[i]; + + dic = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithBool: peer->isConnected], @"Connected", + [NSNumber numberWithBool: peer->isIncoming], @"Incoming", + [NSString stringWithCString: (char *) peer->addr encoding: NSUTF8StringEncoding], @"IP", + [NSString stringWithCString: (char *) peer->client encoding: NSUTF8StringEncoding], @"Client", + [NSNumber numberWithFloat: peer->progress], @"Progress", + [NSNumber numberWithBool: peer->isDownloading], @"UL To", + [NSNumber numberWithBool: peer->isUploading], @"DL From", + [NSNumber numberWithInt: peer->port], @"Port", nil]; + + if (peer->isDownloading) + [dic setObject: [NSNumber numberWithFloat: peer->uploadToRate] forKey: @"UL To Rate"]; + if (peer->isUploading) + [dic setObject: [NSNumber numberWithFloat: peer->downloadFromRate] forKey: @"DL From Rate"]; + + [peerDics addObject: dic]; } tr_torrentPeersFree(peers, totalPeers);