From 5021ba4fd3d11283d89594c55273fd9746bd9376 Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Fri, 7 Jun 2019 17:13:44 +0200 Subject: [PATCH] Added support for Funkwhale --- src/assets/sources/funkwhale-logo.png | Bin 0 -> 40959 bytes src/components/FunkwhaleForm.vue | 50 ++++++++ src/components/Suggestions.vue | 9 +- src/sources/funkwhale.js | 174 ++++++++++++++++++++++++++ src/sources/index.js | 2 + src/utils.js | 11 ++ 6 files changed, 243 insertions(+), 3 deletions(-) create mode 100644 src/assets/sources/funkwhale-logo.png create mode 100644 src/components/FunkwhaleForm.vue create mode 100644 src/sources/funkwhale.js diff --git a/src/assets/sources/funkwhale-logo.png b/src/assets/sources/funkwhale-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..725dcc8acfcc2165751caf98b6fee964832b4677 GIT binary patch literal 40959 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ᱯ+?W=JxyB+sp?S0)2dsa%ZhtwTg?qAVmDj z^qDg|-`?K-d2jW1yMT*sO#-dE%inXU`uq9usrk=4vod{FJA2`k)w4c1=WV-Wd1Dio z_A-yJIrZhyC(SZLOQmA=D93(W`@*68#LT{B%i@}U%zgfIlI%*2b!#T?+52f$Rm~1{ z-uxU(<<*n#9SP{2XdC7I{o~#B$L3aFntQAC)0SkPUHO4VJ9T~QEk7uO6T(z4)hRan z#p;zyW_NUOB!0g1U((Rf(CK8=_jj>NmM=GdnZ7kjmrveq&5Sh{FJ9a)tKs7AuD$Gd zR~OeDo61d|_SMhN$;Rw1^VN{<>F&PmrQH7R(*je~lv)0*WtYOk!;?=>)2(>3@pwf@ zh{*ppo6n!{^nanl|LBD3m)-TVw`~4YwrNVv!6~5;dXbHu_59MFqJKYM{quZD)waf{ zR>QqDDe)`hcFj4ye4XW~{k9W3vpDktuVikyQTR+ut-fl?d*8FqisaApzPqJ$DeBOp zo$Z&G%EmB9drnV&y{x6LN?u*ND@TQ+=|b?Cvu9f;xu5(Z>+%^iAG#)LYuC!FS#u{^ zT3JQya9+L4>VCcMl2sysfr0zi3M(rq&62sOH}Tx8Ew+NXv*Z|(l9G;Hc;Q%_={>_= zTU-0%%jNTxY;5N2|M_fo%oe3NEFTRz!~*?I^g}~KHMF&}FP%5bG}R3K=*6%jGD30Y z`fZEbx3n@(TK8=IluH+FmSk&d1U}iiX&Ym<@cK^|wS|7ZVty%jRxmR*Ca^odFa6QS zsqH`2?PH&%Uj5|%YndCH#O>4Sj;GA{V)tpkyy@(qZ9VsoSnV90_$3Qxg0gZ)J!t2` zj~|cwXD(d0(C_5iH*b0tEKpdOVpZ_KVe+-I&d$!R*xc>gx4Rb<e8{igwr!i+`nbI! zmm{5=E^p&v=a&=Fl66=ew)VmM_x{Wr3$KTShbJHH5*18LOsu)NDRs}1B`s5&Ua(G` zI#okoU)}YErLS(v-6aLA@#!yRzAnA`^@RS~iAydlnZMdp$Co!SP}%q6glf^P9_M%J z-)wB?Tqw19@t>QwZ=cuPB(P@P<%H-@XPa+N%3rj0wW-r>tBrbV-(I|TmQAg#UjE^d z%qJ&wG~8dUO<Iz2_wdfy-z${E%WSPx*XU0E^x*Ngy<RDz9_BluW=VO4sq9>|%<<Br zqq%d|+AT|j1jBx(wPBBcKA)eyIsJTIQC#W8j^5r>O-;>176q3tUk(fiU`S7YzW=YK z>f*!7%E}*)&lWZ`G<<VoV{+FELvwR+NlD3!>+9~uub-{0Rq*Xi<i(tRHbJNLH+Pro zKYIMQ($SGov-yJciFMIzTeoiY{k2og@>T5|9aYh9NoAZdIkWb6tn4ym`E9Z3@bsmt z=k0lZN7hsM`|qE-lkQi#msxH0xaj)->+aMYb=!OLeRlD&9k_W+WbGT>8Lgd)Xa4Db zugGl{GyN*{L?ry<ok?05Qb##WJ{E2}l&pAf(zcJuS=*MJfB)?5fe@kG82z;A4c@Ej zy#+uemg67EzP`SQeKnS^Z*E@hx8FS{N9WPw#|L*xWG9@n1nqP`E?@sgzh2GQSU55= zvg_oJbjz2@%E}uP4l-qIjdD%#^6>Z(?f&=S;r4|WGh8;?dKr7ZPzAM1|NQ*?^W)>= zo{}y1oW4$t0{PjF;a}m!t4pq!mx&$Qu-Ram&yDVKubL%QW&H8(o}#rsKE>*V9{IQ4 zM*gy(8{4BNd!8_S^3E=>+T0<(YtHfSb9NsFVPU;zpB_uH{`t1oYvG(PJO{cr&YcmZ zdiPi8;@l&RTVy=rqr9T`&8Usvl)hS`dAqXZE6yebj;0^+O3KO`tH0;XEx*Lv(A~|w ztK_B96rcZ7uDP95+7uQR#=*<`cmDtX$4e}VieFq%{HIZ`Z$59{JPr<y1qWL$Sl9je z=*}Z+HD%71mV3dmv9f+q7wWaNwP%Y+UQBtvzQ2VvRsZRo^HW~kyjv@ykXqq5*R5Or zytlOH+r0F?l@IGgR6kDO;r%x2*2&;oRjl^uA`3ze?fK1f$?BDU>U0;6^!;fDW+9Um zg+NjAQF`9Ic|ZPqK7SLmbmZBK7c0!)iwX-XUzzpy$;rtp)~)+@dVjdl^<M`Xng4Gp zSTm{0$J^UEF!191e{<ayADpP{?y}iZDu83}qJ8`1K$T7XyPeM~Qd3nmTP{?uTD7Wg zlGvB|`=k5+&Qr5~b$dsIx7wSvi@Z*LI&nLC)`9a^f9;!c>R#b9vFlzkj&|#&^EXA^ zp1k=V<Hyo%hm0rwlU|ya{(9w_?@MdyqQkRqcu$GnA9uN<XV0eQpp*BG9i8=N8mK(s zVA$_6_xx=0{=Z)?`>(10|F7zM9jHQhdSm_CwMXM!7f+iuP07?W)bQq_MT`Cg1zx;( zF<|ACoq>05-1srQ^7r|9w%uJ_To-flM0#~v_5}n6HgXE9eOSNmSJxEBEfTY4?VfWX zch;;&D^9MKuP>KA+46MG<D_jRqPu^Wmu#LKbh9<p)S}EZ{t{nm&%?8VjvLI3m0ss5 zEpuawuvn!%*(x`nDo^uLvG;S&n{M^>;U~*#!asXmT#!4(=Nm(3zA-pkD4O*cvaqry zK0P({&5MhR-<(vR-_qIH8MkkBdwY99rU#$A-Jj)xuI+rXK|1_<X3ms6bm-8(Pw(f> zoqKU-ar(oOvIhqk7hbxzW9QC=#m~=KXG~H2(%99-<ulW$b-s0Z-xS9!8Ycqp8?9Km zGV{`T)0@qb7rcVv&He6c%u>3#`S;J=POo-Md+(oGt6#eOR<y+9tBQ?1hbGTHHs^-l znalTLK9y~oH)$J#IP-<`_kA}#SHG_@CFGw&=W#wzN>@12Y}jU3`zzt&qoZ$re0-d9 zds}YKg$0iFGheyP@96Fp&e}O|!i0un$Nux4`k|e^MW&^-_3z`v-bpX>`(&-ZE$<Un zE&lbtwXbE@K}P|8Z&z1VHQ!lB^ka57oKlFAneu4m)1G4Ag(v%}q>Ys;Zg@WbVpF;J zgZIjLZ*y|H_}-a$FAe!I_0FY>=|<fu?{5Uyr=O9yFfT0m|AEH~_vvU|i2YQSCmQ<T z#nc*4bIZ4PbGPlfF~jTIpWy4<s*~>@IwD}_7vcd<Ls3$5ia{H1x98n`RQ~>+>`BXf z!}oeo=RQ1ol(b~&(%wIR|F2%ZKHTJbRY{3S_M!6{YVo<bx_<L)e#ZaTS5{^&e|JZ4 zRsQ2gkJK(@IKQxpS}V3W{rod={Wz6W0hWu8Di_RAm}`@(S}Y(w?W)4+fL%59%+@>i zt8Fzhm)ZMmugqMtecScj%JTo(%zQszSn$EQG`<{t?`Y}C>zrTpK0n}>mt697_v<H_ zr!`KsgOYrd+RvXqL5E4Y^-686eQ{x7&Ha6~^-?$2=7aX;CLix}Iyq&=j339||DQ8w z&YdTV($4lyoG3UeX#RoAmxbqAl?M5wb8>S2-+JQz>OEh*9zJ^1q!+s@XW7KI3#HTa zVo&{FHI2=23rp0YT<1kEZ6++<x43=F&Sn0w)Ad;0T^gi$u3mbkwSQ8y)vqUCog%H? z-JH=k--TtzWcDxoEL*pwe{N%O;yaomI^}W3uUOB$U)Zulm8?9=jUOyIl9|tBqxqKC z5tQm3s;aC&>tN)hrB4eB34Qrjo1C278ns+qO|9(r-}(Pvv`m{Ex3}uxrA?XUdb5Qp z^+ntH<^Qd3kWnrDmL70R+DZP$!*+Sle#Qw(9b&yJS88fD{^(`zT`@gmM(}m++9g%n zrmhq`WVOR%-=xU$7h2cNy!N*xGd$zvbh-acZ;RFM|KB8cruZ1}sMt;TIn|UiT(Q*u zd+z%~OLP?G)Xe>KSr}A0D$1MZ-2olJ_#@cg_UPx&pTB;y1vzsPXosVvrRDy=ktbh# zV7ELH5Y*4g$_nZ{@qdW^rLgdqiJIE6>24xU(=|0T4*dD~*)p>!<7Grd!~~&^`xOfP z%cd_@%{jBQSSs$^&iR%5SNUyve!TSKl$eF)+}aynzsZfXI`6Rd(4ynJl02@5>DEmY zd-eQ`-5iNY33)o_r!Jgt{Hf4vwZ|vdqYD&X=4{&)*F0tRca>`PU}fel#haG}g41-z zf6$Sa9X&lyZg0=Oe)@a%-Cd?uB`*}F_;hx5GSuz7J7N0t<sCd(TcrdA1%3Zj=I7`C z`1w<F<!1H9{dy->i}?BZy|}hETC7*4MQ?M)MI}F16Hcc85ixT!B5futp2x_M`B){A zrCj;B$1bJV6yFKkneV9Tbo|zq?u&c8^y=47B?`$itThy}qjto1_pXt@vsE<OXqj{m z@0Cqkt}n<vvYdUL$Gauvn@ydsU;8%6_P>i8<15okxfZ)BZW=nz%rgh25tfD3A>rYV zuZG7zUBB;_*7}tzFYf-{-PtLaRa^JtLn5DswD0}J?)*1y-LhLDr#yAi_X`W1Ki93d zZp`7<5?#BQ^RB9*A|pGWjDo8G3xlxmWX>h5e~(|hxY5)8`+?2X<?`;HtoC#2!Z)QG zGbmSYnO1W!Ch~TJDf{{pw;oPDeCyFw#l|xy7ChCt5z_Op^WWPW-px!4CK=j4zJ7e& z<Ght$j&65rt?-WO2tAe0%dqRW6}UX)cr^dUzFKRyUa6zpTwGsX?RD|4FaGqzGbAKL zV^+4Ume#9A@$H6&hFzkj9{&FBVPRr@ves%L@m*ycE&}{bVXKc$QuWq&%Io+?{@Jr< zArgC7FRY8*t@ig0b9HI;4=b-%BEGwW4|QuV^{yAbeUo|GvbIU(2M%tLsWW>$Z_n&T zy?GI~Yt27TczCVhl10R<gquqQ%r^Q<N8a8W8PS;UpW?Z1#Rd~Ymz;F|lk?(3mmi$z zlNtQoqjm*o973Sw--L-18#g8&|72bM?!{T_pTB--&D!>~Kf^>S=l(v~>3Xq2OKOiv zELyx+J}de4+qY|H+ygZ=b92{P{8nIRFL{4&E*q~?`p=ik=l@%s#^$)CM8kdWzsGOh z+<7vkga6Hn?Ixx!?B%l~gE-Gy9uMSHuJ!HZF|fJe{fUEx@4;hv{ZF^p)~=a*|JYHk z`Db4o{`GVBtK2EB=ePOg+?`w-DXw1~c{}%s%;|4&H9?D~+Sxz-@GkDm6^~stzwP7C zx;MAHf0&fa#b5o`-av`N+FEOdj{wWXn3VMN<Tp1q{<*a^yXv#w#*G`Du1<>Dn8f-# zW~Re6z1Up`Zr=R4u+Cgf?b*H{E9;^s9RX&dqN1*u`5bf84!7}&`1%X%KYa71WY*SM zA`6e7nQh*0y0u^al<<wky^n95w)}2C`4y{>-qSk!P42G^gKX;~3bJd;jl3`Yxx+A_ ze81Fc{w0r>Ix=pOYM8l^QLOJ(*Sy@K8~cUVotUN{pQYo&W0>q<ZMJ2$_!NuQAI~b( zmTdVQZy2)LKxfC+CAlhb)3!B4l*=C%i+?a9L$YJqwFU(ar|X(JI!9VKg@0_zy**?4 z^y%mJ`}_F#Tm$X3ow$6@o|ui>7B60WQ~A%jyR%HQPwf1D`d0I$djeM8Sy``Iu3QP3 zJNfp73j*7=ZQHPMW8>Pjx@*?1O-x8wFvBMO{5;phL`BId^AZvg7}(j_Uqo{`JQ4>@ z>n9#=GrcP(w`^iu?wkz|J4z<%g%^3dr;COiIDRr{((~KV63XkkpMSPKe=kn6wEc}` zdHeUQ*GHWG&Pg?IdvQ*VBlr24YpQWyZ%&>ycV)<zGm8%~xUf}iSgve!;Mg4xLCJN` zrY1eUn7v7(z~g$@`P<PF-rxTGxg<5`>@M}(Thj5zb)@<@H5YIgH7RiXUA|-qOYkzE zhtb<|67}@-tp4iN)zy9Y`qecpEv@_g^%W~twEw%?(7;epQL*JmiDX$>83!llLdT{H zk!5dhZS@p?Vq#$609s+aIo<!-*6iz?bFE5m<)oyj^wb!qoq6zN#dZBVckY}BT%Ug9 z_U*^5;&BO&kN4Ma`1m|gD*JI3Z@9FvCwJC6%kt+(pC?<@>0JG+{w4GC$^Pe?!@Xof z`5ENj_&t7|_ARw9Ol^~N+tN<OXM9{Iy0|~3tp2v#Uen#BqWIFat5WCPer`Sxc53PL z6{{{Q)IG0UmpSF0e}2x2V=Z>Mb`v-C?p;}~@N{AC%886s0g91MN@vb$E){YVaPd~K zwwAuU-2XYq_hDgSR)6(2Zrtb%TJ67H^?Q0dpX`Sf<|>O8E!t4`_m|k;SQl5<z$zA} z^vs-`Bme&XZk=}V;zhy7$NRs_T9@TqdmmI9xX|CJ=+2!x3YT()t*x#1e7WRZ()?P{ zz`&rPy`6nm`TKtX#owGQUr9F9{ag3uw(!hJmA{4bp4FLXFZz4@7~3Ts7a1Mjl<rmf ztJfWGTC16EKl7IM4TrTpCK=V{(radk?J|4%Z12{1`Q44&+q+x&*5^OZs;w`Ih~6Dn zcP^kPCF6;Vci9r9<vYBleRE@}Hniqk{BmorjD75hiCf+~|D7{qqhhWCN2Y<9nV8qS zNt1+Li8Lv+DA?J}v$U{SuxJs})TvWJtMdK*{f}Q=9Ud4PyLR&XDHA6)S{6V1pug`& zli{-6)kkmKxN$vd*J3*@ty9}2zgQIh{q=Qr)FwI2x4fpRv6EqI0T!NKvTRwOh$R<j za4=#+0^{aw+m@YEN;!V^tgl9;l$4Y~-W`iq608+3mPGyi8~gDs=gV~kVOPu^WK`KL zV!ErE?R;*<uho@H@7mof=UmUj7qaE>?n>(gv$r!}dN*Z*uDa30n#CRFT$6;_896di zkIV6Y1(j<~C$_u`V4IXLa%z!+u`+WH_f)g3)t`Eu?yO!hbxUvEzjY>?geE1Xq=@KE zvMG5wMS&xbgNw^)ciG#2JGM9_Co8Xu+uOC+y<f@DaN_c%OC48VeRZZ<*0xGyb@=*Y zo6p;=-duZmUu`vL)%o_kyIC8*NlHuqK9MO1TDN%f=FQ4rZ(rVo<mBdgw$+ys++XN$ za&q2wo#MSV>~Z}6U*gphWG=B>yt8BHPD6%6ELXxpLKbY>CZ?vQcE!@@^M!|Zb7R*& zOjOV1YKl$I->d)hv#gG<!K(J{If0z^%hEo_rss2C{Mfkm&4+h8-u?L3%J^nw2cOTX zDhA(!hwsT;{`GU?+4JAhwU>PnI_5dQz)<|YXGQjt{+{=bPp>)Kqw;UrlCAc}$;>TV z1Q-A3_<Q8gp+_q`K22CWPl4m1_-`%IKY#y%4jV|my)F06m6gFc@9yk8bJDZ?+3Ts= z;h&O^_q{B!KXUBYz5JDCFW$cG-IjaXtXtRJ-F^Fwd`lyvpo@>DvV2^zWchM#b>U>5 z_j|v~S-#{vnt6ZU-U6f4^z`848XL>%r^LUze=#&jy}T;#<(@Bhf;>eHHu_87n00!( zSK?Fu=|4NOAGtK%h@O>@qc2}$sNJ)6?#=53#~RAk>|U>IY&t1VFe7J$TX;UZ+1mN? zze}p}zkN0Sd*jKz+=p4&YUh-cwu^X|FF#p!{lL*<B8#1CRB|7e1*)D)5%c`zReNiv zfwQUTZ<Qs7FI))FsQmQlQ$T#YzpS%B%ejQ~^!A&Z)0H(fJ8QpObYBy?I_%KtHCMAf zembrH`O>AJxmT-ma@NFpZ{7K<WF6SYSM&=D3#WW*yO6mqe!t!vALFz$2UY|wUQx_( zl#_!)U>)1ZUTO0c$s!LX+GPFxv-JGJEnh>XEje#)Y<A#FUEL<#Dk;n3k7QT=@mg0Q z-MdXMY!>I<+Yg#Q+HUwgRpZ;sFZbTe)TlSxk*zIu<5b^G8<#EHr>+#Vs=VcPjJ0x8 zq@e5#^<d|l^THS3+|;Q!<IZ+ns~xvFmbdTueYK+awB)*rW~Z(_Thk~zV`AeLzIVCH z^S$c&SJ^M!tEh79=uuaV$}Lg4x(OUj7d&}*c@1-J7`(Z?z5nby+v?RB><jCk+}m3n zu_=Y~dT4F=n;U|=3N(~hFJ8QOcG~TY)!*N3*qmLNE_dzPH4a|hrH$PeBE7u56{Bux zRaaMo&R{QLaN}rPxl$9-Al`C5w9TDs_P4@KF4E%KcTVU}_c@Rp{<$(SlDBx1+0-?? zI~4ric<t1ES^a0;E;ikJH;UTyXI}}vIK{ZWJ?iL%gLj|x_mzYN-fn2RBo%T!J0N!X z&$ss(60%YljFXvXNUlswOJPWt4vv^9_3{dPU`SkdxS9IrOIbgaQkZSt)*MzXE0`X7 z{c%Fnx+Sxtql=SSep_5v;pNe_bEjoaPL4uQNUEC~+n>LGR~Cc9!pFzQp#0q(!^3U7 zhfnM8KXdugrIx9s&(F>6=<Yszppm&W=(?eyVZ`pT-0n^K;o;#dEG#C`Po_q#bqfg* z*_Lzj(xNXCf`X2qCeE{8UtilTI{D>Fu)iTUH}@+UCyAz}rh=E3R1=@<EO^Lt{Qp%O zr6-RkI#;l>Z=JN|@|Ip1>vMM|g>m*goO-a)XYHi(|GZYe{&?zH%Dm{HrNL~;nMoaH zdSM(nsqOP}=Nc?nEX`J)+j=lIIx#`r{7csBmUD66GG1q`E%y6$=~dO9J(e?{-(5d# zt*`S|u44AmQ<H9es`J>{Y}LD^^>LC_wE?qNweyLF*|TQ{e41lf?3S)<qphudasfvZ z1H+GBzmiT*)6Mzv;-b@O%ldycadC0$CR_FO_I}OHEEAQL<vkWrY`^)aC2vwv(uqK) z7bdBxsgX)24@)@b<mi<0D2l}HDiO?D<L~L|n4GL!+H=NcQ+RHIy19h3$87h^{4BHe zYjP)S;k6IX?&1DA_3L7dm1_>qS?~Ap%_FT%F0GpD)*SARpZlo%-O1NmW(i%JwzX`^ zw=mbaZr!oz`JS&lQWzfXs+goGxJhBw;(tFrKDJtUeEt4^QnStT)tZ$!9+~&__I~{L z`~Bvl-Qvc9!4E}5L>?UGx4&|d`BFnegAPA`zgTK;U|`_cefzn1d0V$`E$zOzaOqOj zUteB2Gm9*|+#x3O=>2>C@Nlo&ULCFh0TTi~O_@HOJCY^per1aL-qudVU!E}`+cs@u zjGmnDwXR1qF;{Wx<uCnrR<AfZXT9I2+pZ#4SBU&vYFhE{wD6y>z}7Wy|J{E$;mO-K zHpS9Mr<P9IcJb!vd6hS2Pc{_X^x)k)y(u=9mX=o2_ve3obv0s3hT!u#lN|+FKHB@t zFktkau9tdNmh)~*&F{C{Ey~~BVTrx0oy=osXsCOv@6Fq{f-*99-kdizFt~8@i#xxw ziwjFnPmhDZE}zh;5eGZxT9q#HQ*1eW`ZV{sbLYV077~uO%KB#~El&!V@MYqb+mrJ@ zadj?!#d}rjjI>rhm&}9dCw__VvpT8&{Em9}l$mP|aoOzu*s|tj-oO28OQ+qrw(7O% zk8du^p3K{EFgALkq2Q*6FJEfTd7kn9-d?MX4VgJPE;Tha|6eTbKjG{zaO6JdfGeGd z4GtduwaLlK_i8?$^_A*%d;UdATH1Qm(i;IODJoa8GV|iLFZp5)Do5G1w6t0#9Y1>X z==7>qfr)j0e{rgw|M&Mdf6)39-kU96G26VoaLVzPl1yl+RF17`ZPey(d1f>2Y+w7P zd*P;6RcHSG60t9_>|Yb4b}sGi;o|st4_u#a-L&1d*ugrIi!<MUU#n3k_v5HpQj7Ad z#f>za%x-PXR-fZzUH;BSqw3$jS+k_h%(I=nK7Rkao(_c$HN(nJDK=lP1UsE7dwa`t zuFjcTJBy#o>gnkw-&I*^Y^$Tg^X%EL`q`K7+>uF4Of-=YbTLlO&!6uarQoup{{KHG z*>h<rDGH{hrA>CPV^&{Xv}Vnlh5s*R&E77TvUzHsyx5zgc0XTkS|V6=+yDNf#m+S| zmag1lX{`P&xB2o+*Ufs*@BH`id%WVh$)mZlD{YqV=<?;t_Fg(wH6=gGY})^diP=(5 z`L*7@dV4_bwPx+b-(9!ZYRZFtW&FBvZr+&_4P7UMK3&|H?EWxiSMhVcZ}0Ex=LD`= zv`Fd9EYt4z9R-a%9SR-nN$>9LeDmh!=09(4Za#E!Th>)AyNnA8&z?SAYW(ZZ)`o{| zywYE8<*iw>MnFnR>*nX)o}LTq<L%$v-5tLEt3|>A2Cr)87p!S%X-+4DV`APgH_Z9k zQt;*FW%g&!o;fY;zO^Co@UjI96!vQ5O`A6D+2k2Bemt3Joc`?Yo=V}?*4F+%K3k)B z%gf7KT3ZvZt%-aSnElFhcDe4h&FnfpOG+1nU(ft-w$taNwck;RdouS@*Up^S_{Qxp zV~#~t@BXiMBRygrwyOrM&pgszed)u)c_yxNzD!%zR#6*~9?6%u&w66(Dyz)(EvrL$ z7FTUiJFJv)^wuq@dGj8L>c{P^GR=Q?`OC8hkB)Xrm}ZGszT|AGcyadlrqt6jT3cHS zHeJ1X_2Js>_b%<MlGauHd-gyhb7De*!dAJjcI#HE?oqyIv|-B@5wCfF{`~QICF<nj z<LfIZDyllg$NujZ;dSx**Ilmi_3}FO;o;$*9fHb6pk9Q&rRC1ZIbROw3;ryBcjw?T z-`N7f!iOhMnk4tK^6aw}=B7pm7AU;@%$D!J?_{yp68p%at)_>&3+IYNOU&I7c3}R$ zM;7}h#``IU8W(QgB6YsLa#2ct);6WxmTV8UE}T2Fd1<H4`(37%-k-k9+&DScGII8$ zLcvXs-@n(N;}gCv=3sbyt?Cq?`!%0=kM&3%E-o%UnZeOikpWt~opDh~QMOIpZ_a^p zbFE9g<~uq%TDxeAUBBbv>gt)N|M1~M14F}$(Xz8<&Q!FqnZu^wq%WWw8tUfO=Jz`I z%aqwi78{nl2v~S6CTgwN`+dLH`CYTn*3dZ6BWe6&OXlStN4v#U^VhFh#dY51GmpQw zcl8Sssk5`zCx!6mORQMx+jwz7?vYo_FE^EBxHMRU#%cEiu}uvQYE8c;|2%qfe$%Rd zwo<>(r6(V|m2C4kZ|2${BcC_7+gg8}+^qRq=b_ds(@TE$cn;i{cP}NTMXBV?jX;m~ zi|+EZNAmCNShz#x>eZ_=tjqQ0+t=HzU%y_xS&`$>L`lP>mJNP~fBdMZ`~R<Y?!~2E zOPxwew%ohbHFM@noyx0U?@qkCzrKF2U57%HSXfw?)5+q8hgd~KL|)91<L2i6c*$Ge zw&;kSqFL>)FO92LuMRL$RaH&AzpvJ6>G3B|QjQ!w`tfi(|LI$KzP`Nos$Q=>({3A( z9kzbg;;Ec$B_)&ZR2IFeQnWAK8z9DNFMIRhWWRaaCVEMRHE$D~FX!=meV$!!wdhs_ zxt>d_s&sD5YT_?j{xPfb@_|3HcWY&DUMaATyk%9tTf%+)ovD9v)Nfp$_|qbK;zYqN z0U;r!C+GI;+9d@V9~TuB?b2J6l$`u?UF_}?0US*kVW1le)D}Jd@bB;Mj{g4ZD|bwr zF+*anZ>Er#nA+^-$Wu*Qy__@iIcg7GzaFkpY4IF%XHuzKJuffsk4N450-~Zv%irDM zjP?HMW+S0Bm20tEZ<N-onEZV|)y|(jeVJ2MO-(K7)D+D<TegHu{H7njuc!F=Iom1c z7u`I3U!MEpG}Vp2UopSj<EZ_&RGxV&SGQZK?}p6=VOLI^OB4OLGQ00n?eoo=yY_X; z?3>e``QPqTf9%=tkkoV6mQ`fCh_9IOCHt-0xsAUZcImvg-nU&}QgWe$qobpHZf<Vt zl((RRmh5VGy*c-5(<UR(NRt12ySdMwJee?2faT(wimIxlZ*OioS@D;@yVE&Y-TzgO z-tO}EeD3b<d$$N%&VBwXD(C8zD^o7r6R2ukyja;KdiVP1?S0|l;oNJtx3#g=d_HRq zS_)qO{cgD^FPqYn)HgRau3vdIYheoLOzIv<W0B%I^Qo7Y`-6rx9`N#>y7t${&(H3c z!T#%S`hJ00_6hRrC&kk(RYQOLn_}a->#eTuhjTL$(sEY3aSsYzevp0l<sYkOPcGcO zVv^gs{R=j%VdLJmEa78cNL<v~oKx(@$;^AK*I92inwrkM@%J6s6M@$k?49lFC9Yp> zWaeaeCCl{J_xJj1YM!5)d$@&DIHhpL^=sFX{{H&f(b4hX_O{%`9MVk+DxkB5GcGUd zEhs8HX9#N6g@-Q}uDWvli@BSd+op5pr%js%+QW74rJ;?DOj=r+$pe9^*7@`22YeC{ z5#gwoUcGD?+idgvV+R_Ue}d+O@9r)?*$^d>mzM{+IjNv1H6<nC)|Sje%Vcb7f0-=v zpMNepD@$bh(p9ToEj%XfDRk=e)JKn3FL}L5WEyJ&-#fDi1EY?Uf}(%@=bYVje1632 zBh%mSHd(r6RuTVyvzb@3KOB9?<MS`%r$*I->9-}kkFglbt5<5>5ubWJDfdxm<h|;w z9q|T{G7C)v1qGerIrrE6G-~6OK34wzp6<!drc%87{(g(*kuYdDe*F07Nt1+(xSAAH zj$gPS&@HZ?*3)Uua(_>y@apjO|Kh?+R`$QlcXD=4%*^zxs&RSr=#j=--i76$JM1iG zZp*pZbau8mx3Yg>q2V<B_<x{%e?Oa8xhwMW^d$YbpRHUzPpD|`)M?Y&1eM)BtPWq# zr7ZkhCcgf!=`!EhYAuuH7<_zv<yU=HDZEntWrM4SwEM}mE8{MAq*m*ln#QGe<-Fwi z<6VIV0&bt!`1;LTef4#AhxS{Q$$CAD51(b#D;Djan)qkc;hM|m%`4`*t={3ob6}5R zqt1%0HG$7he~+DXl+UW_#yPIc#~e)ov-Z{g=BmHDcgq%$;%8?bK0e<6{Q0@LvoFY; z-&6Tn4Rl0~oRrk5`&F-X*LAmU;Apy#>*VBQkaUDYF*SO3+1m`kt}63ZIoqlO=g#@9 z&vE8lUg_e(!o$P!#jRaUP0i`PluAeY()j&#PI3;qF*_!#kJ}ryF?yv`FB>N(=M2+q zF@9d&r}Jw*olM^qqA+(t-?rS_Nf#D4I-Qy}cW!UsVz-Z?+F>qNu4zU48{68-US8(= zxLZv3k=N-@)pBM9j;d1~f)D>yIIdCiugvg%^}D{DF1c%GxrKji5lm}ZxhD5OoAUJ^ zJN)@RuJ6C=kebUJ#kG|;>WxJ$x3Hb%8GGA`*6CrL#k(K0-tf~=IuN_<Ti=rVM?14w zH?7fG_VshLcd(iwQ(9VDM^Dcc&dAA=CmU9MdEuLUtmk2T?N`yf`}^)bxqmfltB1Gu z=g94Ovd8-6&nqh{|J+sjIv^&-$IU^YC27yUU$4&`JLYDwQ%Xwe!!hanf>;mcWnrrY zMMamIn=K4mEhs3cSiRfK%#4GR^P;qETWf3JEomqHmseL$e`B6Ei|M(HeC-#(`6ih{ z(_b&xzHgtLr>7^V#SaR$&1q*JadL8A$S_IKI8qN9b1)8UzMPevy|L)&sb)bz!J5a% zdM6l9np@llDraV<&wJ?H&iC|qpRBN-J-_umPqC^C_s+8I{WE8#%(=toh1P$H%bh!8 z@6t}4Q}ZtFm(6-*dj7pdZT3<Pwt&FP4PV`jeoPad*}?s(r$*<9^}(CBLiE{JO*&=u z#-f<pe#xC@qNa~zea^hN-^a`SZPM2F;r~h^r`^p+(6+vI_I6{Mx08gL-<%WQ-rZeo z?0GXdC}_f@NrxB@+`1+8_V)Jn_I7p~8=D$kUER$-zP^F+@%@`N89jOa{PUhYHcOT) zS+HtVm(^?qj)faGZ$6y8e($lk>bIs3k3E<&MI`6uCf0uYe>*-@^>lY9M{moy*!@V! zw(3j3nuwH~93AVrKRe=H1j+~h6kz$_{c1}iGkenWb90?em4ABT395DvHnS)H`SI~@ zQ*(2_+4arR($a;GkMYj2E(cxG_~*vPWP!aCbQRg=&6_vFrqamn|DWQ-RL}`eV)}7s z!q>%g?$}|$BWE*%m7U$WD`|(Mq@+d74}-EdHx3#b8@Il*W^Zr*JlC_zy&!6bykDI5 z1RGP|)Ldq}JJo{k`(E?y3^P6NR{m$nHpky5`&Zs{(&bqF+VsY>n$HjF&)soazwKO3 z!S%2g4_`9~evY!`ka2i*w)#fxJHEbjkq>OSizgKIy?%OF?aRdN2X1|;onEltYu=$u z|1bIO#;S^Qf)AWO&wqVg>}AWFr%#=lFlSEBlP4(*Czjk(;c&VRT2Qwk_qN#_+v+fj zn|41QFxwS8aCr9QiOLqf>Thp2qobo=IL~Tcu|nghnasqA6G20;Qqt0;QSEMSZW0y+ z3cPwP_k_g7kC(l>qxojxtgzLf69YD6UtgzOS6A23(c$s(&d%b3gan0IR`W$fMIWA< zYptArf8XB6*VabgpKo7Z_obCvJRmaClg+_K<h<>7ncI7-w|~&|_xASwc-H*>gW37} z9)bpoI5{0XJUBjo{MfjCyZN0vcV@lWb3MakNA-6-BV*&judhN=Qc^x#Uhc1KZy&Gz ztH-eI++1t>EAPEtt;m0z)VhIh-J2IvcTeI!vV5KRC;6bf&53uPbf%;+#7T)T^iJE% zoN0N;*W{L4-+bdwKhI14EZAh`8q#1bec>YSJ-=yIrV3A|ggm^k)JA5<jMK&5NBT5m z#om~HJ=wvxX<Ma&E_=J)^OH&SclXFfBxwIVwb<(gyRf=n3b&ZfgC(3z3LHPp72ogq z%qMMAVIcl?S6yYL<-N-1vipjjdM#WWTIVaix%73|-0iI|USu4-RbEiwP*7mtH{WjU z<tiR-?&j83R!|sU+FxH^QCVplAmy=iN7-Acb+Nmz@$Nsud+6dt!Dr8&ZP>7(p|$mB zKHu?ApNg(ry}EGOGPa{fkBVsen^=p9iB<gldi~}c%i@x>^U+~pZOrU^pljUrpIj5P zG9f*ky}G*k#?70KOMl(ZdGqz_SJ1)jj*g65qSl`KHgo%Sb2&5DB~L=j(_FV4Klz$< z#dQz)yBnT85WTl{EA!_K=F?q2Y90G<Yr{DM(;)x5rQg0yUnJ#`7|Cn)x28G&*H5-6 z>nNo)d%0g<JSHf6CwGC6&ZT+GJ0`~G6{v0YD1MXm?<Qz?zT}~@%>CQb&&nv|i~ipI zef7qq`8JyQSG3x02L3Z~7IHF5I>Mn7y^SX|HFXJ3lLE)g%-h>^L7VYvzTHeebaGqy z`#8|?kv|U2DJ(3^d3|lIRqca2OTEP{tgW@RoJ&eftZRR5@q0b-(mjD+eO^lsU0E4? z^LGCJwZ-?d0s{rRy1G^fbGk|xrEq{&c*$54IHccSxN)Q4_jh*>@2&p+W#9g$rY5<% zIa8u6!ljLSUcOX5-L!a}WA~4_&(CK`J(d0}*<iVGu36vvx2uJ_S4F#u{&;nx^dD$l z^^Z->H6Qyz-dI&jN4AP~g<9?}UN2M~y!qq3b=(zi9<%&=vMZVQHDB!0U5}Q`w_LFI zjbBx+^6^Rkm(<0_>id7WHDTS_dDpkzmT)<J@XQ$=(0Tv4Ih;)jB9C@HpO-8rC+Bo( zTfsvoy{eMrj0}x6YuA?EVq3I$vFQBv<fNn$tGmk=E?lT|w1U$qPp<lnVMJu)L?w<# zjG)_MTKr$S{{bCDBwyvYXp-}Rk9%t$Dg-aQ4vLL^Hd^)T9?fLFl^o{6J~v7#?25^Q z4^M6O)!bM8cO>1j=EQ!!57W(5ldt~!qFEihdE&h2u1l+arDd<*vrI1hv)9MVtulYC zA9BUrtdUZ-vpTVSjpZr(JCl#`FM0Z5(kZLC7w2~wp6Psj<k<IbQ}@2@^}Jr7y1itJ zOm5^%sl+Jz{r(v%R9(_8E%D5_yUSFwNrA(O(Z|;pbda&)^n*Kh?u^)3wDiKn*=%fV zp!zsdx}&QrD27d3e0uvic5SA;)!*Bes<Ivv_|-pirexZ=Ii8MYEFT+g+_;hO^V3tG zE~T|DpTAvRd}X%b1ZR(6W#%(77v}BV{(6s2_mlj(eFv?pZfuIneQKL2b^SDZ-!!$H zm;B-_x@Eu0L#}2PynAL__wJc3!;eqj|31%3=BoA<PD{<=$PQloe9f62J42%%pNr*s zr!C&I%x=-1Wp)eK>|#_6Ewx#{ge$aEYVXevK0H@v*c)}U{yJHI)cmKLpqcD$#oKMg zUKP=4saY<Ibrnt8+S+EA=gU?9dbwOP+}2T`g^5SPfZ^iBi#PVy?=RQ{+NSB;&eyts z|BlQ*Nl8gJw&mU~DdPM5{d@cL>C+9WZ0i5*@q1-xW;RV`x=S}`JKm9ZcXxwMaSmd0 zv|&(GR0Nj<*6;T?|BiE%w5c%Y>5;qFo~AH;!NkUQH%h-<yY%JGrOKe~M;VX&SD*U7 z+D-mhV!B>-JI|XZZ0z32X8(VS#0B17Anq0xyxuV^k#!T7cAdSznw*vLbJy-PyeBJu z=GN|;C+?NiW%52MUv_HRk`uR23KfZFsCBrjYH4vTT)5Dp@DYn<GbmEU^kPob{rj07 z7aFQM1vCJVzvm;{{e88&Hw0$vcMA>=33>78k9JS9rJ5Ss`~Cm-oqHJ|pBE}{r1@4& zP0gPp8<UUcW##0kv<e(yHpsnY0y@tdG>)6f(dM=E(2b4B@|m$qCV5A&fm(IzPloQ< zvdXWSH9EK=xA{+KlXdmY<f~f(o@M6yg{?~eVG*79bxVNjoG)Kzx#`@Pc1Sx*D&=?D z{O)%ru4r++Q!Hs;>OI{k_WWmW0hWcUEv&5{9~F-mDSBA&@sVrI->=sXy*hW|gh%@4 z$;Xcz;ZW{gzI^!wbM=2*wJU-h1o*wKuZuPJpKCQ$#8H6%;GtG-$*ZP<{TCOz+kdih zQC)tZZrwGBtBbehaPG|)3rl#(FTUVN?SwEsu^-=sYa>?7H?Fk&+QKM%_r|Ntg=el_ z^O^W9{9g&@_4m_GZh!ge(aEN$+rh_$ty*W#mcCc}Jyxn5R5~PmdUEoRmDhCL=wt8i z?bTlME-5LgB=6s+Z{OT*Z_D-U@8?*$S20Qpw04J^k5A22;0W`gu+<xrj&fbwU7jD* zrVtSs`S9uV__`-QV^p_4xcqzj>7uO@&tI%m`K$N;Tg5V^xhZKm4dut!lB4YHk4dcE zTT;dlVrV0Kv+=CFB#W?f>N@ZDUORjDuDrQvuI0^0iN`Nb@Ll=Y;wL05++6th*hHmS zn>YeidT_Ehn*2WYac=p&m+Fsx1jWYowsMPe&Ax1^qr)R6CT4Z@{>6(Ioz^jzyq&#p zi@A&U(F+#@=GT1UEG{ZiN)<T5oRpN*bl&cF&({|ho2Mu;fYQ(A&6}&g*zS7Mma^j5 z9mlyTU!&^lUTFF6n6cW!-H>7O?`=ofA6FYxb0=?#kv)9#mWaIXtCPpRd<pbv6TZ&1 zq3C{Ur1{kIuH`Ay)Y?)QTF!mC7M;IQFLu`irGIUX&1{K}j&v^JXi}Ip_uO1-d0G3q zJrg#ms;MR2-&gB&DlH|Y<=@}muS4S9-Q9n8sZCzLUjNpX%*Do5Z*Fc@&&kcre4r4e z<LBoWu{rImMscy1td9VH*UFWe`+hv)784V5I~6eD<Ye{aFE1{h{iNgS6x&oQBPjYp zarWkU%n`e+dzatS3R`ozsaEF0(KQBMt&5#`Uc5NAZ-(eGrs$iRYKN!Z3DUVY@s#w= znz~>2-p+}%uMan3aC$DT^ZMG_<h9Y;)l&ZyJ_=uHQ2s7vThdXkw6rugE=3L}A<$uZ z&tAOHSd!yCP3PevvD~XmMKqvWQiMYKH<!5f7Zw(7u~&(*iQQFlb7SG-W1V4PVM}<L zDjd$7IrHJ?^ZCZRLf7%^t@?T>I)CrgoZ_8H<w5E0r47A1C+57(+|oPa|KG@Yp)2kz zx^wFc$H(Mm!}0(IV^brAY%vjTVdp(|Yq)3I8*w~4cIs<zo~I~i67TxS2!WetZZH&Q z32TNhFv!Pvx;Ta;Sx*!csA`-$SJo{5-kF$~7!S$+?K^i`{`>pBe)G-E>CHi#1X&bS z!@|NUKA$yjmB|2|8oj>$ulETNi-!*%UYP29<;9DP#OIS<ym+y7*8=CQQN1fxXh<1w zFgXMSTzKX?+ssf}S~}<$b3%rP`NPimXOn;YsQ7kFI^SSxlrPuB&Ib<?YJR<3es)#y zQJJq{%iJnb3l^;L-o46-H}3a06Me1qp<9&OOLALz{aZIqF!Ot&D%kT+_U?^i%MV9} zEZDuMNM!2uq<70w;-X^pvv=zsDM{j+rk29da__;TM@_uaW(Mi$&&Aer+uPg!d2atd zk(r%O<*)*W(>&An6BH#35*j9Ks{Q?TyNAEOxSyV|u<%^ZdSOvf)i-g=oZI;>v__ZO zR()|OezIAWqjq8P@xB|oO0|X8dTd<*I^$|}*jlCiLLa3;cgTP`E><5VHFk7x<lNaY z(e%5og6nFV)?b#%85^#LSl<3~l(EXIjQxdt;Wo3Qzx&INM=LkYm}Ab}VSoJSF_HK7 z_vY$KNU~VBW^+ynyPo`RS@50>Yuv7t{Vp#F{?pK;umsfGur7O(@bBM0-7xmU?fl34 zWUXhcU#~C8;wZ4`)4l5VhV1O@51(Y^<QxGlj_O$@Z(FtHgP*v*zCH^(JGbuR8yk~b zuP@d+;UQ4;`0?XrS?jV5iq35ljQ%n4^YiE2*wFa*b^QM%Gc&V?O9UT%2aW&V-&gB% z{nfn}Lc(f32bRyTJLTgu%l<;>(l4iNWp5@XXS;hx-aezb?$GJklPW{!x_vw+d*dW; zyzSk7UhZ$RR)t-(^3Chvy)xs*a^Bk?LM*s57uPKP35wQxQ_d83txn0ke)5!v{;|MQ z(oXe-g@p&p@7G>`wCH4SPmh4S{P}6R(Z_szeNPH-G)<6YXJ@bZaFE?8?y#Sa&ylmU z&08n0&cDBpgNH|CSNw9nxmtg&{<^r>oqMj^iJLb;+oMc81dhy4NK0#bdU`tOJl2a+ z-^wMVq>_&HNP@1D5#?9?C#J5h4!T12O*6k;Ldb?aKR0aOems4C?J>~d-#4v13f=c^ zY?S)!&St30T<LmJN8|XOd_Q~5^ndU7AG&l!pg74o_s^q~2G<T>pSb61QEt<%-5YrQ z+c&EJ+TPr`@RM}!E;ij~wZ*?qo@pwIyq((faBJe+nM*mJZW9*W8nt)omJ2rA|4g&5 zZMeBPJwKPT@^@2n^TzV`adWk_Tz-m_3QzS?y|dk~!?mKqBChhO=)-F}<`jb(&>nO5 ze!UjG*hN-2dV5~4Ve&DK{PJzvwjH|W$<VO<e%<WAyiBJnJ42@YEV;DA6Xey`S67F3 zZ=blY_IJ|xdA4u9UXM@T|6Y2k*Hg!Bi*DRI>Rck}-YeDG%+9|F6o8iJUI<;hco8(r z9O>fHvgLClhyLrwDV>pmvMKQ{vFCRFznOi1o@41=w+_GWMOzMB`e?hMq=x_5W1p+% zmM+>m+xL|F<f=_a7w<lJ)vbqf>8`lu>)YoXd^+d%{F8UT-I#YzXT?@q$+iRByw%me z4X<dQ-8SRUot?$Ub8c@tyWMxTS=G<JY15`f?5Qxky(yLZ^T&@r)uYp!Ztl`CQxLj# z?V447@gmWjvf|=o-LriR9P^)7Jv%dVhGp@xf+AIQb?%w}mPK#RvraoRLvc=w)>JO< z>3VO~kA~)JN|@)#wDHU9&503K_j5@}S>o6K_t>#xPA3<Ktxn9#Teta_iMe_E(xpoS zj4CTS9yWjZ^5w|&`1-T=s^9Mwlaze(_H8dHs`U5&ne_MOzoSQwrfz1~ru6fc_mRU4 z)z!bx?n-dpwryL*|G(dF?yLPB5fd|KL+b<ArNz(B{dhJz|Hkt9bz0t5?umWDZYBA> z_ukG)-9GK}_U@nF@#^z+*RK>m#!>ad>e1(!wKon0#ztzhbN|ws#VMbzeWaf^ZNA+_ z>j;(OC6&Imalfp7=Db>)bkn@+?cJQ9c`xqw^*r`xOPV;x;O*`0%l$Ibn3$P2m%YDt zc3$1Dm%o1ron02R(xBo)!khd1=ljkuSm?>UVO{KQuCIKu)@4&tH>(T1d$%iIT18FG zZN^o*WS-jJ-=^-74G$0RFew8a%W?5yU_~_OsIMDyEQ@D&NFQ0WNGb8_*Gt~|h7*Gp zuL#lF^Zj16j)ldK6?(ma@--hArA;y>7<}T9wG!bL)45Qo?|FM$ZfnuE9Xofvtl6@{ z<9@Y+LqkBe$T11ftuRZLsC>JXy`D4jw@X*)$5o-LZ!|KqM}&l2xqoZlBu0-OLl<{< z?|Xf{y}bW4IXwMxa&k)YWbZHYm9F`8Qa$JUySuu2s&5WIc>cT{l*QlP-oAOl1c9H| zq7U)xVThBz#wu6#X?|1uS?#yq4jl{Lvtv=%ip~}D_iLNkh#rfRzt;NGBJxuBrwz>$ zyG6x%c#`Iye{<OB?;OQTt9I<z#HXKQb9DW)sb!OElMIay-Cn$#O?t)4Uzg<zOG-r2 z7QT7+u5ZBtg;ye+21Z7QPV4W_nLcC2iDSLe?99x}b8Dy9{r#1AeO+wM(Js+5H*fAd zxnEpJsA*g7ZLW`eSzD!)-TS80biBK_*LuyGBRjX66+Cd5TYk;O#RYUB2S?<uZ*RHt z^Yc&MHZ(Us-oVJ*^0N8f-s;yqdu_hoDUR5j#w+~PTIA-<#bK*A*8D6o%ei52G}X}9 z_;9;?-3d@%bguN`x~q@7_4lpFh^sv&k#>IG-mi!G?NfeDcy;#TMZvk&<zkt3S1ae9 zn`0R~qr}7C{_mCvuZ4|`jnB-n6n5{IOXU{VOIaJW_0sCUonA|w=G)bRZpGasU-zT& z=&@sFFBx97ipK@4*}rJ<;?&{={<BOxC3ef0W=%P_?CqNi3z@I2i#=WT?#@ZKUMbd9 z%pd<7nwcHz5LEu~_xt_+Tif&HrHxWL-n3upDc+b@eNSi2fy=M^i&cw`@4hu7@#YbM zXIa|!rb_WW$Vn62XFaoZ%IxnJwRZm#ZZI^}%HF&YXZPZn?lZPGd6}khzpQ57*IhfU zp7DUhKhuTmuV1}&IQB_gL_{Rv$%%<J_V)1?d!OFgnjN{n?(Yic6wpG_)#2-(?Jj%k zR9m~(@5G(O?)+!wT3_E@{rz1e|8LN(YAyaV3?6#;`t~k*Z<Kva2Xy(;rZr7rYol8G z?f*r5+<E2RJvq=Z_q%FB|A&KaE4;Ya{qv(oNk>x(%F2#`D&v@y73<>n_bEEJeQ0ZA zb1lu!$modOUAD38ZOQAl7(YM0M~@%xykz-ETqokdGM|}Bd-j3mF@F50h>O+zzspcV zg9DU_gf%C9Oth^2mh;2<{hs0{kB)Y4+ID+gto5Fc$E4Tz&$p}ES_V4QVwum(LsP$L z&X_eT>HojKKJs}h-`?8F4LUzRKPM-|rw!ENeR!zVO3>qg<?)%u>7dcbefjt8Gz{I$ zuFv|g@wnXK9fgnOetk%Mc&N4J@-p8|r`|q(-28su@4k~$>--mAOn7x=<)0@fCwF}V z9pnxwRlX>;sxpLxgggLU$54L1_PBohzB`ZpFl23&vaSB+;^V{9-QC^X+uOV76UXxv z><ve}D=VJcuk7MTOHb_ivGL%Vy|a5axRogHm)RYZ_xQq68$GYO+Q1D4hAt@$zwaE3 zjjq-Cq}#H(a%siq-JAC;+2l9zTRLCH`D5R|sW$&yp8xh3@0l5f&FSgs+D4I}V<N32 zcP@K9W!ki)-{0Q;c(?m~MOxajf=@GN&IDf#WnX9W`ocoz&AD6B&(Axnt)(SWxjb;O z8|W;7$-0LER$oo}_2uQC=kx2s*2wqv_HL~ETXk)7y8qsvWuSYCcNRbYbmdCO&D(rj zT!&6g)t)(f_Utup^KNcp{rvoV_?d-=Bo041+I{oK$H%4D^8Du8^_ITA_EFir&mqs2 zjh#LD^Ru%);dvpVVq&1H(w<qDznk*Z;pXw<?C0(O+eq6~Y>0ch`RSa;7Zy7I`1kw$ z&xy+J3od$Wo^NDe;80Ov(Z(--E-5ML%eIdDyGmbw`1kw0_Op<H)mMLfILv?Z!b0b- zZp%TFJNET<`Z_vOYI`ly&&hl{BJBTS$-PypR~Npxpa?p6LS0pL;hsG)8I`#?ITv=9 z=exMOZ(gxtg}dL%<Ce!~nPzXO`kECNtzEmV<KN%kk3nTbk+rF|mez+e#^*l>tNUqO z%FoNo1MRvJei~L(T>SEq>YopX`Tv}ls4P&Ze`n79_<{lhC1qt$JK@o}pZ}xocfVM{ z-Vplx^70(}+RxsuX6M_o_E_%Wetr9%YsTSKE3ZHJ@O1Z&k2T*Wdx<EDb{+^T%Lxe3 zZu!0Yzzv5tuicNYd!}6XywWwVm%-uwH@!D+FWz-{>O5=TgWrEXpRX-@b7P`r`{8?s z4lyya^BplhZ*%y|)*CDJa-W=^W7&Lncll?~k=sw6XsC5Zt#wOCPyhvD8^1gsclWdP z@j($09j4jWKJ2aj?$oy;gPEE6%d4y0mzVpeCnhFtdc9@gLdMh6bRWmp{ZxI@*YWN9 z_v4dPz1>P*UP^7Zt21BjH`ggCNl9NrW5O2Qsa~w%;o&Xq?VIP>R%<=;@bU6Gw8*vl z$J^W6Q**DMJjn^_E`y4>xEp?DWoDrJ)22)jsRP|~xx3tdQhxB-Fwo+!!)?6D#_8uo z)+wX~gKkimXIowH=SShZS+j2CRDQdfWy-|FbYW|D_>rSWeR;UJZt>VIU$u(s`T6<B ze|~;Gar*S*@>e&e=jMWLFBOxJ=vc5o;bB*^*U@>l)dKSJ`n!{Fo;}O!Jx%B0>D$Y% zUcGu_f4#lme7m#S+S*IM)=Nk$D=0MZ%GpSK`}VDBp?$Ag^OGkjGS+21%a<&9aA~P` z*ZmoxtFLBUUnhI$@ZtBM$)obOw@kge6s8_J<n-p|X7-maU+!7Au9BHKR7>>E-MfO4 zk}F@xT)c6k19Wor>h=33=`!6peVSX@ttY|X=3~o**4(9_quf0`JuRxfXxJA%YB_f= zBC+S-<;%j2jg6qQ%wONzyStz??4NgBpzK$vT;*qVbKevj?p6t2*;iw=$X5Dpu=%=* zXH!BRdi;u&@!WsfnEO=pkp&lz9p(D__in`hzI6p#FZMPTy<Vxa#&gH28(#zXtBe2q z?zB5|=LW-(=HTF9<(EwUYs0)BHK@*NKXb-M#<oi2c)$Gf>H6{0_Ao45yjc0rp+f?4 za_6ePzterKSsxlYHAS#(e^P3y>XAn;?(MAxO*?Jcym|li43ovGb?Mg@yZ3W~I__)M zPn@bN+UwRlzy6=3xPF|AuW#>?$$M6=)O>wmA@i?qZ&y$Dd&a(S(<Y&)+|O)g5fKp% z@}HXj%dHLTb}xM*DIwt?f2lz56lh9r$r6>AeKnSg)~$QDU`p=H*|R~1k|?XFxU4vI zujR()FH60ryUnw&uRFdq`+7xKn3$2VabQr8l4ms=8{3Bu9~=@A6quNpA`%i3cI@B( z|KhYq52j9TYhybpdqPc3t!n?Xtgd;WTgN_~nyPKB7r*ZeXgx?z50A<B#0!fT1g(7V z<OvHuKYvAa_2K*X=a;^?aB#VEJ746kC+ULM0{I!1Uj158c9;{i@^uD}^X^JlJMqhg z2OXALe>`6PF7#1^o87sTdxxLS`5m)3_eyu;L5H<X`*-uce)ziM1K+w28?Mhi+p=t8 z@>T!o%innI{JS*B=*A4mM9^4ap8ITrrVPG!cXzjgu5Gool{L@5_vGi#pP*@|PoF=3 zRM1Shl4W}5?%j*KO0$3b`n4$ec%P1efxx|c_Y~6gz`HA196g*fGd1(>?Xi4#Z*TSN z&!0aB#>D(d2@JfL?&|9L!?f1N)%9ro(zMMRHZ*M9Xn5xA+4|r4;^N}Zo;_nLFaJLA z-Me?zGP1H?-v!K2_}3A(+BGdr4OE-|`BU@c>C=yY{?v$wh$!gm^Sipbo}F~<!}Vq% z(Dcsj+lNn{<mBVyD<~*PICt(`L2+?&dpmnfOw5-@AHp)+Z5f_S3wd~xSG^*0Yti*7 zOwl(ty7rg0uHE@=?t-gVvI`!Tah^*NwJm>GcJkEhR?&<ny8^qX8M5W8dzWOUey`cE z{;_)Oo;L|uOR6V6_`dqphK$>mOYUk0`g}armQ`c3QvLOVJmw~aCChj1`nCOwVQFdU zkIgm{uU)&gVdKV3!|RVg(`4XndL7dazR&;jcUIIo%}A~_Yu6^`<nSaXC%^DMc#qw& z!rhi3=A`b??)dpZI?K%&KpW{!&d75TpP369VUIbruiyKos>gX<*RVuO{k5yaoy@$0 zoqt$F8rGLfvuxYstnMEjG2_Lz%o|tt1nJzEb*TGPw&-NXqY~44ULJG$J0}x-qzwny zAs~|RBB#48!<-#q4L|QMFHl{45VY2{^X-vGO*UUoad@qMH8C`zZ?>!G3B7f*CdEf> z{+O3(dR~96+umgxZ<fBuN#-(_Hhz|rEcP%hd)kB7Ih^_K-Z!FWy_gzT?{oIpr`qWi z&4*UDKRZ&Iba+?g#SHLPKhWk@a6)NXWZYN9aARtb^y&INOLiQX$oMYDFGqdG)`q4z zN2iu*tX_5a@2jdQVOJM#*~OQ7_3MQUOOsn}^JlT;UVC4E?}mfz(Gw0^1CL6qIoq3% zoW_!Etb8L{;{T_7Z(#%5>yf2%*|h6+wJ>My?7IEx@xpy?PBy;HTmm}B1>|o?05o3I zbhl-wsr({krWP9>lOZl0yvNd}qx91jRc)oZ$3fp}kG%JJ`g5si*J+{KM<?$!QVDp^ z?}pG1nz^}t(bC<PVU67cxsAF%pE)jl8erJQSzB{+ih=!#&?kJkCo`li&D3HKKbvp7 zljCUB@1MIj{ZwvVkd!hV9uOdgqLtOl70(&$?o4iz58m7=aPRz8sn2aJM)K*}n^uT< zggIK;-IyCTsc^eb$7@l=+&MR_lXo3-Si9()B8qcl9n@vNGF&)eIqi+d(TQJnJMC#` z?0Wd|-oBim``Zju*fYBq_$@wq-P3%-(-gJqW?dg;OTTSO_m+Rpm+Wj>DgcfbkaIwc z7aUfvSFkhmZWHX@HvjO)9;U>&L#Gcit>@uPk+sz*-)lFyYPE#?+r1}>y;ikMT)DXY z?V6>JtJj$3GrIP{Q#;6YPV+Bhy4!y6&inAaen&$~_s&CmIFfmscWvvMbML(V!CPlK z*7)>mtXuQD{_WlRoGV{tkAJ-Wz3xlZ^|*fRw~qBr>z{^ab~B01Fk+nR$E)XeVP<be z8dJSaPGM*A>3<i_9NqCITx^=EMeh!IsVhH}yY`zg*7NFonw_+8OY62RPosW4UUx^f z{CeH@_62E)9ZYZkR@hDQ{`LI%=U+AZz8_zGe~-U^PUfZP-&T`fotzmSnDFP<yPv0? z`BpK2fx^=zHG%q`%Q9d2=bPO7eQMof>B*U~J8zb)jfzRF`95pq8E*f=&WVAx+ZX%( z|M6gjWT)z+tlaD8W~A7ZJdbhHV+5PRpsA(X^{e>buBD#mYi>*`k=8nS{^Bg@G^y@% zzh}pmF8DsXYRkj9YM)(%dUskrU$#pq`R?1|6hj_9E{JxIz|7Dq-j|H!x4r1p_4VAj zde^6#$N!cZhlI~Nf7YAv_wC<bpIke9>;Ap@Q}|DoKl9)DUVZx&8(&v`i1sDhwrIan zec8KL_SfNO%xOs`mfy|RFFNq!;U&pcdNU93`Z%@w@w{4@+y1pMJ3c5*!THi(?{ta# z``2|HW`dY-$stPY>!dB4mxlB2-*B5p{ie-F{V0>O>1(2Fd^c;nnd}sNeZjwPahtc9 zvrqcAa6`0iRQYe2$8EEc_;?@&cnD`kU-1qq_P_A0J6-zG^0xCTU#(uB`rNx){O8t; zS^jLBj~$<qIqTLvnG4I_uJyEj^h{>^<#q01=Zv5E%sg=r8jP7LYrCsFtt>?@?n;+F z^LX!J&;8dnbz1JqUU+}U%5@=;X58C9b9MFiyjoj3w<^zl_07UpC70H3&uH@QzgyfJ z7&qbcLzqcwZ@a5Jxm+JtJvnN7>*l4|LbFS)-|kwu?aRK~>-4I39eVz3TAW*M;{>z! zFL!)@%RE=wd18gvnw{%x?pIVCjj1e_kx_v7Y(ksSq7~EaWD7Tayqos-Z}Z|bt+$nB zE6dO3hEKQMw`7;cIUQ;9Z`mEk+_!Aq=so*;$(p=3GB+j|@h@K@%B`h!{f@=zt67OE zLQvDz87*63pYC4l(7$ibbspEpnp@xH><+y@!|r56Q0$UltDG!z!t&m;&hhM7@i1fk zHrZF#>ig!HEdDrgO4NSi)63@Tt~Z_*B3?KHVw}UQ(>oT$P1?nNxa!5v*tBAQ1J&#A zPi@M)STeux?;54E-^D*H`x`ki!fE%dUt8V=Y~Lo&Ipbl3lInNEr3&Huqb&O?zd#LY zJ8@!B+@z$=z`sA&y8U0h`*w6trM%f{*R82>i}#&c{_B*}Pve|rwb=?w+NQ;s%J9B$ zINmT*Lelr;-#Zb}Nq@dvllu1)nwU~1^yt1iU%7v!`~K>;4U#=aE+yHwR^HrImDLy+ zK5zXkqxF~Gu6@%Nyu5V5-uU0vzqamPd;Sft+vTKqy>?&zJ3+~JBBBp%hXq)o(Y_Va zmjo|dAy=C^zij*0rLhviMVmsRr{!On`aHX8qPwWw_B%JfO^NtjV6yI-gU4B0=Ueyh zt!IAA{OrI><IM8^Y16B&|M}FnT26n~gGbVw5dWTV5c!%ubJ<E?>sw!*Tsy33Z};@H z$g|Y!tcAB%eA#Kb^upRnHPh9qW3&paQzVYvc&4|~UL^E;g3I0J#I3AOS-dS*#5iU) zCaA1Ee=y7NOY`ehJ)zypPi7fba6l4Z1CMLqfBRY0P22A8+oeBmmAy%|W=>eQTIHNs zZwjUC`h(@dr|q$f{A98DNn!1;lf}1EEu)`3PrJSJ^Ow_yC;mvU=XXt#;;R2AY4e+t z$MveQh?zg1n~4AC`kp!Gr!>Xb?$~o~M(nGn3z;F_F_LlpTiMeytLookv)nsnM{Fib zC<?@wnRPF$UbogHOn08z?yFAF1kIrFN`FbU!kYW}b_-%NEq2Q#=cj#aiRIT@Kl}an zot#h;52S0n+TWu2@@?(hU#Ium88%OpXndeud}Hmd`jaJ(&#{Wm@8yNYcSEtpEB#9W z7R#33vn_g`z5BL#U(X~-y+;oxZCSJIM#SEnWi@i@jSz=2Sm<~CTK}Tr{f2*Eo;kj? zEbDskp+0oF&yTbHdGr2$el>}+1rmS^51KSy?Oz5jIsa!KI*?u?w>(ULcBam1O)=*@ zsDUv&UBA31NJw5iEiZrF-rgpQZ(dqmty*#V?b7c``!^;fw#t}k!))J?A@X&)qlw+3 z>1A@4m%Uy4EMUeVyU9B?<wR}Va42Hu0;iof%b1`J_%Jo_O1#^{2q*oTE6bjjZ<%@c zqDA8p!}hzYtk=!Vs>z=iFBdKbGx*0XjaTa%9%jVozq463y-Y4y#cx)jWlogc_B#<f zFRbs}$p<sG;H1W@^$Q}BLh|3gzq0J@+B9{0tJ#;-c5U8T<k-5gCU0j9pES(W9XT4W zjyGh^`t{(0XYQ?gyLN3XPGIg_!ngnY+TCKmdZn|vQa49&us}lMK&pG7{V_XB!xh)R zm%W(V9Gj*xO<{sc%J!%)XCo)~Mz7Ple5Z>^(ghl854aYskXN4=;S?>k`|GcH-;VRm zm56aydc6M7^J{Cvr%IY%pL*);7GVyE;SGk4f%93Sm=*W#+<tif(v7R1Uil!&B<Y;D zJofr|Eu($5%R@GM?`46Sop2`bin`!sldbFb#z*s&{k)(3DpQi{ILA}26NNWQ-u9e4 zw&|wptmpbu&K@d|hFHMxxP6hGr>dLp+q~D8uN~8So544udCIrxD#sHqAIh{#&Me*d zYBg8t^Y%n&^r&!l{Srx-wT!Qvf91lZ;k@qE;q^sH1&1}Bmp$y(U71xh@0E6~TW#pV zwCPo;PtR6Dt?}$wWXIa7R9JiG*6Oxtac{HVo9|{n)S|TVz}&UBKGiJVw<+N3)Yeny zO9i+fIvSR^2hL~v)qZ}(#$pF{Yql#lEI0h}_<o`7$BB%n_cyZ)Lo7A@O_$!251(Fj z{ra@Zr=Kl$LMugvAU@YxDNuct;UA!@-kinTBA3D4^6!Qa$E<}OHmctzKi;tN(DQ%O z?oU_$ukwArHrL%*aZdub-942E&4nJ7B3~t!=!=9#D=c|jd-#<c$NINYJnP@fam<co zPVD_I{ljdv>ttI$(dt;Yjn}tsyYV_I-pnvu)NZ@l$7ME9516<G^3R;~t0}OQzwN4Y zkCsHIrbMT<MBiH3t|Qmjl?!=WlhZVQ{gnQ>@kd8e=jZ9a%VxXw>F;?v@9~C{kIxv{ ztkZdF`8NA=Oyq0Zb0Fra^Q9|p%vPSS9xc`^U(E`!WkRLKD`?CxNVtnBK|~oC68;2S zfqI6)pbuG%$XA$}9_21*bBuxEn4qgIO#E@jA~`6#q0l7|+S*|_V6kWgJ5)SD=C62o Vph5VV2Rn;FLY}UEF6*2Ung9qDqKp6l literal 0 HcmV?d00001 diff --git a/src/components/FunkwhaleForm.vue b/src/components/FunkwhaleForm.vue new file mode 100644 index 0000000..5e5f867 --- /dev/null +++ b/src/components/FunkwhaleForm.vue @@ -0,0 +1,50 @@ +<template> + + <form @submit.prevent="submit"> + <div class="row"> + <div class="input-field col s12 l6"> + <input v-model="domain" id="domain" placeholder="funkwhale.domain" type="text" class="validate"> + <label class="active" for="domain">Funkwhale domain</label> + </div> + </div> + <button type="submit" class="waves-effect waves-light btn">Authenticate</button> + </form> +</template> + +<script> +import axios from 'axios' + +import {createApp, getAxios, SCOPES} from '@/sources/funkwhale' +import {getBaseUrl} from '@/utils' + +export default { + props: ["source"], + data () { + return { + domain: '', + } + }, + mounted () { + M.updateTextFields(); + }, + methods: { + async submit () { + let instanceUrl = `https://${this.domain}/` + let baseUrl = getBaseUrl(window.location.toString(), this.$router.currentRoute.path) + // create an application + let ax = axios.create({ + baseURL: instanceUrl, + timeout: 3000, + }) + let response = await createApp(ax, {baseUrl}) + const appData = response.data + const redirectUri = encodeURIComponent(`${baseUrl}/connect/funkwhale/callback`) + this.$store.commit('setRecursiveState', {key: "sources.funkwhale.appCredentials", suffix: this.domain, value: appData}) + let params = `response_type=code&scope=${encodeURIComponent(SCOPES)}&redirect_uri=${redirectUri}&state=${this.domain}&client_id=${appData.client_id}` + const authorizeUrl = `${instanceUrl}authorize?${params}` + console.log('Redirecting user...', authorizeUrl) + window.location = authorizeUrl + } + } +} +</script> diff --git a/src/components/Suggestions.vue b/src/components/Suggestions.vue index 241550e..422106c 100644 --- a/src/components/Suggestions.vue +++ b/src/components/Suggestions.vue @@ -43,8 +43,11 @@ <div v-if="isLoading" class="progress"> <div class="indeterminate"></div> </div> - <p> - {{ filteredSuggestions.length }} profiles found with retribute information ({{ allSuggestions.length }} in total) + <p v-if="filters.retributeOnly"> + {{ filteredSuggestions.length }} profiles found with retribute information (<a @click.prevent="filters.retributeOnly = null">show all {{ allSuggestions.length }} profiles</a>) + </p> + <p v-else> + {{ filteredSuggestions.length }} profiles found (<a @click.prevent="filters.retributeOnly = true">restrict to profiles with retribute information</a>) </p> <ul class="collection"> <li class="collection-item avatar" v-for="suggestion in filteredSuggestions" :key="suggestion.fullId"> @@ -97,7 +100,7 @@ export default { retributeProfiles: this.$store.state.cache.retributeProfiles || {}, loadingRetributeProfiles: [], filters: { - retributeOnly: true, + retributeOnly: null, providers: [], }, providers: this.$store.state.cache.providers || [] diff --git a/src/sources/funkwhale.js b/src/sources/funkwhale.js new file mode 100644 index 0000000..dd65091 --- /dev/null +++ b/src/sources/funkwhale.js @@ -0,0 +1,174 @@ +import axios from 'axios' +import moment from 'moment' +import Form from '../components/FunkwhaleForm.vue' +import get from 'lodash/get' + +import {getAbsoluteUrl} from "@/utils" + +export const SCOPES = "read:profile read:listenings" + +export function listeningsToRetribute (listenings, cache) { + if (!cache.profiles) { + cache.profiles = {} + } + listenings.forEach(f => { + let mbid = f.track.artist.mbid + if (!mbid) { + return + } + const profileId = `musicbrainz:${mbid}` + if (cache.profiles[profileId]) { + cache.profiles[profileId].weight += 1 + } else { + cache.profiles[profileId] = {weight: 1} + } + }); + return cache +} + +export async function createApp(ax, {baseUrl}) { + const payload = { + name: `Retribute ${window.location.hostname}`, + website: baseUrl, + scopes: SCOPES, + redirect_uris: `${baseUrl}/connect/funkwhale/callback` + } + const response = await ax.post('/api/v1/oauth/apps/', payload) + return response +} + + +export default { + id: "funkwhale", + label: "Funkwhale", + url: "https://funkwhale.audio", + description: "Funkwhale servers", + extendedDescription: "Receive suggestions based on your listening history", + imageBackground: "grey lighten-5", + form: Form, + getLogo () { + return require("../assets/sources/funkwhale-logo.png") + }, + authDataToKey ({username, domain}) { + return `funkwhale ${domain} ${username}` + }, + getAvatar (data) { + + if (!data.raw || !data.raw.avatar) { + return null + } + let url = data.raw.avatar.small_square_crop + return getAbsoluteUrl(`https://${data.domain}`, url) + }, + getDisplayName ({username, domain}) { + return `${username}@${domain}` + }, + async handleCallback({query, router, store, baseUrl}) { + const domain = query.state + console.log(`Received connect callback for funkwhale domain ${domain}`) + console.log('Fetching token...') + const app = store.state.sources.funkwhale.appCredentials[domain] + const ax = axios.create() + const payload = { + client_id: app.client_id, + client_secret: app.client_secret, + grant_type: "authorization_code", + code: query.code, + redirect_uri: `${baseUrl}/connect/funkwhale/callback` + } + let data = new FormData() + Object.entries(payload).forEach((e) => { + data.set(e[0], e[1]) + }) + const response = await ax.post(`https://${domain}/api/v1/oauth/token/`, data, {headers: {'Content-Type': 'multipart/form-data'}}) + const token = response.data.access_token + const client = axios.create({ + baseURL: `https://${domain}`, + headers: {'Authorization': `Bearer ${token}`}, + }) + const accountResponse = await client.get('/api/v1/users/users/me/') + const username = `${accountResponse.data.username}@${domain}` + store.commit('setRecursiveState', {key: "sources.funkwhale.appTokens", suffix: username, value: response.data}) + store.commit('addAccount', {source: 'funkwhale', raw: accountResponse.data, username: accountResponse.data.username, domain}) + router.push({path: '/'}) + }, + async fetch ({account, store, results, maxDays}) { + results.status = `Fetching listenings...` + const token = store.state.sources.funkwhale.appTokens[`${account.username}@${account.domain}`].access_token + const client = axios.create({ + baseURL: `https://${account.domain}`, + headers: {'Authorization': `Bearer ${token}`}, + }) + const dateLimit = moment().subtract(maxDays, 'days') + let url = null + let handledListenings = 0 + // results.progress = 0 + // results.progressCount + results.accounts = {} + let cont = true + while (cont) { + let response + if (!url) { + response = await client.get('/api/v1/history/listenings/', {params: {page_size: 100, username: account.username, domain: account.domain}}) + } else { + response = await client.get(url) + } + response.data.results.forEach((l) => { + let date = moment(l.creation_date) + if (date.isBefore(dateLimit)) { + cont = false + return + } + if (account.username != l.user.username) { + // we don't have a ?user= filter on this API, so we exclude listenings by hand :s + return + } + + + handledListenings += 1 + results.progressCount += 1 + let artist = l.track.artist + if (!artist.mbid) { + return + } + let artistId = `musicbrainz:${artist.mbid}` + if (results.accounts[artistId]) { + results.accounts[artistId].weight += 1 + let detail = get(results.accounts[artistId], 'detail', {}) + let mastodonDetail = get(detail, 'funkwhale', {listenings: 0}) + mastodonDetail.listenings += 1 + } else { + results.accounts[artistId] = { + weight: 1, + source: 'musicbrainz', + id: artistId, + avatar: null, + name: artist.name, + url: `https://musicbrainz.org/artist/${artist.mbid}`, + detail: { + funkwhale: { + listenings: 1 + } + } + } + } + // results.progress = Math.min(100, handledListenings / maxFavorites * 100) + }) + if (response.data.next) { + url = response.data.next + } else { + break + } + results.status = `Fetched ${handledListenings} listenings` + } + results.isLoading = false + return results + }, + getDetailMessage (detail) { + if (!detail) { + return + } + let listenings = detail.listenings || 0 + return `Funkwhale: ${listenings} listenings` + } +} diff --git a/src/sources/index.js b/src/sources/index.js index 43e6b9f..299f3ab 100644 --- a/src/sources/index.js +++ b/src/sources/index.js @@ -1,4 +1,5 @@ import Mastodon from "./mastodon" +import Funkwhale from "./funkwhale" import sortBy from "lodash/sortBy" @@ -7,6 +8,7 @@ export default { return sortBy(Object.values(this.sources), ["id"]) }, sources: { + funkwhale: Funkwhale, mastodon: Mastodon } } diff --git a/src/utils.js b/src/utils.js index 0351fbd..633721e 100644 --- a/src/utils.js +++ b/src/utils.js @@ -11,3 +11,14 @@ export function getBaseUrl (windowUrl, currentPath) { } return url } + +export function getAbsoluteUrl (base, relative) { + if (relative.startsWith('http')) { + return relative + } + if (base.endsWith('/') && relative.startsWith('/')) { + relative = relative.slice(1) + } + + return base + relative +} -- GitLab