From 63cf8a883ef95156b5f1c7a3ccc97ca657bdbcfb Mon Sep 17 00:00:00 2001 From: freezy Date: Fri, 16 Apr 2010 19:04:51 +0000 Subject: [PATCH] Added: Music library stub for JSON-RPC Added: Gesture mode GFX git-svn-id: http://android-xbmcremote.googlecode.com/svn/trunk/XBMC Remote@584 677bec2c-7919-11de-bdc7-1f637afd43b1 --- AndroidManifest.xml | 2 +- res/drawable-hdpi-v4/remote_gest_cursor.png | Bin 0 -> 4865 bytes .../remote_xbox_gesture_back_down.png | Bin 0 -> 6176 bytes .../remote_xbox_gesture_info_down.png | Bin 0 -> 5798 bytes .../remote_xbox_gesture_menu_down.png | Bin 0 -> 13434 bytes .../remote_xbox_gesture_title_down.png | Bin 0 -> 12278 bytes .../remote_xbox_gesturezone.png | Bin 0 -> 66319 bytes .../remote_xbox_gesturezone_dim.png | Bin 0 -> 2141 bytes res/drawable-ldpi-v4/remote_gest_cursor.png | Bin 0 -> 2528 bytes .../remote_xbox_gesture_back_down.png | Bin 0 -> 2371 bytes .../remote_xbox_gesture_info_down.png | Bin 0 -> 2274 bytes .../remote_xbox_gesture_menu_down.png | Bin 0 -> 4083 bytes .../remote_xbox_gesture_title_down.png | Bin 0 -> 4162 bytes .../remote_xbox_gesturezone.png | Bin 0 -> 18872 bytes .../remote_xbox_gesturezone_dim.png | Bin 0 -> 997 bytes res/drawable/remote_gest_cursor.png | Bin 0 -> 2859 bytes .../remote_xbox_gesture_back_down.png | Bin 0 -> 3761 bytes .../remote_xbox_gesture_info_down.png | Bin 0 -> 3107 bytes .../remote_xbox_gesture_menu_down.png | Bin 0 -> 6901 bytes .../remote_xbox_gesture_title_down.png | Bin 0 -> 6572 bytes res/drawable/remote_xbox_gesturezone.png | Bin 0 -> 33635 bytes res/drawable/remote_xbox_gesturezone_dim.png | Bin 0 -> 1390 bytes .../xbmc/android/remote/business/Command.java | 16 +- .../android/remote/business/MusicManager.java | 8 +- .../remote/business/TvShowManager.java | 10 +- .../android/remote/business/VideoManager.java | 2 +- .../controller/FileListController.java | 4 +- src/org/xbmc/android/util/ClientFactory.java | 13 +- src/org/xbmc/api/data/IMusicClient.java | 12 + src/org/xbmc/httpapi/Connection.java | 21 + src/org/xbmc/httpapi/client/Client.java | 4 +- src/org/xbmc/httpapi/client/MusicClient.java | 12 - src/org/xbmc/jsonrpc/Connection.java | 38 + src/org/xbmc/jsonrpc/JSONHelper.java | 54 + src/org/xbmc/jsonrpc/JsonRpc.java | 12 +- src/org/xbmc/jsonrpc/client/Client.java | 168 +++ src/org/xbmc/jsonrpc/client/InfoClient.java | 51 +- src/org/xbmc/jsonrpc/client/MusicClient.java | 1057 +++++++++++++++++ 38 files changed, 1426 insertions(+), 58 deletions(-) create mode 100644 res/drawable-hdpi-v4/remote_gest_cursor.png create mode 100644 res/drawable-hdpi-v4/remote_xbox_gesture_back_down.png create mode 100644 res/drawable-hdpi-v4/remote_xbox_gesture_info_down.png create mode 100644 res/drawable-hdpi-v4/remote_xbox_gesture_menu_down.png create mode 100644 res/drawable-hdpi-v4/remote_xbox_gesture_title_down.png create mode 100644 res/drawable-hdpi-v4/remote_xbox_gesturezone.png create mode 100644 res/drawable-hdpi-v4/remote_xbox_gesturezone_dim.png create mode 100644 res/drawable-ldpi-v4/remote_gest_cursor.png create mode 100644 res/drawable-ldpi-v4/remote_xbox_gesture_back_down.png create mode 100644 res/drawable-ldpi-v4/remote_xbox_gesture_info_down.png create mode 100644 res/drawable-ldpi-v4/remote_xbox_gesture_menu_down.png create mode 100644 res/drawable-ldpi-v4/remote_xbox_gesture_title_down.png create mode 100644 res/drawable-ldpi-v4/remote_xbox_gesturezone.png create mode 100644 res/drawable-ldpi-v4/remote_xbox_gesturezone_dim.png create mode 100644 res/drawable/remote_gest_cursor.png create mode 100644 res/drawable/remote_xbox_gesture_back_down.png create mode 100644 res/drawable/remote_xbox_gesture_info_down.png create mode 100644 res/drawable/remote_xbox_gesture_menu_down.png create mode 100644 res/drawable/remote_xbox_gesture_title_down.png create mode 100644 res/drawable/remote_xbox_gesturezone.png create mode 100644 res/drawable/remote_xbox_gesturezone_dim.png create mode 100644 src/org/xbmc/jsonrpc/JSONHelper.java create mode 100644 src/org/xbmc/jsonrpc/client/Client.java create mode 100644 src/org/xbmc/jsonrpc/client/MusicClient.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index fb7cdb84..482b4a24 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,6 +1,6 @@ + android:versionName="0.6.7+" android:versionCode="584"> *`jESD>=uq=qp@Sx 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 literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi-v4/remote_xbox_gesture_back_down.png b/res/drawable-hdpi-v4/remote_xbox_gesture_back_down.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e3b869cb104ecab0680da6288708391f639e8c GIT binary patch literal 6176 zcmV+*7~kiKP)3iO1=DBCrHnH)&yT(4F)%D!DXU?4S zoacSs=bV{)ZAJzMgA03G*4JlWmo6>dmOJyl9Xx#a^}~nHzI>ElV954#clRz@B!7Zw zZ*OlLMY9SVKXIa7uU`mFJvli!F+JVW)pfR5UkHsBK!vI&}Ex z(WA$XP1oy_Q&U-%;Ui;=yyp4*^F&(m&e+)57G61j8X^!c9~=~jmzQlgc;v`0_U}J( z^r!$WP*xY!maJJac-7$IHA}0Ds#0KZ%MeP2)o|Gr{lWWTGj>GGKdpIWet0e5jtmb2 z;zpzK+zT)4KXBm0*jT)&}BSk~a^s3m@f~8Zw8GC`2Av zxpM7gmq94@?A`myzI`Xh#xA>Q_2|d83|~L8e8+MZ+$>Ln_xENBrO};e&QM;vdbRw? z&RfTiKl$|2Z@l^D;MIfM9^Ag+w#&)i{CyAZ>9NL6$9;&4@~ivz|M8vi;cx+%k$vU*o^bq0j!0^8`rNF(U2L(cXsVM zaOlwW4_>?dPqtkYx$Zo9-BykXk#}y}CN|^cU;gq(Kl#a~-y6N>4?eJHWKotkgG+HE z)_I$GEp(Q@si~>|eBz0CUG=6f|Hg*f)?FI9e0IFf+oT(!&N4T7?a-kockkZvhojd& zv_m~yGq|KT>UEoVExNH?)8MXWo{<^$2Oi$J`Q9roVJ>&fhb-&syLQ{QwAuW|qmK^V zI`D~qxV3+CUv{a}xdVDF_F1H3d}898k3W9JJ!`N3{H19&ejV1vz<<1VAF^uYN&))t z(W7GQHh=o^YyNz*%&^~OsmSv>Iv=24J9zNByLa!nfAs24ZOk(d^qF}Ltn>E-^wup~ z_8mCzs}PKDW8d+4&He8CoBmBr^Zr{OQ$K z+&S!}qf;6pjPB{~{^nzkU4G~CtN&=VmyWZ>+TQ;9>)W_~z2w7R?Av$i7q9X_zjv&EtxSvYn4X>%hqv>AHOn@2d-dp) zhKPEIO#jEDk8ZeYVErfiGoKI74QZnfEEHSx?&`5__3FK^yi!{iZ2hz0JoD;tp1eM@ z=M(j4G#WpC;e~7eYDAyh$UW8_(QBy3V^2M`_Tx)OezVuh^m|niVYSIkc19l($MM?L ztAF+O+lP-H{pjy(5cSZ(@mRk%Ucc*HMr2yx{_YQcu=!K{J;R}&B6bREkq!}%eXqSX zIW@KM?v;7!Nqv4AB3PRoa@yZ2Me)U{Zai+yi}Hybez5Lqs~34-EY8{{8V_ zy7u-3p41)WHI(|fmtNX%-$Hvk+>^RMb7{+WYgL zFB}OMtutOg+NvQlu@<1^Rj^)rcg;S7;2%S1Kd(#Aw`zEJd}3m1dV0l;y7wdMq5dEza$A^f996xcwI=>YrZFu=; zt6DqX+>MYJUw-w~YOe{qf;91W%R7d36vu+>vE#?P2S94i>-J-9Ld6=1@y%n$Y8y=k zQhTgBgf)JmCe5;HZ;&-S)*Z#Vr$_!78z1lQsd%hAi#0!})J$40fX+SGZNVD9^HknR zkGi|M8jXggfc|8Zb#+K<{9?Tc7Wu&uakkx}M4e~TFl^~SAS`bDykI(wlcH!I$;7|5p4BWRk z(jlya*;wcE%zsP&%=p7{I!`SAUtg0G3J?~?Mj|IH>#>W=W* z6t^71nfKA>U9YnwXif#qX7joaZ;`iQWCWuhJ-YW}pT8;;Kbp??6x(y(`>7nXOADEv zUbh84^!ry?IxkdS*Np5G0+j^GSS|%l?zbPs3-hPGzV{;!j#d{N6zCwY)qu>(jV9My z2=jw=GtUx}B+1i{KhJ~mwmD_wxV<%Zx=-bx$cwaGPR~RF3*%6aLE>%f^ zUEkP)({H}->YgEE!p>o>Ge>jEb59ohdCiUZiRBX~PTYRq%{InEtI^;7+V@SFx8;a@ z`pM7U9QD{^&B^>*|MGns{#ol!3IuuCmq3*vEB9I8)Gl}E_grWE?4;gD&o30uCp65D zzVU{b2di?S&06+t6_AOf*iWmyMiM4O#(rwqVw9Ek28bMKPUSX0Q!ydAh)KRc$PIRz zux1PV@x#AsL_-#sfBwS1KlE?+NG2ftJE$QuJ)h>rY~FIC1Y9K!#!sGnNw2px7?Cu*%P~VZTNVtx+K7J!1MB70cdW_ zlW}Xs?5`LL*Ww`RmOmpq!c%M7l01w}rCK;PzLf&APM1DvZWKo-Q)0U>1$YWrEc@16 z#s<)L0BVCD&=14PPrp9t=0;Pb$NAC_V{L;8?Kk|S0YZ*F#EP=ciqJ%KX~X9QcrYo_)wg%iqv@TzpOOt2w#;qKJp-d{Neo+>Kh_(*@M_YwGx-wBOo8Y7-XU zH*0j2*dG@+^Bi=RmD8Qfsf{xO9LzLE(F|HHs3Iys+oY#*6-KvFFOVzYcrEE{6cvV;r^`-78m5Kw zG_6FD`w^hawQ~D|?b0#>; zNKlqZnM_BE-K)m2>?b-xNs`!n09c)#@abfBHPg0AwbHQZdYv7{De{W(KuNhuRH+2z zJv%u|E?RFi;wVbBHuYvAYT`5`7`sH}448RrZ z`b(XGqJ(Cn*Lan4r9h}BMqw!Xs3aO69|u@C#{z6IvD9m7EA7d;A6KigpJKR5wo1K; z_904BInq>2an|(oG|E_-Yi~1+4_r$~QH)AShfD{IEtb>eta`m}nJ6SepM^3y>WQ|8 zoy_#=^6B{4n3SA0h5;%cVf+wt_D7A9q#?tWBo??hmK|vfW1`invcW}E$+?1BH1mHK z1r#O8PNfBcucFO1JGX8{bv8hhP*Sc@uOr4mXEd6L)io+0MQTT;iI^(luIwtdR9Pbh zq@W!h?VdEfR;yW>CyCMF!CBHQ!4VOID`M0OagcT@QdZWIq*|*bN}{}sNYqf!DvGA3 zrtGOvWJhj#TELYWVu4ue$4J*rt3&lJvdvb3@%${bxnc@xluP4U&tc+Ca+*zRjJ1;XJztX#9-8cg>(tcz_pMwD`kWdEc6^>!x}KyAOtN?S67!iPB>8tNNX|7 z0xr6YM#^zUiLFY;Oh?5HN3=m|78qMon6gY|#n2GL2bYu$VJ@|khN#GtrVWjVR0L@O z(SM+iW&vE|_%?I{EO6oAD=`JFfTJ5Uj5Z7#pqw>HLwS6}FfB5wUY(Hv9NmBh>)8@? zpIHh-k&%qGUkE$!63|h2gHyn<()64HkK$u&ERX{v9r+>sW7=2%|S zzeMK;SZ&M8$xBm*0VNX!A}JFxXp5ksnx%R0hi1T6pysA(Yp6yIZO+TcwTLttMf8+XkZU_*Er7}+ zr5aLHRp)m_=EPJ*Ee9MY#sE#Vo)s~Q37rB0JW&bYqR@vV5w3^+L#$z;sKv4`twFC4 zTp&B=PO#@q-EwUfR9Nf*a~i!DvtrAJYlW0@X#1{IbQK`UkvToi6k z&3zHLXe3(>tnC~}367fGr3^Z>V%`|p$u>Tknwr89COilo% z4IO`K6a5VoM|xh&bTkiOpyG0B9%}@VN}w%mGE5jCb1fSEoa^WbD~1_4fOB`FlmS@H zQlOlL`H-dpnvS7L)08O$mq1@|Eg-_vK^IyPj0cASmy60Y$YOK^G>Aq+A1=d^W}vT+ zme92vGuCUAZcLtG85C$YnvO;QVxT}%jI%gvAcf`hx=v7ClA*a*!vGL#&hY*7b*DRmX{<_u>xv`?lEc85dH7sTYMAfoLV>+%Of*PnH z77)d>I0#Jk5aS`8fooj2VB{dV1Rz@)U?d94-qVUk0vo%4zvaV#KnrbZjt@p_6jG?)&n5K zECdt-$@wR0kmFJVMuOQ7!+=~;tnI1(q5#I20AW;G%e>l61|I{F(;3N!k{e-m>F7}p zs0|#LGhkuuFf1P&1YR^76dfSTtc`F(2S_L`waoVhhk_qQZxGx3ZSjHhC8!oh!ryz$EBc&T<1a`X5RJ> z(HIO55aH?yo52Y^Rh8)x!$6@R&%ABI1r zpYiUli_*eF=vV+5Ua)KEGCG%BzzlGl7otgHSm6E(7xvJ1$YwE*E5U3T6~Vf7_pcmP zcc}rVxq*rD$o1%+yLwAc>Ka7I6l9V2oT!^Pg|$(X*w(P554q0fxD;!aqacIkgo$dycL zF<-gzfSptIgiGXP7V{5A)HS>a5y&xD8psd#(IV;zX9?&yW6r(x&W3Rv(KY*p5h^8~ zks6f?ES4hW1eLdMLQd*9ZF9{N?*PG~yZ7)ZXF!~@c7n(S5XP@NksbSYO6 zna#PX0!`qg4!CgH-d&4vpP`XcXuoo2b8prat6$Cmfh(RT>)(} z%@6PUxVJ#DazN;bFP|sjZ3Og@OYJx}b*!yB{kDZM$IW!2t%pbya~d4@SMC*ub~+3~Vu484zHu9jhR0PKK0U#wrR=qk8@YM{JB&uSNuRR@_a^_WwP45` zrzf-@;4hZ|krDtdBMAe{2*of^B{9rwA#VgzUP%Zrh>tli54F63Zd@wh+>gGS_vU#w yo%gsoz+CMD!x)GV;cB_M9h9Mi=fD16fB^us&EPJSL2U2<0000lC>NJ*dqwmVt^1vFy^3x4+Cfb19LN=ivd{>Ecu|50mFg?1G@NV9SmF6 z!3P7@L1TMl%}63CZq4S}&FOuuJv05{zs#tt?w*Cis%|!!$wD$SGBTDIFW&z@Dl1$6 z(HFj;wQe?>IoX0BP)a$DgB0KQaf$=ib#Z{xMx%kNp6Au;b?lLddy$SjIK`zXio!6g zR;#XTC@_=_1!B+qIN)6<1nIa1_o4)qY)C`~)Ya3|gR3Z~TrTqx(s7DJmW;a!g#xa! zeC&~jwJD_H%2W_VNU2mR zxR;1?oRA@(&$GqY7mGy#O~g?Yt`bd@i2^Zlz=EA8#5hJGGNXizjST|L{^Ni>#GX0( z`}>(ra@fHju~0tJkquSY!Dh#C6}8|-^a71!I&!k{WEffqWQh{WF>OfDXJ+;~@B39i zfBe`n+=Khc0^G(vqX<^RL{!G!ay%^^ED!`2<#If6JJL}Cx`Yx?K3Q*v7KJbaZbW8s z$4(B8I>w28MmF+`oZvJfee8tbDf@<;c3^lrvPH77YLrIQP$`;$%;*j~MPf0LL(X~6 zevw|b7rX^kV~=!{rq}_2g7uowl~%cDPMu;AoZajRS-{*JG?vJ+ICprJ=%XE&@0@g` zEnq^Kyd}+aQj9HNTT$Bj`Z^nD_dKu+MTg1LKsFS@mf#q5QRQ%z!_SJ?66WDZ5M|Ch z(uKX_Kq8SM$^H^VqZblQ*K4e4)^qE60u=rHT)1J6z%@vM8Dd=R2M|ETzXB&=d(qWDP+l*UihwMy38))m88CQMFN?J0x zu_}gyBY_FTK_zZEp)AKBhA5ZwB(r<+_;C&?2b>ne&K)YF?H&n>(mC3!kNxLtB982# zRaKO4hn;v?w~|g0ctneD-8JfI+90zKf=kM9IO#~h7ozz^jW|GQgvlB-Dhw$?pe=iF zfc#V*LTq)6Ld>CRnK;KGMOd9Rt&T9l40%EeLS*c%G}Z8${3SG2AFLyoHZlN(qixMP zaj_H=rZ~WqLWJZu(-YHN z$c1|_7f?Tn+mP5H5Ll5Ld~1q4v7DMPC8UkUT%ntZQyfSSQGzer59NbmLoq&05wRQz zn=s1}jCdM|56ToRr6C2UD9{rvHj#_a9Em8WCYe!Yneqh-BzD+1&hYtU!YS!&D6=`9 zIx@zwodh7rkVHwi?2BYs_pu@4XWA@%vGa!U3!N57Pbl-x9UmJ@`@dG3SR93wGts)k zTZ28akHjQ%>6y~2PqUJat<@;15T_KY;DH@)>-<>bOcGFkC`zrK3zXDN%VL(s#@hn~ zIOMyv4Lrb)(j0Y!i8Ok_K3M8G*{Ju{YuZ0Ie!x-r6H&Cr-AX+zu+#?xZ(T_Fc@(gh4f-?^Ek8xalg zgRL^vNs5{4^ym{1!38CpKsJ6%$#iGY4Cxnm=g1_EolEJF5m@B^@|V8E9K^0E`1S}# znpACJ3f0OLAvTrjc&jsZfMYJEoOn?RJh2;=WdtZ*6%s@sb|LKv#wN)eNUvz($Rk`e z;Q*Qot}!Iz9FnWVg35+tGy}s{l>zVsN>aX-EKpdt((oX0QcYu^T{3SJT|hc5&=8p) zY%shXSI8cFQ(}bTC=AU8BLO3-(0W7sBKC#OiRtxgmoJ-9MQg-Qw85AS(&$vAb2BXRK0W?e0O^aNRTma07AdCZ~ zLjq-52|BQx<4A`y)7#S%Cek0rkmAOGWvBwknsiYu?JM7)^)qaaD&6*1vOxt72 zLA$QKDTNCm^;Bq)BmRX@9FzQlk|;_FAP@psbA8{-!&g z?sB>f+D)4K2X9?6*_8R0Z5`W48>Rm5?|)3F`nocKPmp2VaaKb$BC!h|BYG|NO#=B0>rP`W%L#GJnVbhI<8@bf zt%;{c+vpgxm}y8CvBr_75kR9z@%r$)j@9M|ND*V|wnWLWPM)?vo$E@{X%KA+C8-Vt7hD&uw6c&*$05D8>5tal`q zG5)p6u4)u-+Nl z7)9|D!5P+_-ZsZFnO=8auUp?YCMuHgy0d62wRuf7Y=&VI)-luTPFhC!{Rk~&8`dgl z#w^c}?wEq;7Q0*DfrSkf)HAHRiFJ$Dfq^^2x*J$)ryc94nPI(CSVOFX4C^jw$R?~o z>M+ym?(*9H+SFpLRFr|;5v=1MIL3&lcwJXvEyH?8uvSs>QF|anH%pR%*<*TYH=d-= z`1TB8ZDLl@F+^3s5ePb-a(w0FxoZ)_TB53zc-QVHw|u<&Ali= zg(e$t^ok0Xa68aMnAVm-#YLffl;-BUOrtHlmgj`|*vPK%Ixs-|>t9_-Cw}9H7Y%3Y zs=loL?R!_g{MJRUR}}`#U|>khn-446Etm$^7S+H1;L4^lc{_TE{3zjPf4w=wy(2-J-nMuwrUKA};Mr zf7`I$T@5kzI;Vh?TadTE6%1jKf^@Tf5E!Js_N~uBVSoOkcfR_@=bD0D9DfBS5X0$z z{_{I1=}*7=d5QyXH&4BY+_PA}WNNENrWT{)LD%~mJ!`fx-GE1r9<`;&t7?##>(zko z>woe2pM3vcn9Z^h0*%u*zyDg{knSB-ZqcM{D!EmxN@_{>`UUbs0;8%y1>z8u*VnNR zDjF%q_i&8EfW-U(rA2&k%)6Y#;d3Q}Uoz_9_~Oz=Z32Z97E7DdteRSk3+(JT*1PYA z1jbwV&Nu!+$?FjR=FK1D;D^8XbL|`d46cHCBV{9V2EUBT}AA>s(bZ~tDyQjJxxCt#tC(!mjxt0E^Rqn~QF&6|p$zwv=r$JW1hQ*O2sj zh zPV>50C~T~*t5BQI?k%f6cXF-mBiJ#o@!!zk;O`&K>Uaq|bNjlc*Ue^ge022PD_6oG z9*QW+7={M-_AVW8bb33YTuZ-Zho>9#gd)zy0aSMm_J+9Y*wn(S1w$rE`>oY z(u^!49lwDq`*h@E{p^EY?#13xPwBS!`Y*QW!@ z2uYn$yMw%rv7TRC#QyB*(@S^iia?8uWEgc+LlT*oUs!ng+__)8{dRdaEDUJ#rCgK+ zHBY^yD*MgPhb$~E4jepqWME+B{!;OfFEB&19i=k7p9XAxE1+XPgrAwYxq72<>B5D@ z+qEdrj`@l-(~vIsAu+X=mtUTk_^)67a&5ZVKkCY8#1kN+cE{FKxjmYh85$fsaqQUL zJ9kPWxp*Zzi`P38qq}1xBlZ$B(gnT=4zTp`oS8I($B=cIIn$(!aLb z=M#T6={2{9)6?fppB_1KWNB)Cc)xir+yplf|16u%jN~WKkZ6<7mv;UPwZHhq^_gaM zDby-n`OCt{r_>PlXv#L)Eeu1XBXFOaUn~vzvCo%%75T)h*6~L>i?{3B|JaPG{gqc= zt<9;$J1~-t6T#hfOc)tz?z7L6eLjfS*vgg4QF-?4+Iv%nP85|+-Vhakg^)dm_GCWa z;$+R`-+#b8>Q{Ts0wLb$z@UNe%++>(#*LzeDB zuZM;{@(%DCpHt)GQ1I)&xd$cj@~zcvd2ZhRiLp$bQ!<^_kbBjS=Cu`W*L7c>n3$QJ zU0Po0-S2BhTXt*v`+8KeJ)gOBY4Ya%#pTt$gL(PGVsU_zLOIiu zZ8T*0e)S{#kWIopyRa~PdJbd&v!j-xvZ1d zcPaIv6Z~nhrkD`!3un*XyEDDCvO((8x7`eXQf+rvFOi+eA< z^wQ&p^OM)6i~WAS$CIBUv_0)(Us3l061$STJ6@=2af9$OTN6w z!LfpscEevZ5pTo#QN6h4)a0Y3#kHL8e!z&C|T@4AxdpZck0^ z-?#75`SaM{x%r^HQOo5$a6AFD4RPwYPD%Omr{--~&j9NqM>;i(Ao%pm3^)!wf%m;M zzc%^%hfxsqmI|y;w~0xsDb`WZ>BQ*y;`L1Dcx~kySl^nOLTm}|du(`k`oZkIoA0}x zSM1F@j(wQWRKH1BblW?Obz58a<^ZtGj`Vcp@zePs+gIQ?Kz!=ny@lmvDEP(m=lAvZ z&pe!eaC;WSha0X9Hh7tYt10I zFfsAUOD`QdcyRi`91us%`JS9Z#FGbR<;01h)$v}dHYwM82<9~24tZVHpMB+(uFfO4 zgHaS+Ja=wvbQGtz@8132ci)|xpD&dB(m)TKar-*JDB0pgL;G_7EeCr^Mu@i7Q}51o z9c#PxjcU)IIdkU32_-)}yL#gWWPNpQZU5okz5~T#pD%CqYT<6tPrig`1A0%u9&4VF zRcG?okM(CSUD~m_fq1!E1>A5{^7(wD(SYA__13Ki)6*N}a!)A_#CuAGLSIgOJYGNJ zOivr0Tfds#QLL@1EU&B_IB?+P_&8|}&}Zl7K=YZ|*_E}mO0D7-bNQn07rb1-g_Dlc zO-$Y^dSYFGTkky7pV@J&xdlP6yt<10;laVNkr9GU?n7Z7&(6**ECBZ!wt5|A*2}q` zAHP=;2d?MtDb-fXv+KKtwcYBV`RXbFg=+}VVL}fN4A`qnD=W=r6FxiOhDBxKDzvCl z*?V?!*Rf7BeQjd{yauvx5P|r`@%Q)jJ%iXy-M^2|p2T{qA+1!a;5+xle7;mF z@e&50;QPDY!u!+Hm~$f^dy&I?X1%BW-d=n*sZFiXFvGC6He0FijhVaLNKCko4WPG& k^v;*fj>MkR>;D&E0JxGMNMtVWQ~&?~07*qoM6N<$f=+^fng9R* literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi-v4/remote_xbox_gesture_menu_down.png b/res/drawable-hdpi-v4/remote_xbox_gesture_menu_down.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb82677112d47c16560f6198d29a5d67f17fee4 GIT binary patch literal 13434 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 literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi-v4/remote_gest_cursor.png b/res/drawable-ldpi-v4/remote_gest_cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..26e84da015e7be6e32ad4de175d057fedb750794 GIT binary patch literal 2528 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 literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi-v4/remote_xbox_gesture_info_down.png b/res/drawable-ldpi-v4/remote_xbox_gesture_info_down.png new file mode 100644 index 0000000000000000000000000000000000000000..442e67f5b25f4b97b191cc4205b06eb3e6a8a641 GIT binary patch literal 2274 zcmV<82p#u{P)b+AC~Y4~Xiz{^A1b8}JVI2Y!b{xbL?xo*xL|0&Ap@XXnxL|bLPx<&dgk|_RP$T zrfFdq>bj0ftWppJj4{J7qA0R$n>x|toP&(|sYeJwlqfL^9Fif^G|`DBk?9)=ooFVb zNYn`(FcEc>;DcGD732xdiKk^*A_#Q+K?nvy2xE*3fuSpt@8O*j!2xxYSU7eDov6?#ID{%;6dZh|0a2of ziqwxW+Aefrlq(w(!$dKY_LLI1U^3N76-tidfDBx~3l-vmCRRmU2vM}-7=k3MjW(3F zp7_uxdPq62rInCHh#N5>qtI%Jm=FuL5;GtVp*L{GIo1pIHby`V0V<;hLogBKBcmAr zLNGH%AP>U87Xlzg@!`IY>AG4s=ux5{WMGRDJ)pFdZHWUYk-^qbUWE!WhDaGpZ34+9 zwwPiPJZPb`-LxZQCo%)A82bPkwIb8=JTev0&<-R&_33JV1M)d+u7Wixnvy}Iky;OC$tl<| zwfnF%QzDs)MKmi?9Hdc&p!gM#OQ?RJ$WSZSRrJ^zg5`P?f8eCo>uEo_ue5YT84ZBuh|jhEQ}ZhsP#W+cmyB5Ci*{FJz|s=agZVrh(~aFI!jZwVp|m_W zWUxf+M)=H#(rn`-UNhX$#ni&6%xuU?~sNfz#a-l&VnhFHGN->aVXtoK_8_< z7Wz!Mk_Ji`Ic5w<@#v=$Nvfz+i8u>;av3HF97zDqkuQfZ%NoLCiRt!!94;uJjc|9R zgQ+0>PY_{CH_?{@2&u{r&sDnEKRbUzmCMJ3o1C`sB=0C(gb7t2a*`dHU5? zzCB<5pvl+X`Q00imjBV!UoNdIn0Q1F6<_=5i_QUDi1+Cj2SQk%;1S6D=Fh(ARoVBh zzV+RAzM&O-!)Br#6|9jjeEQ1m+EUch@ruwMHrsA{cJYIE|Mp|UVWvJXyLj{U?_afT z=Lg?6Sk4V{@7;j&;NMuuh;%~<>FUbtrlqT zh+A1(zFEF*IXW{HeFCu* z-iCF;DMed)r*uSzSq15iH1Xcj^&e^*Ay3+}uccLdkc!$;McvqlXxk_@U(C>3E+CeQ zq9TK!rUIqO_HJqQ$xzpY2eeuJc|o?}{69CFcs&#v#tu<`uOZJg4Brzhv{;yt6A^!f zLZLVBv$)U)9;v#Vn)O!e__1Sdqoc)#;tW~3SSa`&hmW(YSXw@4)&C-RL;e$qJ_cvt zmgjal2Zo2c)kr^N1zC8IOL%lTouiYJjdE>xEEn($C@ueM)Mz$OKJmodzm{!dfDZFC z=XH2^zF!;~vTeIt*5bUD4R|1}R;!ca0 z#@6XRP5I{h{EL?^-I@2iik@am8?f%?<24NFzy5RAZx<#k`LF3Xb-B3^Y{G-mQn@^R z=FD=X(pl;b9Ze}bj3ZktO{v}OPESo;|L2E-NA{4OHcPjb#17x5+MUkrO6Bs!i~cHW zmqJF5*7Rg)>9Mi@)!Xa!0PTsfvDq7?FpTYjks?c%h16_E+yEqp4;^}BZ0y#DxAB5> ziU!*nXdYa4mqowNmy4y6<2avx?zw@W*jy0uvtl}qapTD7Xdk^>t_z6IOi!^eA zGpC!5{(vpL!gqzo=J(Pl!X5C!xpQF{F5jw&USPB?OwO=)gn;qha~PCxl% z^G>I-*a(Bj${CuT{1EPw%kCC-I(PQ$_~>Y(>MGS^UDtH;69r6r zjT_^4r?mPkCew}C*_`7%JvD{%zuoj2t6jJ1g?=1|is1gA{Ozi*ojrZ}9u88R^H}Z4 z6DMrboL^d6D3$8XX2i%U>q3Y}Cnt|T_E=$X5SQCd zx4XQu;&wV+^%Keal=h@FCC+)H)oQj{#bOZ;&EaAZc`%=+A2seJt*ox%La~$5r%vso w4RHR$##{)Q`9A#Q<)H%y@GkjC=YItl0IO^fzf3-GPyhe`07*qoM6N<$f<=*FVgLXD literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi-v4/remote_xbox_gesture_menu_down.png b/res/drawable-ldpi-v4/remote_xbox_gesture_menu_down.png new file mode 100644 index 0000000000000000000000000000000000000000..b7dc8b30aee8186cd42ea888ea69b389c639fb6c GIT binary patch literal 4083 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 literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi-v4/remote_xbox_gesture_title_down.png b/res/drawable-ldpi-v4/remote_xbox_gesture_title_down.png new file mode 100644 index 0000000000000000000000000000000000000000..7c967447c0146b7f04201ac36be68814d44a262f GIT binary patch literal 4162 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 M07*qoM6N<$f|YaRwEzGB literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi-v4/remote_xbox_gesturezone.png b/res/drawable-ldpi-v4/remote_xbox_gesturezone.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2ab451cf9747ab74541e2da95ee50ae4dccffb GIT binary patch literal 18872 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 SV4?`jw+x=HelF{r5}E)bpq6|9 literal 0 HcmV?d00001 diff --git a/res/drawable/remote_gest_cursor.png b/res/drawable/remote_gest_cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..832e3f1edccd1f98487bda77e23400aed77f05dc GIT binary patch literal 2859 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 b9{~mc&XFZdx~!i{00000NkvXXu0mjf1^Qgk literal 0 HcmV?d00001 diff --git a/res/drawable/remote_xbox_gesture_info_down.png b/res/drawable/remote_xbox_gesture_info_down.png new file mode 100644 index 0000000000000000000000000000000000000000..636a8c885bcea2371eddb7c53e2a992eaf7212e3 GIT binary patch literal 3107 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 literal 0 HcmV?d00001 diff --git a/res/drawable/remote_xbox_gesture_menu_down.png b/res/drawable/remote_xbox_gesture_menu_down.png new file mode 100644 index 0000000000000000000000000000000000000000..36c3d396c8e028d9b9e3c43d9454a85045844efc GIT binary patch literal 6901 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 literal 0 HcmV?d00001 diff --git a/res/drawable/remote_xbox_gesture_title_down.png b/res/drawable/remote_xbox_gesture_title_down.png new file mode 100644 index 0000000000000000000000000000000000000000..205808315d0879eda48a8aacae57b3028b946fab GIT binary patch literal 6572 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 z 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 Ef+<6$KmY&$ literal 0 HcmV?d00001 diff --git a/res/drawable/remote_xbox_gesturezone_dim.png b/res/drawable/remote_xbox_gesturezone_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..bb0f691a8586387b1d1425d890d889982139d248 GIT binary patch literal 1390 zcmeAS@N?(olHy`uVBq!ia0y~yU~~XtJ`OgZ$d5zkwgD;064!{5;QX|b^2DN42FH~A zq*MjZ+{EW;Cia6j0! zbKNaY0R>+M<+|%}YzbkEcOI84{K2@`%HSs>lf|6ikIY7F26-iSBFYq!8S=Hts~cMw zW5Vt3GOF+-_|%3^lb$iD=s81u?U`%Gu8E(pV08O&PS?i^;G8K^;)U}49}1QhdW zsO4?ACWfZ{K!QvQ8_S08|01Igh)JM@_JS=yKgqVR`2fvEwzGj@sUCTz009+U=Pe42gG(f=DTr=Ne$wK2F(Jn_8APnr5M)g!t{b| zm6%uD(7^ERo_#hqEM#HMOgJUmT*xPY8Ai>(;6n)m1Ll1qoB{{_aceX-=o+BN@f@{u zaA5eYzkr2l+W{m^&BZu;B;WuH255K!{qb7vhMEMz2?r`5VF!+Z&(9Q0V4j&_{+t0d zl;`|V;eg0SKj^bg$mT|mA_GWLU=ctBS3?cspR~%xHH?39DjA~_7@`vzWElUXR01=f z#}3wiS)Gk5wf;svxcw|DI!)m=i-cWNlEPh^) zVW6yaWa5nP(_~Lb91t*fxg*LJ#AdK(jg2mw#LWrjj&OKSBCWbVg2Yx<{=e7MOvoZQe9QdtRbFJ;dH3=4jP=@#2kBthqS495(QK_iVkjeC8 z`^yg(_r^EY^Cz5Q7Z>LSWiNQzB*5CTkK2I3%Udu;aAAK9umEN7boFyt=akR{01}+L A-v9sr literal 0 HcmV?d00001 diff --git a/src/org/xbmc/android/remote/business/Command.java b/src/org/xbmc/android/remote/business/Command.java index e131f9e6..8e319c36 100644 --- a/src/org/xbmc/android/remote/business/Command.java +++ b/src/org/xbmc/android/remote/business/Command.java @@ -16,14 +16,20 @@ public abstract class Command implements Runnable { public int mRetryCount = 0; + public long mStarted = 0; public final INotifiableManager mManager; - public final DataResponse response; + public final DataResponse mResponse; + + // TODO Disable this when not needed anymore + public final StackTraceElement mCaller; public static final int MAX_RETRY = 5; public Command(DataResponse response, INotifiableManager manager) { - this.mManager = manager; - this.response = response; + mManager = manager; + mResponse = response; + mStarted = System.currentTimeMillis(); + mCaller = new Throwable().fillInStackTrace().getStackTrace()[2]; } public void run() { @@ -32,7 +38,9 @@ public void run() { Log.d("Command", "Running command counter: " + mRetryCount); if(mRetryCount > MAX_RETRY) return; doRun(); - mManager.onFinish(response); + Log.i(mCaller.getClassName(), "*** " + mCaller.getMethodName() + ": " + (System.currentTimeMillis() - mStarted) + "ms"); + + mManager.onFinish(mResponse); }catch (WifiStateException e) { mManager.onWrongConnectionState(e.getState(), this); }catch (Exception e) { diff --git a/src/org/xbmc/android/remote/business/MusicManager.java b/src/org/xbmc/android/remote/business/MusicManager.java index b5b5efa6..b47b6d1a 100644 --- a/src/org/xbmc/android/remote/business/MusicManager.java +++ b/src/org/xbmc/android/remote/business/MusicManager.java @@ -79,13 +79,7 @@ public void doRun() throws Exception { * @param response Response object */ public void getAlbums(final DataResponse> response, final Context context) { -// mHandler.post(new Runnable() { -// public void run() { -// response.value = music(context).getAlbums(MusicManager.this, getSortBy(SortType.ALBUM), getSortOrder()); -// onFinish(response); -// } -// }); - mHandler.post(new Command>(response, this){ + mHandler.post(new Command>(response, this) { @Override public void doRun() throws Exception { response.value = music(context).getAlbums(MusicManager.this, getSortBy(SortType.ALBUM), getSortOrder()); diff --git a/src/org/xbmc/android/remote/business/TvShowManager.java b/src/org/xbmc/android/remote/business/TvShowManager.java index 358589c2..4e360516 100644 --- a/src/org/xbmc/android/remote/business/TvShowManager.java +++ b/src/org/xbmc/android/remote/business/TvShowManager.java @@ -69,7 +69,7 @@ public void getTvShows(DataResponse> response, final Actor act mHandler.post(new Command>(response, this) { @Override public void doRun() throws Exception { - response.value = shows(context).getTvShows(TvShowManager.this, actor); + mResponse.value = shows(context).getTvShows(TvShowManager.this, actor); } }); } @@ -79,7 +79,7 @@ public void getEpisodes(DataResponse> response, mHandler.post(new Command>(response, this) { @Override public void doRun() throws Exception { - response.value = shows(context).getEpisodes(TvShowManager.this, show); + mResponse.value = shows(context).getEpisodes(TvShowManager.this, show); } }); } @@ -89,7 +89,7 @@ public void getSeasons(DataResponse> response, mHandler.post(new Command>(response, this) { @Override public void doRun() throws Exception { - response.value = shows(context).getSeasons(TvShowManager.this, show); + mResponse.value = shows(context).getSeasons(TvShowManager.this, show); } }); } @@ -99,7 +99,7 @@ public void getEpisodes(DataResponse> response, mHandler.post(new Command>(response, this) { @Override public void doRun() throws Exception { - response.value = shows(context).getEpisodes(TvShowManager.this, show, season); + mResponse.value = shows(context).getEpisodes(TvShowManager.this, show, season); } }); @@ -110,7 +110,7 @@ public void getEpisodes(DataResponse> response, mHandler.post(new Command>(response, this) { @Override public void doRun() throws Exception { - response.value = shows(context).getEpisodes(TvShowManager.this, season); + mResponse.value = shows(context).getEpisodes(TvShowManager.this, season); } }); } diff --git a/src/org/xbmc/android/remote/business/VideoManager.java b/src/org/xbmc/android/remote/business/VideoManager.java index 3ca9e154..9bc2ca0b 100644 --- a/src/org/xbmc/android/remote/business/VideoManager.java +++ b/src/org/xbmc/android/remote/business/VideoManager.java @@ -246,7 +246,7 @@ public void getTvShowGenres(DataResponse> response, mHandler.post(new Command>(response, this) { @Override public void doRun() throws Exception { - response.value = video(context).getTvShowGenres(VideoManager.this); + mResponse.value = video(context).getTvShowGenres(VideoManager.this); } }); } diff --git a/src/org/xbmc/android/remote/presentation/controller/FileListController.java b/src/org/xbmc/android/remote/presentation/controller/FileListController.java index c336e501..e28a3abd 100644 --- a/src/org/xbmc/android/remote/presentation/controller/FileListController.java +++ b/src/org/xbmc/android/remote/presentation/controller/FileListController.java @@ -26,7 +26,7 @@ import org.xbmc.android.remote.R; import org.xbmc.android.remote.business.ManagerFactory; -import org.xbmc.android.remote.presentation.activity.AbsListActivity; +import org.xbmc.android.remote.presentation.activity.ListActivity; import org.xbmc.android.remote.presentation.activity.NowPlayingActivity; import org.xbmc.android.remote.presentation.widget.OneLabelItemView; import org.xbmc.api.business.DataResponse; @@ -100,7 +100,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) FileLocation item = mFileItems.get(((FileLocation)parent.getAdapter().getItem(position)).name); if (item.isDirectory) { - Intent nextActivity = new Intent(mActivity, AbsListActivity.class); + Intent nextActivity = new Intent(mActivity, ListActivity.class); nextActivity.putExtra(ListController.EXTRA_LIST_CONTROLLER, new FileListController()); nextActivity.putExtra(ListController.EXTRA_SHARE_TYPE, mMediaType); nextActivity.putExtra(ListController.EXTRA_PATH, item.path); diff --git a/src/org/xbmc/android/util/ClientFactory.java b/src/org/xbmc/android/util/ClientFactory.java index 828b4e0a..ccbd81a9 100644 --- a/src/org/xbmc/android/util/ClientFactory.java +++ b/src/org/xbmc/android/util/ClientFactory.java @@ -85,7 +85,15 @@ public static IVideoClient getVideoClient(INotifiableManager manager, Context co public static IMusicClient getMusicClient(INotifiableManager manager, Context context) throws WifiStateException { assertWifiState(context); - return createHttpClient(manager).music; + probeQueryApiType(manager); + switch (sApiType) { + case API_TYPE_JSONRPC: +// return createJsonClient(manager).music; + case API_TYPE_UNSET: + case API_TYPE_HTTPIAPI: + default: + return createHttpClient(manager).music; + } } public static ITvShowClient getTvShowClient(INotifiableManager manager, Context context) throws WifiStateException { @@ -204,7 +212,8 @@ private static void probeQueryApiType(final INotifiableManager manager) { sApiType = API_TYPE_UNSET; } } - + + /** * Returns an instance of the Event Server Client. Instantiation takes * place only once, otherwise the first instance is returned. diff --git a/src/org/xbmc/api/data/IMusicClient.java b/src/org/xbmc/api/data/IMusicClient.java index 324d8c5a..0ae4a552 100644 --- a/src/org/xbmc/api/data/IMusicClient.java +++ b/src/org/xbmc/api/data/IMusicClient.java @@ -39,6 +39,18 @@ * @author Team XBMC */ public interface IMusicClient extends IClient { + + // those are the musicdb://n/ keys. + public static final int MUSICDB_GENRE = 1; + public static final int MUSICDB_ARTIST = 2; + public static final int MUSICDB_ALBUM = 3; + public static final int MUSICDB_SONG = 4; + public static final int MUSICDB_TOP100 = 5; + public static final int MUSICDB_RECENTLY_ADDED = 6; + public static final int MUSICDB_RECENTLY_PLAYED = 7; + public static final int MUSICDB_COMPILATION = 8; + public static final int MUSICDB_YEARS = 9; + public static final int MUSICDB_SINGLES = 10; /** * Adds an album to the current playlist. diff --git a/src/org/xbmc/httpapi/Connection.java b/src/org/xbmc/httpapi/Connection.java index 2ac05eec..0dd01d2a 100644 --- a/src/org/xbmc/httpapi/Connection.java +++ b/src/org/xbmc/httpapi/Connection.java @@ -1,3 +1,24 @@ +/* + * Copyright (C) 2005-2010 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC Remote; see the file license. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + package org.xbmc.httpapi; import java.io.BufferedReader; diff --git a/src/org/xbmc/httpapi/client/Client.java b/src/org/xbmc/httpapi/client/Client.java index b99167a3..0d671607 100644 --- a/src/org/xbmc/httpapi/client/Client.java +++ b/src/org/xbmc/httpapi/client/Client.java @@ -45,9 +45,9 @@ * * @author Team XBMC */ -public abstract class Client { +abstract class Client { - public static final String TAG = "Client"; + public static final String TAG = "Client-HTTPAPI"; protected final Connection mConnection; diff --git a/src/org/xbmc/httpapi/client/MusicClient.java b/src/org/xbmc/httpapi/client/MusicClient.java index 3f7ac584..8ee20987 100644 --- a/src/org/xbmc/httpapi/client/MusicClient.java +++ b/src/org/xbmc/httpapi/client/MusicClient.java @@ -50,18 +50,6 @@ public class MusicClient extends Client implements IMusicClient { public static final String TAG = "MusicClient"; - // those are the musicdb://n/ keys. - public static final int MUSICDB_GENRE = 1; - public static final int MUSICDB_ARTIST = 2; - public static final int MUSICDB_ALBUM = 3; - public static final int MUSICDB_SONG = 4; - public static final int MUSICDB_TOP100 = 5; - public static final int MUSICDB_RECENTLY_ADDED = 6; - public static final int MUSICDB_RECENTLY_PLAYED = 7; - public static final int MUSICDB_COMPILATION = 8; - public static final int MUSICDB_YEARS = 9; - public static final int MUSICDB_SINGLES = 10; - public static final int VIEW_ALBUMS = 1; public static final int VIEW_SONGS = 2; diff --git a/src/org/xbmc/jsonrpc/Connection.java b/src/org/xbmc/jsonrpc/Connection.java index 93777435..9b1c8784 100644 --- a/src/org/xbmc/jsonrpc/Connection.java +++ b/src/org/xbmc/jsonrpc/Connection.java @@ -1,7 +1,29 @@ +/* + * Copyright (C) 2005-2010 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC Remote; see the file license. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + package org.xbmc.jsonrpc; import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Authenticator; @@ -135,6 +157,20 @@ public void setTimeout(int timeout) { } } + public InputStream getInputStream(String url, INotifiableManager manager) { + try { + final URL u = new URL(url); + URLConnection uc; + uc = u.openConnection(); + uc.setConnectTimeout(SOCKET_CONNECTION_TIMEOUT); + uc.setReadTimeout(mSocketReadTimeout); + return uc.getInputStream(); + } catch (IOException e) { + manager.onError(e); + } + return null; + } + /** * Executes a query. * @param command Name of the command to execute @@ -164,6 +200,8 @@ public JSONObject query(String command, JSONObject parameters, INotifiableManage .put("id", "1"); if (parameters != null) { data.put("params", parameters); + } else { + data.put("params", new JSONObject()); } // POST data diff --git a/src/org/xbmc/jsonrpc/JSONHelper.java b/src/org/xbmc/jsonrpc/JSONHelper.java new file mode 100644 index 00000000..09b5ba05 --- /dev/null +++ b/src/org/xbmc/jsonrpc/JSONHelper.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2005-2010 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC Remote; see the file license. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +package org.xbmc.jsonrpc; + +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Wraps some calls in order to avoid JSON exceptions + * @author Team XBMC + */ +public abstract class JSONHelper { + + public final static String getString(JSONObject obj, String key) { + try { + return obj.getString(key); + } catch (JSONException e) { + return null; + } + } + public final static String getString(JSONObject obj, String key, String ifNullResult) { + try { + return obj.getString(key); + } catch (JSONException e) { + return ifNullResult; + } + } + public final static int getInt(JSONObject obj, String key) { + try { + return obj.getInt(key); + } catch (JSONException e) { + return -1; + } + } +} \ No newline at end of file diff --git a/src/org/xbmc/jsonrpc/JsonRpc.java b/src/org/xbmc/jsonrpc/JsonRpc.java index 48621705..41d6c709 100644 --- a/src/org/xbmc/jsonrpc/JsonRpc.java +++ b/src/org/xbmc/jsonrpc/JsonRpc.java @@ -23,6 +23,7 @@ import org.xbmc.api.object.Host; import org.xbmc.jsonrpc.client.InfoClient; +import org.xbmc.jsonrpc.client.MusicClient; /** * Wrapper class for JSON-RPC clients. The idea is to separate the loads of @@ -33,6 +34,7 @@ */ public class JsonRpc { + /** * Use this client for anything system related */ @@ -40,7 +42,7 @@ public class JsonRpc { /** * Use this client for anything music related - * + */ public final MusicClient music; /** @@ -73,8 +75,8 @@ public JsonRpc(Host host, int timeout) { } connection.setTimeout(timeout); info = new InfoClient(connection); -/* music = new MusicClient(connection); - video = new VideoClient(connection); + music = new MusicClient(connection); +/* video = new VideoClient(connection); control = new ControlClient(connection); shows = new TvShowClient(connection);*/ } @@ -85,8 +87,8 @@ public JsonRpc(Host host, int timeout) { */ public void setHost(Host host) { info.setHost(host); -/* music.setHost(host); - video.setHost(host); + music.setHost(host); +/* video.setHost(host); control.setHost(host); shows.setHost(host);*/ } diff --git a/src/org/xbmc/jsonrpc/client/Client.java b/src/org/xbmc/jsonrpc/client/Client.java new file mode 100644 index 00000000..63fe4e21 --- /dev/null +++ b/src/org/xbmc/jsonrpc/client/Client.java @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2005-2009 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC Remote; see the file license. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +package org.xbmc.jsonrpc.client; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.xbmc.android.util.ImportUtilities; +import org.xbmc.api.business.INotifiableManager; +import org.xbmc.api.object.ICoverArt; +import org.xbmc.api.type.ThumbSize; +import org.xbmc.api.type.ThumbSize.Dimension; +import org.xbmc.jsonrpc.Connection; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Bitmap.CompressFormat; +import android.util.Log; + +/** + * Abstract super class of all (media) clients. + * + * @author Team XBMC + */ +abstract class Client { + + public static final String TAG = "Client-JSON-RPC"; + public static final String PARAM_FIELDS = "fields"; + + protected final Connection mConnection; + + /** + * Class constructor needs reference to HTTP client connection + * @param connection + */ + Client(Connection connection) { + mConnection = connection; + } + + /** + * Downloads a cover. + * + * First, only boundaries are downloaded in order to determine the sample + * size. Setting sample size > 1 will do two things: + *
  1. Only a fragment of the total size will be downloaded
  2. + *
  3. Resizing will be smooth and not pixelated as before
