From 459996819e6ae4241ab5aea0b11c16ff853aee4a Mon Sep 17 00:00:00 2001 From: Danny van Heumen Date: Sat, 4 Jan 2014 20:21:14 +0100 Subject: [PATCH] Implementation for channel mode 'l'. Implementation for channel mode change 'l' (channel user limit). Additionally, there exists a bug in the irc-api library that cuts off the first character of the source IRC user. This has also been fixed, and a patch has been included in the NOTICES file. --- lib/installer-exclude/irc-api-1.0-NOTICE | 26 ++++++++- lib/installer-exclude/irc-api-1.0.jar | Bin 174976 -> 174962 bytes .../impl/protocol/irc/IrcStack.java | 31 ++++++++++ .../communicator/impl/protocol/irc/Mode.java | 53 +++++++++++++++--- .../impl/protocol/irc/ModeParser.java | 3 + 5 files changed, 104 insertions(+), 9 deletions(-) diff --git a/lib/installer-exclude/irc-api-1.0-NOTICE b/lib/installer-exclude/irc-api-1.0-NOTICE index 69202558a..9c6f26002 100644 --- a/lib/installer-exclude/irc-api-1.0-NOTICE +++ b/lib/installer-exclude/irc-api-1.0-NOTICE @@ -1,7 +1,10 @@ The IRC-API library is currently a snapshot version from VCS on https://code.google.com/p/irc-api. -Additionally, one modification has been made to prevent joining large IRC channels to result in an occasional threading issue when adding users. The diff for the modification: +Additionally: +1. one modification has been made to prevent joining large IRC channels to result in an occasional threading issue when adding users. The diff for the modification: +2. a modification has been made to fix an incorrect cut off of the first character of user names in channel mode change instances. +1. diff --git a/src/main/java/com/ircclouds/irc/api/domain/IRCChannel.java b/src/main/java/com/ircclouds/irc/api/domain/IRCChannel.java index a97f2ce..8744eb8 100644 --- a/src/main/java/com/ircclouds/irc/api/domain/IRCChannel.java @@ -15,3 +18,24 @@ index a97f2ce..8744eb8 100644 private List chanModes = new ArrayList(); public IRCChannel() + +2. +commit 4f025450b77ba0bd058b5c852652e76f529e9ff0 +Author: Danny van Heumen +Date: Sat Jan 4 19:33:14 2014 +0100 + + Fix invalid cut off of first char of user nick. + +diff --git a/src/main/java/com/ircclouds/irc/api/om/AbstractChanModeBuilder.java b/src/main/java/com/ircclouds/irc/api/om/AbstractChanModeBuilder.java +index b634e73..c19980f 100644 +--- a/src/main/java/com/ircclouds/irc/api/om/AbstractChanModeBuilder.java ++++ b/src/main/java/com/ircclouds/irc/api/om/AbstractChanModeBuilder.java +@@ -63,7 +63,7 @@ public abstract class AbstractChanModeBuilder implements IBuilder45diuX2)OMA@}5EN%o|6+6Wr|*>> zB^X0}TJ0B{N`2nbBA?x(=}(S2FcqAJ8JwBGoDlKAnhX7D#$?G3hzh{$8ZE~rpY(7#J!F_M{`^(q<8~(q0 z)|vFjMk*O{#4@l`SisniF?5{`(j_l*?EUtY)x1^!G)3^UrzrF6xSKd8KgzlU4 z=LrTQRf|Wy`p>cti5T3R{JB~;(5Xt*V$-ssD=r(*6pap#C1Li(uEO7njjw-qx0@VN zqF>jyv(r02OLB+aXAfJ0%~K`^{;+*MIcJ8^H?On7bJM?he{D`x6;r?EDV7%aApSu0 z;qtzMDJ27Xn?tYKWOyE`+1vQWPH<2jb&f` zN`HgR1_zrsoA-Z^2)~n6r`mBs>qkJT`Sf_1U3;p{5&NV8`}_)%S=-(RJWRTNBSnAh zom1>v7(Wuet2Y;Cnf==KJs1Z@Mc%I4$h*(UvG&P1qrcDBX^#H(*Wvmvr7n+? z>Ygeh5O83pMU>|iV6LIGDT3=aQV!;>;JO)sbaP&O0`P%%ZaT|dK7-nou;NLR29;%8h5;1 zSuHO4slKKE>d_ll+ot=E*GB3(k^@$p?47ULBcvK~(c?rzkSQUuTKbm%gh`dM9V%GMb6&v{o~WjtIr=4`Y{{9E7VVB7J^1M>6z zt@;ff-}RVq>~{I|s~)?5`gf$xH$C5&B&Y74zDQYBY0EYC>kES{iC`f);M6I(=l!j< zCVR8ty?U|Jb5v`_9+xO_EC|Y4=pSu!`Ro3$Qn#*i&gkL6{0*hOKR($W$ucxbpKt&8 z>%V7$vnM?Dh`w~jUTNWr@^~Zp=6MyBouA&A)E}GnuHUik-nUtbxu!-F%Duglf=eI1 zc|K>y&*k^V>p2Ic6#RAltJ`&1-RipX(*0F#kL=PphB{Vreu-SYchooO*y!r49Z&L- zjBa!1Tb?{J!Cy$`;k8X|$_7y;X9B~L?R;ncm>iyM?KAb%tZk7~gizUz&Kk@31k<;=J-q ziw!k6m6mDj7W}NHaJPS{)w}EGzCYO@_-tEW^?~Vn_r|xn6cii^9}KOmT^`uI`m?7~ z+jyxPP3#=a4TW7j6I&IC3&SPC*%byY_pcvb=KZ=#UNgGE_1@GEP4*QU zCBG|LnoGS}A2#dQtn6i17ZJyXbtYFHk*Z z?d=9-ZjDjf-Rx>j?%|XT&7IPMqKihoy3_r-LXQ=HJJD!!*;$+)P~(K@j5CTk^-Erl>a+Yd@!8ru z7tJf7-u@rr&y4kK_-F3|bI1BhtuvE%Z8tOeDpDM zR7K#qBsHO(`bz@rpIv>j-#_qIxV~JojptJ1$}rjHs({poaq(|0%I>r_q?Y&}s{b0+ z{kr|m!bxtqF=cC#bpAO!uuEl8AG@-0c@O*88q-CsK6RUp2%WCp6y4UcCYZ|l92 zMZZp7o%YN>-CF{1;@b{{4`j3zPjoq0ckxqXl*XFQjWg4%)2C@T8HL}TWZziplXope z>{zd7*G}ElFAiP1jjH2A#E<%4RC|Bu>Ua4T_3*mYcUC@CTsb?l>3F_lscYkS%gphX ziYh@!xwL8V!IyLNN|r+@{gAP;(Gt^b_LhyET^9&fyZ^0jlGW<-_>}RD37;|y&3^ZJ z$W>KN7f6+s5?*4vP5s?P-**?{rpq~LxULtyk#Si}>&@HfI{!<*>;q)tJ7;Nd7K^%D zMLoOxP5SH^t--*UNuw@~o44?$-S!U>qP5C}i*LPmRy}WhRC#G=Yo%Y#JJ(ayemVZT zWk0}Q0b1WSpKdGK#%(em0)^j)9S`%|;{l-PTvqIEOvB9Ct#+vv@noxq7x5^KtQ z^&n8Are)x_46lh7Wl>FHN#V4{=eQw0&&l_-sqNkLp6Sclqk@>O%Oz$h)1g(yr7;bw zL(*Y}`zFPR=?Ufb0%lE#bCz^+mVrBxm*GxMTZrmFQQJDGP%CvXg0zXkrenV4Vas&_ zs6z~Ba58el(cpS0T6^J88RJAqPPZ~?4wuxaGi$LYdl)n8PN#?v?(c?^jEmeWgXD@( zd$uu=(Qs-?6QaB3(#Nu$*KlJhkFC;Oy)LJ{R|J_xKsHCC`96)s>24mRd(6AxS}OwZ zWv5;p;d0dAw11GUHGH;?K|j|4LEGz2D*%&&3AkA~}7i zi6JD>{YWUyN&2qGQSHem2J3r%6XL?>9@?__u__gJVHWEzDNekQCa33}bnV;TMNF2R zzl$*DynZ;4J|8t3OzOlTdE-9+3gxI|?X|%HBE`K5fFSXTdshIsGNiIFxK2paAqskF z``o8uAe7N^l>mYaIa?Ai$>oa5f?I%gaophFtqbwS9u^wfJFbvCSWR};^P2Pq2h7zN z=Azs!P?UR&4cr+IzAJ%I45_0E97$h)MC6X!SDdf)fQCi6aZn!RXaJHRl&1-v6IWxj zz$?Z-KOJz8A%ExsHUWArmFriJJxCTJ7X%$WAcl_zD9Cj-0ME%C%FsdhGQw$lisdGd zYgx4okVen9LMiUD(V&n)6*B?ajHjlipp7A=&A<&(bKK_>z!Q=dwwg*^B8CHhnnm^7 zpaQqw66|5rlWl-4q;I5GFF)Fties)|(Kk}s(=CZm8o`MmlSG>{5jc~~-aTo%;vM#R znE-yEG?BRp5JlG8p&Zv>GWf#ytKk507_#1Rh+I4soMvpRIDfxcT23z!B* zdf;@_(-%;*)fcc)RT32DK3odsGt#Cjz;4FYxnS^}Sv?&BA^~mILf87IIgZ#7wzRCBhB5u5oj@pB@sZ9 zh=01Pzxp)Z#g8mh!-fpx#66IWBqPCPI+8?Az1?vvqJvSLk<&(CjjHzG`ZkIJr)h!n zmAl1*FtZV#@G1ADG%G}uTCM5{gTn1q?*A*zl5wkRVFSLv6{z?pHyJ{Aa&jOo>! zT9}O`v+#VtmSn6T6N+%RZUNPdvkrrK&#=U3K@^sNW4n_M6}j>8pp(H`o&b`Vjrg1h zwvgQZyyX|-iSMXQ~@5n5ZAdkGk^r6@^l~A$*2VG2iqC)-2srwkkJVA z6KAia|Haycfn0cnpv*my1+p1A?`*(~Ik@q;fX%?8d{D)ZGm1bPBWqd=9+NZWpNI2b zuE1LpEJTk>sB#uZw-A)zI+THR&se>W%l3zERkFp7=^+RuB&$yfEk!@Ln=WY zd3A6lPlBl=hqfDq{T%VjMoEo+*`VX)xX^Z<0$${G!)>_;rZEobUIwojH^r}kXolQ% z1L!j3v0K22QTzO8=oHI*0#=a6`_yybNluek*&5**oTZZjRM8rto;)am{5pXWx1beV zVeAFJ1Xqb7GV1_e$VM7=0uwS_E1iow2D0e$3B)qwvtAIvkluax7$X872EbMFCN^&=WP%XYhxllxUdah!kCFrM4y6f`YQ>{MVQ!cK+|KCt84a1$#6`la8koXE zME}cU7oTG6`F>?QoYJ5sjl!s@7)o*n#=<&L+C-1=p_V>;QZA6e?{5t}dKBiqvW9ZP zG;=_$Qt1GGGPy#et)RF%lVK%u^geKeymPc_+K^K=E^sH~$t5@VfeEU5225hq>^S?(jJtEp&ArX*>Lys9oM7d>Zj+R^`2=&z4wIQg`|E_gMlwTvIsFG)fZ{NOOu4G{J_HR_ePV`xv>}-&=D*2Xy zqr1)mn;IRC1j}nCfNX)`A@h)9n7|W17V2FB$=DgG`oSsm)D-#p!EuDz;|FaCb;}Rh z(|JH*{>-!(&GLsXWDWU4H$rv!;~=TZKqdjunNZ;Y(49~h1E4FRBm$uqq5K1(FQG03 z!Wo3Z$ZE(i2$F#}Wk?OJqkg3Zz^EVyE+EuE5S&jm<}HOw$y)tV7)mJ9WpFX!rY?gk z3Dr+gG|IB&a1L2Jw;Zk@YX&QLYq2Y!58*yr!9%ePhJj=)HyHX6YA_h<(($fZ2^SIS z#!5JkP&%vN5<(@c;_1Fw#nbQ#;YD6GL`kpaSzEgrdK29%t9iPkLviG^wZu@KTvsU1 z7w0uRp9|N(CG;zNXtawY*1`qal7OKH(QJlRi)H!0& zTF5a3N)pTFVVE-}26MF0>M*EDR#U0feQ~sWgRc^L9tPzJr<>yFC()dhNh%|dJlA2) zofM9ox(aofk>_ab7Dih(@(fi_?0++OY(pK&`+v&rp9#mWg9o^#$MShUu#c7;CySf7 z>Fc37Ek1l@!h?H0@iT}AtiX{vD1uZ%d3G%LW1%yL+dK=YeMF_3HTUd*)HdcJ%U1)DOoK9mdu%4V>hcmTI>rc#_D>SCm zMrcG!j)@XzoQhvw;rK8&;)Ba?q$D}*jdCOQX3s_(g<%t?S<93&G773h@C`MA`t5F>xa zKa=<@6d|Wb-r1BMiB)sDv8q0G{baWFBeh!CL#=W?^+=*U!AwH_XMZCy4}<*=|Jd?@ z9{x;A_k31D@sT{2tD-Ot>ZKifxREIhtL^uK&tlyGyg?Rx7$)DbB(()1$RnEPO9-Z* z)ejn@GMd2{zSjO(3Q>cc!a)mE6~}n2lD=^KDQu}6SC=K9wQ}6OZ^oU?cK~E)c{*(i zeCN#@#PVOT{5U@O8dR_uP9}TWu^Bt{Q-}i4q2~l1!axPt$M6F8h{62pqUgaEsES0z zfC7p^j6?eD#jYmUfFZ8U(R>E##V9-#^h*rL(+&|^KPW6y34&!73$^J2YJK9S9gcmR zi61h47)wb?bQIbu2}IDrSjKFd$bt>A*z7lKmOtwsWr$h)L~0I~{_rjSPyDlT1mA57 zR3IMuZ^0feWRvAQyi8~Ez?gulm)PQS>?MDRx1pvja1zm#iNm@=s>B8A2th-IGJNCz z(*<`8%9c7Rh=b|`rh$S<)Et5lM~#|*JU!$@xajwUgPnPa!=J#H^#CpOAOY&3qgpuY z?-H4G#o3Ovn2F`>|C6q1I+VOFH8Iekp?^P!nsFP8ZO3gL|Ec^+mxvnc0l8u5;rRoL zWzFYGpZ*ZEAi~241(cfxCFx}H4J7!KL{QCE=tK)yHYB)F^ST-T$@nKEm%z)oR{~Cz zoaqQt{-*fyeSaGhx_6zwS{z0gz{isrpQ$h7D5c4C)H&yZRJUSVeK>OdfR0|Q0{i- z-03d~75e|>3mu2#wMaa2JFtgNQ-_u%(1IPjHewCM`!${L8kPbnbaDq|6TN#BZ@W9; z;W3H~YIVoA$>A5l_?=kblE;v;2$G#Ovexa2WLmc1pql;@l(E+cZ|?78g6htkeoq8% zxHi7J@F(Gm_Xv5@U5q^6w1=-iT;~mWt$_~h;_Z6HF6^*_?~ub%sCO4sBGF1FVVsfusb!VWp=CjY$4fH*FA0xip843Cx3LqkUTw> z5=MA*C5#4l^Y%j~6?>t&kza}lcMHYa9WjD;FBPhi#J#6@*_%f2@Dxjj@ci~*9yf9X z@Aw|xll_3=-HaN+!xJhzTaU)gtvNp72!dl8mP+2tFU44{qM&|m`xI;8ur~w z*@`G_FI0lfiA0SWIHEDz@e_PJgXheJ3=FVf2NA%-FgEQ6eMAor#Qr?|#gWrq-W@Y# zF9uLZ9${f+GPdw)FV8|ZC9pq*xcDw*WF3k3#XdfWYbYHTBLC~w$l;YtHwELeA0?zf zbCkayNSgln%${((sbY=MJTaO*UmZ6dAZUh}Kt}dYHFRk|M)pI*!74P;!J!EsP67X= za8VY4+;D(*{-hqjFxJ@wrs)72ML&!Qjx&O;V5i#ugRm@@h)&AnWomIIMu^QP%eeFm zNfq6umd%QYJw?RJ_IQMs<%+3gZPZ?Yzj}y3ytl$`iubOR@UG)uXkYl|hI|P+STO{n z{GS6U=6lRhZ`>Tp;Tr~j!#5iR9)weA>~r=H0={ERY9`Eo^nb1+*!27F<3Z-=AD%_x zzklQN#pcvd?d|I97PuBrf5mkk-{$oAVDQ&2SX67m zxTT?i;o*O7y4qMZT_dcwnwkOg>2+Tv=FP7GJ+$Ny?>Sj>2%8VRF~k!`7v-TS%J_s^ z;}5s+)c*P*-fOpw65V_2{}mmR4VjnvtZXdR{Ah&K?rdmG2X$e}O=~4wFJd_9{10Bt zlM(X&W-96j^U8r1G|cee6_2R-Vzg-;0fXbvMt|qf;&a6A{RpM4d2lST zQ#I6L?<6ho$nnX<(JQtg^$@5Q+vF%#<(mT`7B!ZjgY5NZ|6gO zI$t~M%fi;-)>}sE&(o-BV1$x+0q?jGEj%U zN0P4pq2SG0{AgClpLX(O3p=0-X^J^!=*M;j2+ zc$BV&vX3xVnt{a=6{v5TEb)%>L%%>Z#n6GaZ@S*w^DGv+j5EM51WhQ=F=)~eW^X>m zx5>=IqJQHokKwBxaZ}>zo+G@b?kJ{U*;s1X1kKyPRQ&L8{?8lhL2F7>g__qRJg=8U zY^ol#u@`1i0qS7qtN1`^(bCdiKQE}?G z(`Hdo>UWb4`Q2+u|K@4}OHnb*;Q9hvLU6!PLYxG{2=NIx5W*5V5h4b<45FlHJIw#I z(fcf*$Grii3FZOxAcVe%FCh{{TnWJe#z@f=igWLYFkosV&Fehd^v7Biu2%@MIC zNgDPt@A-90Q5MTwlH1a*O{=Jq4;G~pP$M>YHXx~3sQiF-uO?6>3li#%nyJVj%2LMa zPuE6Bu~8YM4tCJc{pDGYVi$BLnP{gT9qWAlR3nXy-sGZ-p1 zLCgclp;$53_Q zgG7jp)~G5`I*xIRE-pQQ{d_2f>aFmUMWjm99G>0Cm|Z@vUWA5OAG}pyfb$)tf;@~c ztS(fB8yBa}Sw3m1Mn>=T?I#_ao%OS26|;{j|Ie_{Hva_Ru8|ux%Td2$vxmp<``2d_ zWZrf4W%*ikgxtD)JpP!0)vm^)gyTX>x{ zZ^xYHhaM%J{qnte*}J_5ZDz1qayS(oD~8Cs?T>cRnRrA;H;|JsX_cIJ<5fF}k*58t zwbj*rt{(Gojo$F8#}}eM3{ug(xI6lpor=@fZ7Vk(+-6eyqHFLj7vmyt(H;|(G@r3q z9SiEq#jbUmkIcGJ@l|VN^<$anZ`mtNCRtwOPX21(pSRt{Y}nptl~QGHxw2bjgOzc7 ziK<1!lmxF;-hQ{cEzHky@}$Hf2LHS>`Orn@#t+Vu(_|j0Hg!k$uUpw`I_%)%64BJD zrfi?M&5=u;<$Ur}qepo*lspW))vl%m(}P~rXEG$q(oS)QHiFLfe{W4HNm(}U9y zx@~8oMz}uF9%nSVbyM>`X_$3njZR+55HI@!8`Z~G=d+y}MkhohtzS8r<5uF|ziU)? zzUUQ`va7mMV`VIkK3X%e@}h26yu#Z)@9RVEG&y<(t}-0>yZWxJd*5`2m8F4)*Xvh4p4LCJ zaoo3eJsP%3Gre}Xmr7sUouo@x!dbYsG^vU>r)UypD}JM`-* z=Wuq8#^!IVSw%NrdNi~IUrHM65OK?`EW6#g#YHaQg~wdOit?LMyIK-`{Zw`aX*i7^ zBGI4nMRxMuP4>Z8<2TjiogJZ;o-{&t)ZNS;-_;MbW#gq@50U-xKuNy2CHVF!=fO@Y zZ%RC~ml>`X-LmiI_^9XiLf3GkH#8s0H;7ZdnZj|%WvcO(m=-;!_PfHKK)L$ z&b6}RO7Cn6?zz`Jl2okD`?A|cZKHGI>-F(&4lBf?d&bmvC@HBmJdsB4*ik4)K7Z8o zeO)eTQ!hw*6-wN(d*^TX-vu~V?vZCswiVkru{3Ln+>LHAx!|v7b3`P4JNmrhR7Yp* ze7rJ8m-A$-TxwL&ry)`@=6eq2puU-M?&rtC2&LofjJzH5#?ACQf5YhqM9MR6_xb+t z8QoTS$&;58(d}Hf*;h_6=jT@ElAK3fU)bTLTW(EY|FX5n(J6bkk^RfjqN<5qFwX32 zP0l&VOHRB}pOs-3BHlZfeeGqx%ZfN}!TtrrJ)DPf?40I=c9y%?6|yybUp zUPux5eS)b`o=4#rt5D9{s3EQeY^Ml^LqB}R-TLt>{ZMJln6IL_BWx>7P8}GN^u6e- zR)TTclaTvrej_99PVZiXA|k?mZGJLtd~Z_XX?->ufCUJ#_nM`N2tBrtO({B(voE>jyF0EiboS2@2Xf=V8qR z2lN3IpS(0q1z4<{pwV_=o@e%@(aQqtA~N?aR@E@olQa7MC3ns=p5nAAk%JFbIq9rL zI+c<07bl;!*V(hSGR-e9(6T${!Pw`q=Ik$%hQ=LU6I&yCBesHL7bMfT%j{i3$cV~X z-gc9ZJSl2EN%U-@9hlIS6!R=z8E-SM9bY9ni|Zxsm)Y&w2t`YTI~kncq!xcR&Z z=Z88Ui_A8J&V>@m7k2MYHFIef8WcbBx|FriqGbD`Cm@ml07EhwD;<$ zSJf49$~l@)59MP>+L7T^hn73Hyr;r{@mJ0on3WapX9|n zrIRc=c0WEN{cz5&Z7*x{)7Y7o{A|}3%TM<> z9o0J;+;XO;M_gOA{&Uh@Bb%uF<alfo^`6^=fbj{JH}N% zI~R}mdi1vZ#241{H4P+FU;fh1xt%VyV1b5P@&Zkn+e1|kh0TZ7hr&u~lDw_&)TCzJ zx9EuQb<6(wXGGyVJvlZpuk|Xt6fz^T&{a z^KmAJuRCy7?e%yY|LrXo%eVgrT zebtLT$hN*N=FV-derK-Kwg}1@et4QY{o|Nr`Ew_1_+Kit7=J8j|J=B+QK6w*W9}PI znDMjsBn&TJBmOdZ{rjLBtlI7Ib;a^;ytDn+b%FaEcc;m5cFeMOzkDl0%KNKvhGg}V z{ZBnSD$ZXpt_tmWp7LXL;;AizBDYldJ&kSnl$`C7r#SVB*4Vl6RIgztYeI6bbxEDcT=X*44wvLgkY&TV%+@SS~VeS_?OAM zc_!lYMbS4j>n0Byy^gxvfHrDLfb5zvo6a+LL@Dkm=B|4gRWaAV{*rjocsu zk7+Vv3y=4aJ1;Ba=K*&Kd?!|*OjC*_k(nZpt0}DwkRVd;&mCtRuDI}v;pZu)#~HLS*(e2^b3bFpipz~!*u5AKJ1$W@o%(S;LmUPiF00x;PR89Y7M7f zgoz{PH*@Xh@vtdkpLb3Kcr&E5IJiV|Iyok(vm0Wyv4F0n)HS@c$bGiXmMK{ukvJx#MclLal>>0TD)iXgXk)F3*Gm@G_#>0lbh* zu!by{wKJ7fEU{KsNbQ=IsD2X^<>_PtPewjw6{u!N_0>R(NrQeaNGAbLJyWst7M351 zY_a;STwId(^FS{na$_BM$&jZv;EAI*g>wf!Rrg|%oubGi9a!>C=K~o=@6`g31Ei>} zzM$IK+ZNp@0K<^wW+=xi-3(kAP4~BebqpDcz*mNxTL?NBa!fHWC(AI?!zcOzHuadE z4rH|z4&t5M4w@KX-VRXBSRSzpJY=$`y9eB2s_jcTI7sreEc{Dh46c^-qI9o=Di>)K zum_0q?pFZj%;1Gpf>N?$@_ru!qe-~KmWYRY;7wMQO}3<+2cSGJ`2+|gyDYD%UXX0% z2JnpW=Vv2GX2_JwK%XIZTmhpPv8QdIj0q#R9n2;R;Yeq~%`Z4!yoTPj;hvOV3Do9! z+y#JY|CEKAYn%e~`$uie?0?Z|8vfTR> z&J#67Jl}U9jUlgn082@SB*Z4&(hYCrX41%R2`*EtO^KKG1%xxmhu=XXvn=-kIEM6| zc<-d40ZH@~J1}-QPIQJC3g`r5c{AmpAK}d2AD+1gb7aK@nx#=k8Pwy6D8e){;l?*b z|5t+(P>K9Iffw(l5^Q9WRHO`>nb2d^V3Z6Aq16ByGl1_ypff`bHG+p3>?;%O7{Myy zeiTEhTf!m+d%_C7A(`Rr8wy8|la2Sn4c;Z$?Gr1J+Kj#aBuX7^2E0BGSOw|sBR8nn zZUp9J;seMEwR%8ZQ>=0;1DDMzBoThj=AuvN!iek?$+|`tX@ixCYXsIsa0C*W8bF4^<7cmQ57FO%2ZFG$9;X6N(cKhY{*@ICP^Y6nzh8dc4Rz0(z0L+z2?1Q0)=WlTccba4ex>BH?&K z9gT$Eg!&l?0|^xr1w#pSI12g@3TtK~^=L@i)RZAMil+Wa?Zc=b8crqD+h{n2P~J1) zOhQ%7gt3IunFVJMeHpXhTtdB~C|b*u7#K{(Dr4YmGNv}0KNde5h7j)6*?cYLb6^x1 z+c*b?6YBjOEK99x6gn49C)CNga5ABk=D{#REuP1h?U=`x7(JgKc^RMDx&Rxa-HTiR zgNW$y1$Y2dC;$qJq}|u3=|EDX>_3 zGWR5*)&GQ<@Js!@_f$I(S0?ABm8O>XEKb=nG%^}sI%*pY`46QMbp zw*)GY;Sy?CWD_-P!5y(l0=-IrvV_%7u_U?N#9BSBGgralZ)1*8t8!=IokJJjd2EFo zzl0JJp*x)(aZ8I&rFh3Uh9fi;0xd7%4$@TT?kG}1z8N?dl>a-m63wdBSga}DES9kl zdPWI@mPX!-_|Atd!X5@3qd7^(XvvhN(75Z!t;bb2x0+_lBn+<^z)XlaZ6&-rDheCu@%pq0ZzmS zA@u1U+QF?!c(bGH?rahj=4*OXknZ5OGsDZU+uihDS-l zMK2R0>Ic~SyEtFMh5A}`0IsbDWd7X)K?c^Uq(O|)_mD9ed{09u-V`mu z+nB+3k;9F~|*r9E3oD zXaxt3ra`}2m-}4Bfb4(v%QvWt!|ay>Z*2UU5z-`TgfcnM2;sN(V3d)|Y*fbX;tdE} zzVnZJ%BD!4gA4203aCNPs^huLaa7;R=bxN@H>05X$if`RA(w1M_0ee|Q`cj)3fN!a zlTF8xxRRC06im>u2zCZm`yKBsHbP#rY$(+R=vgMzq`fFP9j&nfd+`Np7Ty%D*%Ph5 z?SVQ9Tgk7TxRrQr_BawA?gr?R+G(YRQ=LhS%2|+2AEu2BZA;c+2P*K#O2`qO3yE;b3~kzwV0_`~UG(=zKODNh@t{?VXc=6|TVRU3hEoA5D~wT*W^(B35Cyq{ous z@EjT{h|Qo;RN8a25QlP4YW}HzK3Mb{96}pt%#!o zbD1!lF8lO4;`t21=@;H=b!MX@YoRIbBuJncvw5Dcg{XeXf{Kv*^ACx}D39r;p+p#s0yIj0FkETE~AE>kmPcpG~oI`--*Q}5!W4G<_RJjY` zx26#M-4vX*jT^A1RH$gj25j3pjqrLmFdLh}krUI3v6@0W1H**WIHgliQ&hhLmq_?V zs75c0ckaJSJ22i9FJ|H0&6q>*XEs88x@?aduk>@k-Yv%4t1xtGCJm+9SjapdYD-c} zj%tyi6`PQe#BSrvUSt*9pW#k<@x1 zi%JXlK2}kHQycyOd@f*)sDY;3-|5cICwSbZW2%BmN+n?Ju*Wft!+8{5AXf_b4l2{@ ziTKvV#ioNd^H~y9SC1TyM?LRQN2NQ#hc0))s#5GqzwyJ&TDJTw>yAMKOORQ-KRwivQ?K z+)jjWmyww;|E*Y8?hb)2HodAyLh2}<+b-e)g1U5N#+7ZHwgD^Nj<-1B%a_g`WSi$FVGF*%QK_7ereagS@#Cy?u#N3Hfzoi}w!X^gc$B6KyX-1{Mj1)@S#!S&^ zx7NsScxtHiD17MrI!5sHN%d$ObNUXnJpVrM#-Krk(1irxUx)*^UQe!mAM1e{DlBBS z`mU+o`1**qKiuvy5UPp64KyBKgT;|Y1D>58z6{%nt#5*57T^s)c*FS7$XqX}#-`Op ze8&kW;xCDaBJ4!+WdXnn)eCqn6tDD(fM|X?7pG_&knVd3(wA5X#%C%-PG);A%!w# zH4JpL{}vjIMwRg!Y(-_*;86vE7P_@wlgTObrd8PY4~&u(NnR$%5u6cm+1H9AKFUmpD3 zRj5HN<@}C>%ziAp%ZHLxNBnOQ$a5;!sBjK-h`RlgWNWlyKXj+9$c`SFeHwdaje$l& z9^yvJ0o?bt2!y1!MCWDT>xaLc0zs&?91cN~5AbU_7K_6dlLW3A=u%%k{9%KI=YjcA zWc~iFfw~Sroqs_3d<=^Mc_Ez&X!{SyObE1!0vV!TA^49o3M-&FxGoq_u>7+xEBH19 fiznlc@LfY94Cz+jkgy(EH1Qy0i{A{xwaEHEkF%v4 diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java index 9f4995810..7f62008b0 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java @@ -805,6 +805,10 @@ public void onChannelMessage(ChannelPrivMsg msg) private void processModeMessage(ChannelModeMessage msg) { + String sourceNick = ((IRCUser) msg.getSource()).getNick(); + ChatRoomMemberIrcImpl sourceMember = + (ChatRoomMemberIrcImpl) this.chatroom + .getChatRoomMember(sourceNick); ModeParser parser = new ModeParser(msg); for (ModeEntry mode : parser.getModes()) { @@ -885,6 +889,33 @@ private void processModeMessage(ChannelModeMessage msg) } } break; + case LIMIT: + MessageIrcImpl message; + if (mode.isAdded()) + { + try + { + message = + new MessageIrcImpl("channel limit set to " + + Integer.parseInt(mode.getParams()[0]), + "text/plain", "UTF-8", null); + } + catch (NumberFormatException e) + { + e.printStackTrace(); + break; + } + } + else + { + message = + new MessageIrcImpl("channel limit removed", + "text/plain", "UTF-8", null); + } + this.chatroom.fireMessageReceivedEvent(message, + sourceMember, new Date(), + ChatRoomMessageReceivedEvent.SYSTEM_MESSAGE_RECEIVED); + break; default: System.out.println("Unsupported mode '" + (mode.isAdded() ? "+" : "-") + mode.getMode() diff --git a/src/net/java/sip/communicator/impl/protocol/irc/Mode.java b/src/net/java/sip/communicator/impl/protocol/irc/Mode.java index 2f2ee5931..6eb7d15ab 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/Mode.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/Mode.java @@ -2,38 +2,75 @@ import net.java.sip.communicator.service.protocol.ChatRoomMemberRole; +/** + * IRC Modes enum + * + * @author danny + */ public enum Mode { OWNER('O', ChatRoomMemberRole.OWNER), OPERATOR('o', ChatRoomMemberRole.ADMINISTRATOR), - VOICE('v', ChatRoomMemberRole.MEMBER); - + VOICE('v', ChatRoomMemberRole.MEMBER), + LIMIT('l', null); + + /** + * Find Mode instance by mode char. + * + * @param symbol mode char + * @return returns instance + */ public static Mode bySymbol(char symbol) { - for(Mode mode : Mode.values()) + for (Mode mode : Mode.values()) { if (mode.getSymbol() == symbol) { return mode; } } - throw new IllegalArgumentException("Unknown mode symbol provided. ('"+symbol+"')"); + throw new IllegalArgumentException("Unknown mode symbol provided. ('" + + symbol + "')"); } - + + /** + * mode char + */ final private char symbol; + + /** + * ChatRoomMemberRole or null + */ final private ChatRoomMemberRole role; - + + /** + * Create Mode instance. + * + * @param symbol mode char + * @param role ChatRoomMemberRole or null + */ private Mode(char symbol, ChatRoomMemberRole role) { this.symbol = symbol; this.role = role; } - + + /** + * Get character symbol for mode. + * + * @return returns char symbol + */ public char getSymbol() { return this.symbol; } - + + /** + * Get corresponding ChatRoomMemberRole instance if available or null + * otherwise. + * + * @return returns ChatRoomMemberRole instance or null + */ public ChatRoomMemberRole getRole() { return this.role; diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ModeParser.java b/src/net/java/sip/communicator/impl/protocol/irc/ModeParser.java index 7c05b0ddc..04dcc8740 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/ModeParser.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/ModeParser.java @@ -63,6 +63,9 @@ private ModeEntry process(boolean add, char mode) return new ModeEntry(add, Mode.bySymbol(mode), this.params[this.index++]); case 'v': return new ModeEntry(add, Mode.bySymbol(mode), this.params[this.index++]); + case 'l': + String[] params = (add ? new String[] { this.params[this.index++] } : new String[]{}); + return new ModeEntry(add, Mode.bySymbol(mode), params); default: throw new IllegalArgumentException(""+mode); }