+ * The base64-decoding is done using an inputstream directly, without + * having to save the reponse to a String first. + * The returned size is the next bigger (but smaller than the double) size + * of the original image. + * @param manager Postback manager + * @param cover Cover object + * @param size Minmal size to pre-resize to. + * @param url URL to primary cover + * @param fallbackUrl URL to fallback cover + * @return Bitmap + */ + protected Bitmap getCover(INotifiableManager manager, ICoverArt cover, int size, String url, String fallbackUrl) { + final int mediaType = cover.getMediaType(); + // don't fetch small sizes + size = size < ThumbSize.BIG ? ThumbSize.MEDIUM : ThumbSize.BIG; + InputStream is = null; + try { + + Log.i(TAG, "Starting download (" + url + ")"); + + BitmapFactory.Options opts = prefetch(manager, url, size, mediaType); + Dimension dim = ThumbSize.getDimension(size, mediaType, opts.outWidth, opts.outHeight); + + Log.i(TAG, "Pre-fetch: " + opts.outWidth + "x" + opts.outHeight + " => " + dim); + if (opts.outWidth < 0) { + if (fallbackUrl != null) { + Log.i(TAG, "Starting fallback download (" + fallbackUrl + ")"); + opts = prefetch(manager, fallbackUrl, size, mediaType); + dim = ThumbSize.getDimension(size, mediaType, opts.outWidth, opts.outHeight); + Log.i(TAG, "FALLBACK-Pre-fetch: " + opts.outWidth + "x" + opts.outHeight + " => " + dim); + if (opts.outWidth < 0) { + return null; + } else { + url = fallbackUrl; + } + } else { + Log.i(TAG, "Fallback url is null, returning null-bitmap"); + return null; + } + } + final int ss = ImportUtilities.calculateSampleSize(opts, dim); + Log.i(TAG, "Sample size: " + ss); + + is = new BufferedInputStream(mConnection.getInputStream(url, manager), 8192); + opts.inDither = true; + opts.inSampleSize = ss; + opts.inJustDecodeBounds = false; + + Bitmap bitmap = BitmapFactory.decodeStream(is, null, opts); + if (ss == 1) { + bitmap = blowup(bitmap); + } + is.close(); + if (bitmap == null) { + Log.i(TAG, "Fetch: Bitmap is null!!"); + return null; + } else { + Log.i(TAG, "Fetch: Bitmap: " + bitmap.getWidth() + "x" + bitmap.getHeight()); + return bitmap; + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (is != null) { + is.close(); + } + } catch (IOException e) { } + } + return null; + } + + private BitmapFactory.Options prefetch(INotifiableManager manager, String url, int size, int mediaType) { + InputStream is = new BufferedInputStream(mConnection.getInputStream(url, manager), 8192); + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inJustDecodeBounds = true; + BitmapFactory.decodeStream(is, null, opts); + return opts; + } + + /** + * Doubles the size of a bitmap and re-reads it with samplesize 2. I've + * found no other way to smoothely resize images with samplesize = 1. + * @param source + * @return + */ + private Bitmap blowup(Bitmap source) { + if (source != null) { + Bitmap big = Bitmap.createScaledBitmap(source, source.getWidth() * 2, source.getHeight() * 2, true); + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inSampleSize = 2; + + ByteArrayOutputStream os = new ByteArrayOutputStream(); + big.compress(CompressFormat.PNG, 100, os); + + byte[] array = os.toByteArray(); + return BitmapFactory.decodeByteArray(array, 0, array.length, opts); + } + return null; + } +} diff --git a/src/org/xbmc/jsonrpc/client/InfoClient.java b/src/org/xbmc/jsonrpc/client/InfoClient.java index da62f1b4..3fd6c050 100644 --- a/src/org/xbmc/jsonrpc/client/InfoClient.java +++ b/src/org/xbmc/jsonrpc/client/InfoClient.java @@ -4,6 +4,9 @@ import java.net.URISyntaxException; import java.util.ArrayList; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.xbmc.api.business.INotifiableManager; import org.xbmc.api.data.IInfoClient; import org.xbmc.api.object.FileLocation; @@ -47,19 +50,19 @@ public void setHost(Host host) { * @return */ public ArrayList getDirectory(INotifiableManager manager, String path, DirectoryMask mask, int offset, int limit) { - /* - final ArrayList result = mConnection.getArray(manager, "GetDirectory", - path + ";" + - (mask != null ? mask.toString() : " ") + ";" + - (offset > 0 ? offset : " ") + ";" + - (limit > 0 ? limit : " ") - ); - final ArrayList files = new ArrayList(); - for (String file : result) { - files.add(new FileLocation(file)); + final ArrayList directories = new ArrayList(); + try { + final JSONObject result = mConnection.getJson(manager, "Files.GetDirectory", new JSONObject().put("type", "files").put("directory", path)); + final JSONArray jsonShares = result.getJSONArray("directories"); + for (int i = 0; i < jsonShares.length(); i++) { + JSONObject jsonShare = (JSONObject)jsonShares.get(i); + directories.add(new FileLocation(jsonShare.getString("label"), jsonShare.getString("file"))); + } + return directories; + } catch (JSONException e) { + manager.onError(e); } - return files;*/ - return null; + return directories; } /** @@ -78,15 +81,24 @@ public ArrayList getDirectory(INotifiableManager manager, String p * @return */ public ArrayList getShares(INotifiableManager manager, int mediaType) { - /*final ArrayList result = mConnection.getArray(manager, "GetShares", MediaType.getName(mediaType)); final ArrayList shares = new ArrayList(); - for (String share : result) { - shares.add(new FileLocation(share)); + try { + final JSONObject result = mConnection.getJson(manager, "Files.GetShares", new JSONObject().put("type", "video")); + final JSONArray jsonShares = result.getJSONArray("shares"); + for (int i = 0; i < jsonShares.length(); i++) { + JSONObject jsonShare = (JSONObject)jsonShares.get(i); + shares.add(new FileLocation(jsonShare.getString("label"), jsonShare.getString("file"))); + } + return shares; + } catch (JSONException e) { + manager.onError(e); } - return shares;*/ - return null; + return shares; } + /** + * @TODO Implement for JSON-RPC + */ public String getCurrentlyPlayingThumbURI(INotifiableManager manager) throws MalformedURLException, URISyntaxException { /* ArrayList array = mConnection.getArray(manager, "GetCurrentlyPlaying", ""); @@ -100,6 +112,7 @@ public String getCurrentlyPlayingThumbURI(INotifiableManager manager) throws Mal /** * Returns any system info variable, see {@link org.xbmc.api.info.SystemInfo} + * @TODO Wait for JSON-RPC implementation * @param field Field to return * @return */ @@ -109,6 +122,7 @@ public String getSystemInfo(INotifiableManager manager, int field) { /** * Returns a boolean GUI setting + * @TODO Wait for JSON-RPC implementation * @param field * @return */ @@ -119,6 +133,7 @@ public boolean getGuiSettingBool(INotifiableManager manager, int field) { /** * Returns an integer GUI setting + * @TODO Wait for JSON-RPC implementation * @param field * @return */ @@ -129,6 +144,7 @@ public int getGuiSettingInt(INotifiableManager manager, int field) { /** * Returns any music info variable see {@link org.xbmc.http.info.MusicInfo} + * @TODO Wait for JSON-RPC implementation * @param field Field to return * @return */ @@ -139,6 +155,7 @@ public String getMusicInfo(INotifiableManager manager, int field) { /** * Returns any video info variable see {@link org.xbmc.http.info.VideoInfo} + * @TODO Wait for JSON-RPC implementation * @param field Field to return * @return */ diff --git a/src/org/xbmc/jsonrpc/client/MusicClient.java b/src/org/xbmc/jsonrpc/client/MusicClient.java new file mode 100644 index 00000000..daa2352f --- /dev/null +++ b/src/org/xbmc/jsonrpc/client/MusicClient.java @@ -0,0 +1,1057 @@ +/* + * Copyright (C) 2005-2009 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC Remote; see the file license. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +package org.xbmc.jsonrpc.client; + +import java.util.ArrayList; +import java.util.HashMap; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.xbmc.api.business.INotifiableManager; +import org.xbmc.api.data.IControlClient; +import org.xbmc.api.data.IMusicClient; +import org.xbmc.api.data.IControlClient.ICurrentlyPlaying; +import org.xbmc.api.info.PlayStatus; +import org.xbmc.api.object.Album; +import org.xbmc.api.object.Artist; +import org.xbmc.api.object.Genre; +import org.xbmc.api.object.Host; +import org.xbmc.api.object.ICoverArt; +import org.xbmc.api.object.Song; +import org.xbmc.api.type.MediaType; +import org.xbmc.api.type.SortType; +import org.xbmc.jsonrpc.Connection; +import org.xbmc.jsonrpc.JSONHelper; + +import android.graphics.Bitmap; +import android.util.Log; + +/** + * Takes care of every music related stuff, notably the music database. + * + * @author Team XBMC + */ +public class MusicClient extends Client implements IMusicClient { + + public static final String TAG = "MusicClient"; + + public static final int VIEW_ALBUMS = 1; + public static final int VIEW_SONGS = 2; + + public static final String PLAYLIST_ID = "0"; + public static final String LIBRARY_TYPE = "songs"; + + public static final int PLAYLIST_LIMIT = 100; + + /** + * Class constructor needs reference to HTTP client connection + * @param connection + */ + public MusicClient(Connection connection) { + super(connection); + } + + /** + * Updates host info on the connection. + * @param host + */ + public void setHost(Host host) { + mConnection.setHost(host); + } + + + /** + * Adds an album to the current playlist. + * @param album Album + * @return True on success, false otherwise. + */ + public boolean addToPlaylist(INotifiableManager manager, Album album) { + return mConnection.getBoolean(manager, "AddToPlayListFromDB", LIBRARY_TYPE + ";" + getSongsCondition(album) + songsOrderBy(SortType.TRACK, SortType.ORDER_ASC)); + } + + /** + * Adds all songs from an artist to the current playlist. + * @param artist Artist + * @return True on success, false otherwise. + */ + public boolean addToPlaylist(INotifiableManager manager, Artist artist) { + return mConnection.getBoolean(manager, "AddToPlayListFromDB", LIBRARY_TYPE + ";" + getSongsCondition(artist) + songsOrderBy(SortType.ALBUM, SortType.ORDER_ASC)); + } + + /** + * Adds all songs from a genre to the current playlist. + * @param genre Genre + * @return True on success, false otherwise. + */ + public boolean addToPlaylist(INotifiableManager manager, Genre genre) { + return mConnection.getBoolean(manager, "AddToPlayListFromDB", LIBRARY_TYPE + ";" + getSongsCondition(genre) + songsOrderBy(SortType.ARTIST, SortType.ORDER_ASC)); + } + + /** + * Adds songs of a genre from an artist to the current playlist. + * @param artist Artist + * @param genre Genre + * @return True on success, false otherwise. + */ + public boolean addToPlaylist(INotifiableManager manager, Artist artist, Genre genre) { + return mConnection.getBoolean(manager, "AddToPlayListFromDB", LIBRARY_TYPE + ";" + getSongsCondition(artist, genre) + songsOrderBy(SortType.ARTIST, SortType.ORDER_ASC)); + } + + /** + * Adds a song to the current playlist. + * @param song Song to add + * @return True on success, false otherwise. + */ + public boolean addToPlaylist(INotifiableManager manager, Song song) { + return mConnection.getBoolean(manager, "AddToPlayList", song.path + ";" + PLAYLIST_ID); + } + + /** + * Returns how many items are in the playlist. + * @return Number of items in the playlist + */ + public int getPlaylistSize(INotifiableManager manager) { + return mConnection.getInt(manager, "GetPlaylistLength", PLAYLIST_ID); + } + + /** + * Retrieves the currently playing song number in the playlist. + * @return Number of items in the playlist + */ + public int getPlaylistPosition(INotifiableManager manager) { + return 0;//mConnection.getInt(manager, "GetPlaylistSong"); + } + + /** + * Sets the media at playlist position position to be the next item to be played. + * @param position New position, starting with 0. + * @return True on success, false otherwise. + */ + public boolean setPlaylistPosition(INotifiableManager manager, int position) { + return false; //mConnection.getBoolean(manager, "SetPlaylistSong", String.valueOf(position)); + } + + /** + * Removes media from the current playlist. It is not possible to remove the media if it is currently being played. + * @param position Position to remove, starting with 0. + * @return True on success, false otherwise. + */ + public boolean removeFromPlaylist(INotifiableManager manager, int position) { + return false; //mConnection.getBoolean(manager, "RemoveFromPlaylist", PLAYLIST_ID + ";" + position); + } + + /** + * Removes media from the current playlist. It is not possible to remove the media if it is currently being played. + * @param position Complete path (including filename) of the media to be removed. + * @return True on success, false otherwise. + */ + public boolean removeFromPlaylist(INotifiableManager manager, String path) { + return false; //mConnection.getBoolean(manager, "RemoveFromPlaylist", PLAYLIST_ID + ";" + path); + } + + /** + * Returns the first {@link PLAYLIST_LIMIT} songs of the playlist. + * @return Songs in the playlist. + */ + public ArrayList getPlaylist(INotifiableManager manager) { + return null; //mConnection.getArray(manager, "GetPlaylistContents", PLAYLIST_ID); + + + /* + final ArrayList nodes = mConnection.getArray("GetDirectory", "playlistmusic://"); + final ArrayList ids = new ArrayList(); + final int playlistPosition = getPlaylistPosition(); + int i = 0; + for (String node : nodes) { + ids.add(node.substring(node.lastIndexOf('/') + 1, node.lastIndexOf('.'))); + if (++i > PLAYLIST_LIMIT + playlistPosition) { + break; + } + } + StringBuilder sql = new StringBuilder(); + sql.append("idSong IN ("); + int j = 0; + for (String id : ids) { + sql.append(id); + if (++j < i) { + sql.append(','); + } + } + sql.append(")"); + final HashMap unsortedSongs = getSongsAsHashMap(sql); + final ArrayList sortedSongs = new ArrayList(); + + for (String node : nodes) { + try { + final int id = Integer.parseInt(node.substring(node.lastIndexOf('/') + 1, node.lastIndexOf('.'))); + sortedSongs.add(unsortedSongs.get(id)); + } catch (NumberFormatException e) { + Log.e(TAG, e.getMessage()); + e.printStackTrace(); + } + } + return sortedSongs;*/ + } + + /** + * Clears current playlist + * @return True on success, false otherwise. + */ + public boolean clearPlaylist(INotifiableManager manager) { + return false; //mConnection.getBoolean(manager, "ClearPlayList", PLAYLIST_ID); + } + + /** + * Adds a song to the current playlist and plays it. + * @param song Song + * @return True on success, false otherwise. + */ + public boolean play(INotifiableManager manager, Song song) { + return false; //play(manager, getSongsCondition(song)); + } + + /** + * Plays an album. Playlist is previously cleared. + * @param album Album to play + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return True on success, false otherwise. + */ + public boolean play(INotifiableManager manager, Album album, int sortBy, String sortOrder) { + return false; //play(manager, getSongsCondition(album).append(songsOrderBy(sortBy, sortOrder))); + } + + /** + * Plays all songs of a genre. Playlist is previously cleared. + * @param genre Genre + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return True on success, false otherwise. + */ + public boolean play(INotifiableManager manager, Genre genre, int sortBy, String sortOrder) { + return false; //play(manager, getSongsCondition(genre).append(songsOrderBy(sortBy, sortOrder))); + } + + /** + * Plays all songs from an artist. Playlist is previously cleared. + * @param artist Artist + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return True on success, false otherwise. + */ + public boolean play(INotifiableManager manager, Artist artist, int sortBy, String sortOrder) { + return false; //play(manager, getSongsCondition(artist).append(songsOrderBy(sortBy, sortOrder))); + } + + /** + * Plays songs of a genre from an artist. Playlist is previously cleared. + * @param artist Artist + * @param genre Genre + * @return True on success, false otherwise. + */ + public boolean play(INotifiableManager manager, Artist artist, Genre genre) { + return false; //play(manager, getSongsCondition(artist, genre).append(songsOrderBy(SortType.ARTIST, SortType.ORDER_ASC))); + } + + /** + * Plays all songs fetched by a SQL condition. + * @param sqlCondition SQL Condition + * @return True on success, false otherwise. + */ + private boolean play(INotifiableManager manager, StringBuilder sqlCondition) { + clearPlaylist(manager); + mConnection.getBoolean(manager, "AddToPlayListFromDB", LIBRARY_TYPE + ";" + sqlCondition.toString()); + setCurrentPlaylist(manager); + return false; //playNext(manager); + } + + /** + * Starts playing/showing the next media/image in the current playlist + * or, if currently showing a slidshow, the slideshow playlist. + * @return True on success, false otherwise. + */ + public boolean playNext(INotifiableManager manager) { + return false; //mConnection.getBoolean(manager, "PlayNext"); + } + + /** + * Starts playing/showing the previous media/image in the current playlist + * or, if currently showing a slidshow, the slideshow playlist. + * @return True on success, false otherwise. + */ + public boolean playPrev(INotifiableManager manager) { + return false; //mConnection.getBoolean(manager, "PlayPrev"); + } + + /** + * Sets the media at playlist position position to be the next item to be + * played. Position starts at 0, so SetPlaylistSong(5) sets the position + * to the 6th song in the playlist. + * @param pos Position + * @return true on success, false otherwise. + */ + public boolean playlistSetSong(INotifiableManager manager, int pos) { + return false; //mConnection.getBoolean(manager, "SetPlaylistSong", String.valueOf(pos)); + } + + /** + * Sets current playlist to "0" + * @return True on success, false otherwise. + */ + public boolean setCurrentPlaylist(INotifiableManager manager) { + return false; //mConnection.getBoolean(manager, "SetCurrentPlaylist", PLAYLIST_ID); + } + + /** + * Gets all albums with given artist IDs + * @param artistIDs Array of artist IDs + * @return All compilation albums + */ + public ArrayList getAlbums(INotifiableManager manager, ArrayList artistIDs) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT idAlbum, strAlbum, strArtist, iYear, strThumb"); + sb.append(" FROM albumview WHERE albumview.strAlbum <> ''"); + sb.append(" AND idArtist IN ("); + int n = 0; + for (Integer id : artistIDs) { + sb.append(id); + n++; + if (artistIDs.size() < n) { + sb.append(", "); + } + } + sb.append(")"); + return null; //parseAlbums(mConnection.query("QueryMusicDatabase", sb.toString(), manager)); + } + + /** + * Gets all albums from database + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return All albums + */ + public ArrayList getAlbums(INotifiableManager manager, int sortBy, String sortOrder) { + final ArrayList albums = new ArrayList(); + try { + + final JSONObject result = mConnection.getJson(manager, "MusicLibrary.GetAlbums", new JSONObject().put(PARAM_FIELDS, new JSONArray().put("artist").put("year"))); + final JSONArray jsonShares = result.getJSONArray("albums"); + for (int i = 0; i < jsonShares.length(); i++) { + JSONObject jsonAlbum = (JSONObject)jsonShares.get(i); + albums.add(new Album( + JSONHelper.getInt(jsonAlbum, "albumid"), + JSONHelper.getString(jsonAlbum, "label"), + JSONHelper.getString(jsonAlbum, "artist"), + JSONHelper.getInt(jsonAlbum, "year"), + JSONHelper.getString(jsonAlbum, "thumbnail", "NONE") + )); + } + } catch (JSONException e) { + Log.e(TAG, e.getStackTrace().toString()); + manager.onError(e); + } + return albums; + } + + /** + * Gets all albums of an artist from database + * @param artist Artist + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return Albums with an artist + */ + public ArrayList getAlbums(INotifiableManager manager, Artist artist, int sortBy, String sortOrder) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT idAlbum, strAlbum, strArtist, iYear, strThumb"); + sb.append(" FROM albumview"); + sb.append(" WHERE albumview.strAlbum <> ''"); + sb.append(" AND idArtist = " + artist.id); + sb.append(albumsOrderBy(sortBy, sortOrder)); + return null; //parseAlbums(mConnection.query("QueryMusicDatabase", sb.toString(), manager)); + } + + /** + * Gets all albums of with at least one song in a genre + * @param genre Genre + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return Albums of a genre + */ + public ArrayList getAlbums(INotifiableManager manager, Genre genre, int sortBy, String sortOrder) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT idAlbum, strAlbum, strArtist, iYear, strThumb"); + sb.append(" FROM albumview"); + sb.append(" WHERE albumview.strAlbum <> ''"); + sb.append(" AND (idAlbum IN ("); + sb.append(" SELECT song.idAlbum FROM song"); + sb.append(" JOIN exgenresong ON song.idSong = exgenresong.idSong"); + sb.append(" WHERE exgenresong.idGenre = " + genre.id); + sb.append(" ) OR idAlbum IN ("); + sb.append(" SELECT DISTINCT idAlbum"); + sb.append(" FROM song"); + sb.append(" WHERE idGenre = " + genre.id); + sb.append(" ))"); + sb.append(albumsOrderBy(sortBy, sortOrder)); + return null; //parseAlbums(mConnection.query("QueryMusicDatabase", sb.toString(), manager)); + } + + /** + * Gets all albums from database + * @param albumArtistsOnly If set to true, hide artists who appear only on compilations. + * @return All albums + */ + public ArrayList getArtists(INotifiableManager manager, boolean albumArtistsOnly) { + StringBuilder sb = new StringBuilder(); + if (albumArtistsOnly) { + sb.append("SELECT idArtist, strArtist "); + sb.append(" FROM artist"); + sb.append(" WHERE ("); + sb.append(" idArtist IN ("); + sb.append(" SELECT album.idArtist"); + sb.append(" FROM album"); + sb.append(" ) OR idArtist IN ("); + sb.append(" SELECT exartistalbum.idArtist"); + sb.append(" FROM exartistalbum"); + sb.append(" JOIN album ON album.idAlbum = exartistalbum.idAlbum"); + sb.append(" WHERE album.strExtraArtists != ''"); + sb.append(" )"); + sb.append(") AND artist.strArtist != ''"); + } else { + sb.append("SELECT idArtist, strArtist FROM artist"); + } + sb.append(" ORDER BY upper(strArtist), strArtist"); + return null; //parseArtists(mConnection.query("QueryMusicDatabase", sb.toString(), manager)); + } + + /** + * Gets all artists with at least one song of a genre. + * @param genre Genre + * @param albumArtistsOnly If set to true, hide artists who appear only on compilations. + * @return Albums with a genre + */ + public ArrayList getArtists(INotifiableManager manager, Genre genre, boolean albumArtistsOnly) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT DISTINCT idArtist, strArtist "); + sb.append(" FROM artist"); + sb.append(" WHERE (idArtist IN ("); + sb.append(" SELECT DISTINCT s.idArtist"); + sb.append(" FROM exgenresong AS g, song AS s"); + sb.append(" WHERE g.idGenre = " + genre.id); + sb.append(" AND g.idSong = s.idSong"); + sb.append(" ) OR idArtist IN ("); + sb.append(" SELECT DISTINCT idArtist"); + sb.append(" FROM song"); + sb.append(" WHERE idGenre = " + genre.id); + sb.append(" ))"); + if (albumArtistsOnly) { + sb.append(" AND ("); + sb.append(" idArtist IN ("); + sb.append(" SELECT album.idArtist"); + sb.append(" FROM album"); + sb.append(" ) OR idArtist IN ("); + sb.append(" SELECT exartistalbum.idArtist"); + sb.append(" FROM exartistalbum"); + sb.append(" JOIN album ON album.idAlbum = exartistalbum.idAlbum"); + sb.append(" WHERE album.strExtraArtists != ''"); + sb.append(" )"); + sb.append(" ) AND artist.strArtist != ''"); + } + sb.append(" ORDER BY upper(strArtist), strArtist"); + return null; //parseArtists(mConnection.query("QueryMusicDatabase", sb.toString(), manager)); + } + + /** + * Gets all genres from database + * @return All genres + */ + public ArrayList getGenres(INotifiableManager manager) { + return null; //parseGenres(mConnection.query("QueryMusicDatabase", "SELECT idGenre, strGenre FROM genre ORDER BY upper(strGenre), strGenre", manager)); + } + + /** + * Updates the album object with additional data from the albuminfo table + * @param album + * @return Updated album + */ + public Album updateAlbumInfo(INotifiableManager manager, Album album) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT g.strGenre, a.strExtraGenres, ai.strLabel, ai.iRating"); + sb.append(" FROM album a, genre g"); + sb.append(" LEFT JOIN albuminfo AS ai ON ai.idAlbumInfo = a.idAlbum"); + sb.append(" WHERE a.idGenre = g.idGenre"); + sb.append(" AND a.idAlbum = " + album.id); + return null; //parseAlbumInfo(album, mConnection.query("QueryMusicDatabase", sb.toString(), manager)); + } + + /** + * Returns a list containing tracks of a certain condition. + * @param sqlCondition SQL condition which tracks to return + * @return Found tracks + */ + private ArrayList getSongs(INotifiableManager manager, StringBuilder sqlCondition, int sortBy, String sortOrder) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT idSong, strTitle, strArtist, strAlbum, iTrack, iDuration, strPath, strFileName, strThumb"); + sb.append(" FROM songview WHERE "); + sb.append(sqlCondition); + sb.append(songsOrderBy(sortBy, sortOrder)); + + return null; //parseSongs(mConnection.query("QueryMusicDatabase", sb.toString(), manager)); + } + + /** + * Returns a hash map containing tracks of a certain condition. + * @param sqlCondition SQL condition which tracks to return + * @return Found tracks + * + private HashMap getSongsAsHashMap(StringBuilder sqlCondition) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT idSong, strTitle, strArtist, strAlbum, iTrack, iDuration, strPath, strFileName, strThumb"); + sb.append(" FROM songview WHERE "); + sb.append(sqlCondition); + sb.append(" ORDER BY iTrack, strFileName"); + parseSongsAsHashMap(mConnection.query("QueryMusicDatabase", sb.toString())); + }*/ + + /** + * Returns the SQL condition that returns all songs of a song. + * @param song Song + * @return SQL string + */ + private StringBuilder getSongsCondition(Song song) { + final StringBuilder sb = new StringBuilder(); + sb.append("idSong = "); + sb.append(song.id); + return sb; + } + + /** + * Returns the SQL condition that returns all songs of an album. + * @param album Album + * @return SQL string + */ + private StringBuilder getSongsCondition(Album album) { + final StringBuilder sb = new StringBuilder(); + sb.append("idAlbum = "); + sb.append(album.id); + return sb; + } + + /** + * Returns the SQL condition that returns all songs of an artist. + * @param artist Artist + * @return SQL string + */ + private StringBuilder getSongsCondition(Artist artist) { + final StringBuilder sb = new StringBuilder(); + sb.append("("); + sb.append(" idArtist = "); + sb.append(artist.id); + sb.append(" OR idSong IN ("); + sb.append(" SELECT exartistsong.idSong"); + sb.append(" FROM exartistsong"); + sb.append(" WHERE exartistsong.idArtist = "); + sb.append(artist.id); + sb.append(" ) OR idSong IN ("); + sb.append(" SELECT song.idSong"); + sb.append(" FROM song"); + sb.append(" JOIN album ON song.idAlbum = album.idAlbum"); + sb.append(" WHERE album.idArtist = "); + sb.append(artist.id); + sb.append(" ) OR idSong IN ("); + sb.append(" SELECT song.idSong"); + sb.append(" FROM song"); + sb.append(" JOIN exartistalbum ON song.idAlbum = exartistalbum.idAlbum"); + sb.append(" JOIN album ON song.idAlbum = album.idAlbum"); + sb.append(" WHERE exartistalbum.idArtist = "); + sb.append(artist.id); + sb.append(" AND album.strExtraArtists != ''"); + sb.append(" )"); + sb.append(")"); + return sb; + } + + /** + * Returns the SQL condition that returns all songs of a genre. + * @param genre Genre + * @return SQL string + */ + private StringBuilder getSongsCondition(Genre genre) { + final StringBuilder sb = new StringBuilder(); + sb.append("idGenre = "); + sb.append(genre.id); + sb.append(" OR idSong IN ("); + sb.append(" SELECT exgenresong.idSong FROM exgenresong WHERE exgenresong.idGenre = "); + sb.append(genre.id); + sb.append(")"); + return sb; + } + + /** + * Returns the SQL condition that returns all songs of a genre AND an artist. + * @param artist Artist + * @param genre Genre + * @return SQL string + */ + private StringBuilder getSongsCondition(Artist artist, Genre genre) { + final StringBuilder sb = new StringBuilder(); + sb.append("("); + sb.append(" idArtist = "); + sb.append(artist.id); + sb.append(" OR idSong IN ("); + sb.append(" SELECT exartistsong.idSong"); + sb.append(" FROM exartistsong"); + sb.append(" WHERE exartistsong.idArtist = "); + sb.append(artist.id); + sb.append(" ) OR idSong IN ("); + sb.append(" SELECT song.idSong"); + sb.append(" FROM song"); + sb.append(" JOIN album ON song.idAlbum = album.idAlbum"); + sb.append(" WHERE album.idArtist = "); + sb.append(artist.id); + sb.append(" ) OR idSong IN ("); + sb.append(" SELECT song.idSong"); + sb.append(" FROM song"); + sb.append(" JOIN exartistalbum ON song.idAlbum = exartistalbum.idAlbum"); + sb.append(" JOIN album ON song.idAlbum = album.idAlbum"); + sb.append(" WHERE exartistalbum.idArtist = "); + sb.append(artist.id); + sb.append(" AND album.strExtraArtists != ''"); + sb.append(" )"); + sb.append(") AND ("); + sb.append(" idGenre = "); + sb.append(genre.id); + sb.append(" OR idSong IN ("); + sb.append(" SELECT exgenresong.idSong FROM exgenresong WHERE exgenresong.idGenre = "); + sb.append(genre.id); + sb.append(" )"); + sb.append(")"); + return sb; + } + + /** + * Returns a list containing all tracks of an album. The list is sorted by filename. + * @param album Album + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return All tracks of an album + */ + public ArrayList getSongs(INotifiableManager manager, Album album, int sortBy, String sortOrder) { + return null; //getSongs(manager, getSongsCondition(album), sortBy, sortOrder); + } + + /** + * Returns a list containing all tracks of an artist. The list is sorted by album name, filename. + * @param artist Artist + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return All tracks of the artist + */ + public ArrayList getSongs(INotifiableManager manager, Artist artist, int sortBy, String sortOrder) { + return null; //getSongs(manager, getSongsCondition(artist), sortBy, sortOrder); + } + + /** + * Returns a list containing all tracks of a genre. The list is sorted by artist, album name, filename. + * @param genre Genre + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return All tracks of the genre + */ + public ArrayList getSongs(INotifiableManager manager, Genre genre, int sortBy, String sortOrder) { + return null; //getSongs(manager, getSongsCondition(genre), sortBy, sortOrder); + } + + /** + * Returns a list containing all tracks of a genre AND and artist. The list is sorted by + * artist, album name, filename. + * @param genre Genre + * @param sortBy Sort field, see SortType.* + * @param sortOrder Sort order, must be either SortType.ASC or SortType.DESC. + * @return All tracks of the genre + */ + public ArrayList getSongs(INotifiableManager manager, Artist artist, Genre genre, int sortBy, String sortOrder) { + return null; //getSongs(manager, getSongsCondition(artist, genre), sortBy, sortOrder); + } + + /** + * Returns a pre-resized album cover. Pre-resizing is done in a way that + * the bitmap at least as large as the specified size but not larger than + * the double. + * @param manager Postback manager + * @param cover Cover object + * @param size Minmal size to pre-resize to. + * @return Thumbnail bitmap + */ + public Bitmap getCover(INotifiableManager manager, ICoverArt cover, int size) { + return null; //getCover(manager, cover, size, Album.getThumbUri(cover), Album.getFallbackThumbUri(cover)); + } + + /** + * Returns a list containing all artist IDs that stand for "compilation". + * Best case scenario would be only one ID for "Various Artists", though + * there are also just "V.A." or "VA" naming conventions. + * @return List of compilation artist IDs + */ + public ArrayList getCompilationArtistIDs(INotifiableManager manager) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT idArtist"); + sb.append(" FROM artist"); + sb.append(" WHERE lower(strArtist) LIKE 'various artists%'"); + sb.append(" OR lower(strArtist) LIKE 'v.a.%'"); + sb.append(" OR lower(strArtist) = 'va'"); + return null; //parseIntArray(mConnection.query("QueryMusicDatabase", sb.toString(), manager)); + + } + + /** + * Returns an SQL String of given sort options of albums query + * @param sortBy Sort field + * @param sortOrder Sort order + * @return SQL "ORDER BY" string + */ + private String albumsOrderBy(int sortBy, String sortOrder) { + switch (sortBy) { + default: + case SortType.ALBUM: + return " ORDER BY lower(strAlbum) " + sortOrder; + case SortType.ARTIST: + return " ORDER BY lower(strArtist) " + sortOrder + ", lower(strAlbum) " + sortOrder; + case SortType.TRACK: + return " ORDER BY iTrack " + sortOrder + ", lower(strFileName) " + sortOrder; + } + } + + /** + * Returns an SQL String of given sort options of songs query + * @param sortBy Sort field + * @param sortOrder Sort order + * @return SQL "ORDER BY" string + */ + private String songsOrderBy(int sortBy, String sortOrder) { + switch (sortBy) { + case SortType.ALBUM: + return " ORDER BY lower(strAlbum) " + sortOrder + ", iTrack " + sortOrder; + case SortType.ARTIST: + return " ORDER BY lower(strArtist) " + sortOrder + ", lower(strAlbum) " + sortOrder + ", iTrack " + sortOrder; + case SortType.TITLE: + return " ORDER BY lower(strTitle)" + sortOrder; + case SortType.FILENAME: + return " ORDER BY lower(strFileName)" + sortOrder; + default: + case SortType.TRACK: + return " ORDER BY iTrack " + sortOrder + ", lower(strFileName) " + sortOrder; + case SortType.DONT_SORT: + return ""; + } + } + + /** + * Converts query response from HTTP API to a list of Album objects. Each + * row must return the following attributes in the following order: + *
    + *
  1. idAlbum
  2. + *
  3. strAlbum
  4. + *
  5. strArtist
  6. + *
  7. iYear
  8. + *
  9. strThumb
  10. + *
+ * @param response + * @return List of albums + */ + private ArrayList parseAlbums(String response) { +/* ArrayList albums = new ArrayList(); + String[] fields = response.split(""); + try { + for (int row = 1; row < fields.length; row += 5) { + albums.add(new Album( + Connection.trimInt(fields[row]), + Connection.trim(fields[row + 1]), + Connection.trim(fields[row + 2]), + Connection.trimInt(fields[row + 3]), + Connection.trim(fields[row + 4]) + )); + } + } catch (Exception e) { + System.err.println("ERROR: " + e.getMessage()); + System.err.println("response = " + response); + e.printStackTrace(); + } + return albums;*/ + return null; + } + + /** + * Updates an album with info from HTTP API query response. One row is + * expected, with the following columns: + *
    + *
  1. strGenre
  2. + *
  3. strExtraGenres
  4. + *
  5. iYear
  6. + *
  7. strLabel
  8. + *
  9. iRating
  10. + *
+ * @param album + * @param response + * @return Updated album + */ + private Album parseAlbumInfo(Album album, String response) { +/* String[] fields = response.split(""); + try { + if (Connection.trim(fields[2]).length() > 0) { + album.genres = Connection.trim(fields[1]) + Connection.trim(fields[2]); + } + if (Connection.trim(fields[3]).length() > 0) { + album.label = Connection.trim(fields[4]); + } + if (Connection.trim(fields[4]).length() > 0) { + album.rating = Connection.trimInt(fields[5]); + } + } catch (Exception e) { + System.err.println("ERROR: " + e.getMessage()); + System.err.println("response = " + response); + e.printStackTrace(); + }*/ + return null; //album; + } + + /** + * Converts query response from HTTP API to a list of Song objects. Each + * row must return the following columns in the following order: + *
    + *
  1. idSong
  2. + *
  3. strTitle
  4. + *
  5. strArtist
  6. + *
  7. strAlbum
  8. + *
  9. iTrack
  10. + *
  11. iDuration
  12. + *
  13. strPath
  14. + *
  15. strFileName
  16. + *
  17. strThumb
  18. + *
+ * @param response + * @return List of Songs + */ + private ArrayList parseSongs(String response) { +/* ArrayList songs = new ArrayList(); + String[] fields = response.split(""); + try { + for (int row = 1; row < fields.length; row += 9) { + songs.add(new Song( // int id, String title, String artist, String album, int track, int duration, String path, String filename, String thumbPath + Connection.trimInt(fields[row]), + Connection.trim(fields[row + 1]), + Connection.trim(fields[row + 2]), + Connection.trim(fields[row + 3]), + Connection.trimInt(fields[row + 4]), + Connection.trimInt(fields[row + 5]), + Connection.trim(fields[row + 6]), + Connection.trim(fields[row + 7]), + Connection.trim(fields[row + 8]) + )); + } + } catch (Exception e) { + System.err.println("ERROR: " + e.getMessage()); + System.err.println("response = " + response); + e.printStackTrace(); + }*/ + return null; //songs; + } + + /** + * Converts query response from HTTP API to a list of Song objects. Each + * row must return the following columns in the following order: + *
    + *
  1. idSong
  2. + *
  3. strTitle
  4. + *
  5. strArtist
  6. + *
  7. strAlbum
  8. + *
  9. iTrack
  10. + *
  11. iDuration
  12. + *
  13. strPath
  14. + *
  15. strFileName
  16. + *
  17. strThumb
  18. + *
+ * @param response + * @return List of Songs + * + private HashMap parseSongsAsHashMap(String response) { + HashMap songs = new HashMap(); + String[] fields = response.split(""); + try { + for (int row = 1; row < fields.length; row += 9) { + songs.put(Connection.trimInt(fields[row]), + new Song( // int id, String title, String artist, String album, int track, int duration, String path, String filename, String thumbPath + Connection.trimInt(fields[row]), + Connection.trim(fields[row + 1]), + Connection.trim(fields[row + 2]), + Connection.trim(fields[row + 3]), + Connection.trimInt(fields[row + 4]), + Connection.trimInt(fields[row + 5]), + Connection.trim(fields[row + 6]), + Connection.trim(fields[row + 7]), + Connection.trim(fields[row + 8]) + ) + ); + } + } catch (Exception e) { + System.err.println("ERROR: " + e.getMessage()); + System.err.println("response = " + response); + e.printStackTrace(); + } + return songs; + }*/ + + /** + * Converts query response from HTTP API to a list of integer values. + * @param response + * @return + */ + private ArrayList parseIntArray(String response) { +/* ArrayList array = new ArrayList(); + String[] fields = response.split(""); + try { + for (int row = 1; row < fields.length; row += 9) { + array.add(Connection.trimInt(fields[row])); + } + } catch (Exception e) { + System.err.println("ERROR: " + e.getMessage()); + System.err.println("response = " + response); + e.printStackTrace(); + }*/ + return null; //array; + } + + /** + * Converts query response from HTTP API to a list of Artist objects. Each + * row must return the following columns in the following order: + *
    + *
  1. idArtist
  2. + *
  3. strArtist
  4. + *
+ * @param response + * @return List of Artists + */ + private ArrayList parseArtists(String response) { +/* ArrayList artists = new ArrayList(); + String[] fields = response.split(""); + try { + for (int row = 1; row < fields.length; row += 2) { + artists.add(new Artist( + Connection.trimInt(fields[row]), + Connection.trim(fields[row + 1]) + )); + } + } catch (Exception e) { + System.err.println("ERROR: " + e.getMessage()); + System.err.println("response = " + response); + e.printStackTrace(); + }*/ + return null; //artists; + } + + /** + * Converts query response from HTTP API to a list of Genre objects. Each + * row must return the following columns in the following order: + *
    + *
  1. idGenre
  2. + *
  3. strGenre
  4. + *
+ * @param response + * @return List of Genres + */ + private ArrayList parseGenres(String response) { +/* ArrayList genres = new ArrayList(); + String[] fields = response.split(""); + try { + for (int row = 1; row < fields.length; row += 2) { + genres.add(new Genre( + Connection.trimInt(fields[row]), + Connection.trim(fields[row + 1]) + )); + } + } catch (Exception e) { + System.err.println("ERROR: " + e.getMessage()); + System.err.println("response = " + response); + e.printStackTrace(); + }*/ + return null; //genres; + } + + static ICurrentlyPlaying getCurrentlyPlaying(final HashMap map) { + return new IControlClient.ICurrentlyPlaying() { + private static final long serialVersionUID = 5036994329211476714L; + public String getTitle() { + return map.get("Title"); + } + public int getTime() { + return parseTime(map.get("Time")); + } + public int getPlayStatus() { + return PlayStatus.parse(map.get("PlayStatus")); + } + public int getPlaylistPosition() { + return Integer.parseInt(map.get("SongNo")); + } + //Workarond for bug in Float.valueOf(): http://code.google.com/p/android/issues/detail?id=3156 + public float getPercentage() { + try{ + return Integer.valueOf(map.get("Percentage")); + } catch (NumberFormatException e) { } + return Float.valueOf(map.get("Percentage")); + } + public String getFilename() { + return map.get("Filename"); + } + public int getDuration() { + return parseTime(map.get("Duration")); + } + public String getArtist() { + return map.get("Artist"); + } + public String getAlbum() { + return map.get("Album"); + } + public int getMediaType() { + return MediaType.MUSIC; + } + public boolean isPlaying() { + return PlayStatus.parse(map.get("PlayStatus")) == PlayStatus.PLAYING; + } + public int getHeight() { + return 0; + } + public int getWidth() { + return 0; + } + private int parseTime(String time) { + String[] s = time.split(":"); + if (s.length == 2) { + return Integer.parseInt(s[0]) * 60 + Integer.parseInt(s[1]); + } else if (s.length == 3) { + return Integer.parseInt(s[0]) * 3600 + Integer.parseInt(s[1]) * 60 + Integer.parseInt(s[2]); + } else { + return 0; + } + } + }; + } +} \ No newline at end of file