From b5c69dd89aeb47e1a8a2ddc5e4fbafa37e2adf24 Mon Sep 17 00:00:00 2001 From: shivasiddharth Date: Sat, 13 Nov 2021 19:42:18 +0530 Subject: [PATCH 1/8] Add Pics Added pics for README --- README.md | 2 ++ images/Banner.jpg | Bin 0 -> 130119 bytes images/Key_Error.png | Bin 0 -> 114274 bytes images/Remote-connection.png | Bin 0 -> 87268 bytes images/Streaming-Server-Link.png | Bin 0 -> 87385 bytes 5 files changed, 2 insertions(+) create mode 100644 images/Banner.jpg create mode 100644 images/Key_Error.png create mode 100644 images/Remote-connection.png create mode 100644 images/Streaming-Server-Link.png diff --git a/README.md b/README.md index 18dd3cc..56e757a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ ## **If you like the work and if you would like to get me a :coffee: :smile:** [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7GH3YDCHZ36QN) + + # Stremio-RaspberryPi ## Steps to run Stremio in Raspberry Pi diff --git a/images/Banner.jpg b/images/Banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d8d7ba112b214e0540aaefd33ae84a37d385b9a GIT binary patch literal 130119 zcmeFZcTgKy*EcAS111?`avmF#bB=~F7_fweOwPy#lat8;1e&qQaY(}Cu|XC|U~+~5 z5llAOh%8KwB8ntd^X%61?OU~5_0{)nJ@5YER$X05eY;!dcK7+6^E>DC_4n&Vz%Rf?cYi_MHo19&9`FnOjhpm0t~&ud$S zk7aDV-%(OAv#_$U^YIG^3JJ@~$tx%-DQiB{($;wn1Q{9`o0yuJTiCs^cW`uacJcA` z^ACUp2E7jpkBE$lj!8~QO+%)C$jJPZUx50IE-Wgptg5c5t*dWn?7((*b@zPj?He5% zpO~EbK8;(#FaKCsU0dJSBpe(b9iN;M&(8mm>jvQFzo+c~Q7-Z%-1z0zt(&(f{*mj( zF9GCslm6E2hf;SQJk_Uo?Zxm&`j5Me8c823+9`Qu4EC99y+^2+AImQB5&jYFUy}XL z3HI)PNwR+n_CMsp0cdXCAfLRO^Z<1LNnz{wX0{;UuU~$r0{rZLPQlNs;OC9-Qy2VH zhd&YFCmQ}l!=GsQ6Agc&;ZHRDiH1MX@FyDnM8ltG_!A9(qTx?8{E3D?(eNi4{{I#Y zZzfy?BcO=B-#PnCZ=DXQ(_I6s*-z-kU%z3U8^4-YSL>PC(i^V2h;*F3!u~Gs*Pxim z`fpFUv;cenM!?G(zuo@X{l82B6GjaZ2*F^k0=Av?q|(l+Ynn*!Ke+b{PSur3UA9qq z(%s%ehg47E)QL|9QB-der2`P7qgTfl@olt3M=JudrGRLM4YFRXz-*a%nVC5wfvbZ7 zqNR#b%PaBn5t+**GtJd&z%Xe0@7E=EQnDKc@823!<1EE$#->94{PO*UwtehJP~78X zHVb#L2Ohoat;;7_e?#{n<&j7pNgBSb zx^PFL5`OO;w`9{kB5oU)HHbWXKKX8M5bmYGWFc?WhM5Yt`w`2c6c<2P*AhB?cBm_(zp} zk0HCkj+4#KV6-DwEA-=HFi@dy>Zn!s3vNh%rM9l^&k2Rw0Vi!>^#S4E{`>HUGXIZU z`COp8==O3Zbzlvb-g!T86oYPHkgGP$tVMe{f1YmnT9<8!nHcBykDe6UE-*26HTcLK zH1QCmV&kpfv|ZkGU}^_!NxGNs^Ktz|fjt+6AHI{N^89kzP@9k!b_pzg@%)iUFc-_y z$-QHa{*nw0%kEoJ(=$L}Nb&qeqi=x1$)(}o0a3%yENVD?TVvNdgwYU0ssno9G=HSK za@$LEx83bw8n_RW=?q9IO{a7&*2Q1RfMcA(62v^jeIM_K7N1ng+E~t-ci~lP62OEW z#G@T#b7W`o>gn6ql&a$Kyg@_fAoH0fiKKu4QX8gU=F)m!mU(~B-5%d!veg^A!|ry1 z)BXccpTx%?syq;s7;XJmP0H6~B_2(4iK)RqK8+>xXO6;kAk*`?+@X^vE7|E)Ht>;C z)J8v#ez5wJdv?!=J-;-M5EC_#W~-TV?t8MjopmAd3qw4vNOyS>b=u@-<{wwNb8_xC zX!=xVP}*lo8(vI)5(}?4KnmA@biKF9(37KLeiDdenV973d47>_vW!>2Zn*}lwBxB~ z)_3PR8$ELVny+p8+*1dK6h19#P5Ud|gBSTkqOj_EFXNKSh2%;Z zA9#fntjO_P-tHfoVd#~R*!tnV&c6E|U%<1U=<;QL{wzSI_v0`p(&DP6r6H$3i!!yn z@Jm%)*2_jH9n>{xqgD#&Rix|8&Ro{a@A|&0^*OjBAD3hFQ3w%^7VJF}QVOK(!UP;C zZ#2u{RebA_%fC%7CJd=7?*gk!){`fB(ogH|?F+Z_4791DOjm6JnQ$crsSUg)+33p{ zFYjx>--d0AB5K3CQX)_P@4D&E77W_iySlf(+t~W-(P{`z`>$4TgOQhNLmjsjA76ZD zd6>u}NjK$`OpI24lJV!&YA?gsbkfaW(#@)E(sK9|+PZUDU-#cC zbve1&=kF|zwfgQ4iFfx*r-Gf~xSC6tA$b|H$7WqPnr z@_5DDwOC6~VP(@%qSG@H3t>;q{k6FtEQL7C+Tbm4rzu_LT_Ttx{ZupQ3;~_GR9ZVluq7Rf2)V&! zC(oZbd&qHcv^d$gn0gDTy9A3Fa6Rgtf&kNhnO8ar0b`>0fgbIDAM$mYqaplE_{BNKH9wolqZe%69U?KUS;ArAdK-ZqTbYv{HPkW=wz|=5c5!d)>!J3 zSXK6bdc9eE!Ho=_{CReHRppj=Wt$SR<+vE@2TzQc$Ajl7-_6TxMiCaD%TlTuT{h1*@^^EGH3Io& z4z2;xN)MCyBD8OOY>cw9uzI#3huJ9sJ_ZKZ`B6Wq*~w01jHR6`t+E7H#2M7Hm8~0v zKQ9`~cBH8O$S2sQo%I4N*Z8RT{(pykaO3S?H{15}PB@4y*MP+*dLde-m41(YPvkTri(?o0DSg0`+7S)i6f-V7fD_ zgiZDC^Ak3Hms(O-uV#&DTL^hVx1eYmCV6JBoaU-6Zk)<#Y4N${*aCOqY`1073*YtT z-0h6?`5;-y*?Vax=yf$e=ejKfP%iMKcYivEwNEl8 zhjBKi&g0|~bAGH!a}9Xd;b;~L>kx*)nwmTZPZ8LlykXC7$a|6`k#Ct}_ztYKE7=Kw zDA#WwcCHU;5-u zn#)m9U1jz%OSz>&aNxFzLM6hh3x@8Q=h;VPySvM$<8%C1ja|X=Sfhvwt?HV0uh*=% zaL9PyRpTb7`M%+2qsP=>kQr{xxM|!sI5>n~f<90w!4GmTpGE{_Q!sHhp1Lt+DRQ75 z1{xtaE(4wY{M0h%*}v2^WUPSIAa{tC(3&dKnTuHSOUnXcq~U?7 zXYWb82L37XYH8MWZ6(`5I^Z0enEF~z8#dN)D*IHpt!(9TB3N)^zAdg_*H02#Q6`-G(0-uq!lL) zL^CdyKRj@^oAS=r8Tj zFon*A2eQ!cNb5{4b!`GP=BWRo?T)3(lys@d7h<{5XzsGX{(OpRT#|glz1ULR_pe*> zXs(3pbmj2Yz@gVMefvxm->u5&v#u<}F>cIMD8c1o{dXRo6rd)w4ug%5j}D#i5udRD zyFrdAm0?^z3-o4KN$kfz%0Dzxju(Y>^ksI9qZnuB*_lv!IYA>J!bjn1l)klLYO%Lr z-UO7VZ80OSmS=m%F|dq?UWy}$@4Lr&%Jn3uvCi>uz(T3b+MOjlcS`?y--#2?W4F~A zm)oOr_6L=!k4m#jbibX7<)rPB6I$9=>Xd|?$7?HjxKpI#SLC;g#{4Wh@WOSUP~n|Z zxruWXhioiSaG_3ya2jq$8Z~Lpv{ycNo0<8BJslyqHanZoq*d-3XQ!h|rM+qNi4eha z$8WKXbM}&+pq*5BX+iX)VgKB+pVC>_c)KU+QVt>e#mv=)g7Bu!(CKt4Xf!Rrol3ul&GYT@g{QZa&L$FdMg>Dz#$SC|)L zQD5GklW9k@Rk7ei*q5W0bk%cMZ0r{+vFN|A0d6lbx}pP**9`{+LrJ+jOt%Mx%?4C$ zOAOJ<0Y%znT((wc!ri__7jjCMX#CzySl!Y!AXZNOChP)xUiS`e{0SPbVmYD;M$bD3 zMWiT+9NOT(6gU$G2GoF$7EP~@3t`rR4UgnURJ7aen5mV{4w~6 zZ?g0BXJlLFLO2h-+C5kbiC#V0hH3m#1Ov2lE-~u~s?fD7U2hBv^~fnBB2250Ye2%C z@WQT(elADtmew(kcl8k~I3*^pzN)w?m5wVP;corzm+=;}_XHO2G^kz6 z!2q%_`e>7*{LO#$U1O^mP0#I&Z|6fd86XTmqa3zI_d^2=$g0N41pT=9WjV-Z2PF5J z>dzpM;Np%)S*eHno?DqfbyIb&NS1Ds`J1|i+J-tmBu8u@{tc3CDaqhDDt_|$obgE7 z?{XWT$H3OIyO|@OYn@M3ARjLU2$qoXZBqZT%GaYEiy^_}C&AkRK9*Z=MM^abvPXeK#3h5HSk*Q*fAiC&b-)eg?eONx+n> zhjJtD!ZpjBGi9fw*bHz>yPlqSLmC!IjyVaP+VNv+ISF@d9W{=?nA;t?Bl1-OXXA>G5){#xjX#mapWSQ)Wl@1nc4U!Yx=vHGqv-A6`guA z5{A47>ga#(u#@sFvXgnC(XsMf<(YNPIbju5flm7iRo~vZS{Gs(~1V#!FNbSY>mn27TalkK4z4 zR_pr|Mfsj^S&Y`nmg3MLO69cTUV&avs(^t%yu#nHB6J*4S#u58F2^t2gYyy8ejh5cOGg_AGfPe3(-hDA~N$1auc(m>pk zaxJkz2cXgiXrV51Fg7zYPdaS#sZhV8H4#F9bdb1e2#DxbcKC1mdtrMXyw#Ni?WV;A z`VDTbrp64KBuk4ei-;`G&$Cv#>{UH9rV_k=i543%SP|jNLS1;5SNj>Ctz)_kVsotc zc{n04(db*FK1CX7=Eh-$&PpI5YgBL*yHdnW1`8NmO@#tVucta8sNXqKVv+5UF1w-O zoo(lzw!&C8I+p~4;7#M;OzuyRe-uvhrFFG8xpG0VBu;`{ssfl@Q*I(BFS1=<^vx_FEIX|Wc}w*6|3x= zpWI~?8jRi?x07gmt|xSKQT-$m8!EQH5F>kG`9TgWp)sz&VXga|z}=F+p^e)BOb6H( zx%h1O2SubK*ci0+XJE_Y`h25q&qq7{G ze?UUn6HBndJ+UWpkn{14=6B!vecYcUdX}`U%7KksGo}U3&~Lj#t^wakC&6R}2Z3?k)vC^0y9V6aOyH(BjUy|g zNE_(H;5FbL%+8XKP=_Kyv5oGNRi#@2(ROy|Y5t3>4HS^76GL`Yd0%+c*Yj+CoY$Ez zo0YdVko!P{v z>Pa;rSERlUW{WD+@?sdrjiHIO~#QWIk1y@QGzlXj7g=3euJ-%`75LVcLbUVvum-CK)akVw7dr#zjK_YO0m96C_K>m#lBIB0;<4YsbgofF z>Y5Wj&f~;l{%Y#@K+RNcDQ}00A@iLFa1&qd9@Kgb2+%y+Cid*dcJtg(bqrj*2C$lM zBPjx9b3CX$<*}U>CZ^lC@RlCe-|5cn+b)}`zZ|IcT|!iPUG2X|%CWe_x9LKkwITwE z6!(8H9b|*g_*@dK)zkZ}-2#)ZTj3B_zy>kKNi5dn6;VX z2k7*4RQXy+tG%!X)!t5MCgQ_?oH)7du4x#nIqDZ58f?-W`D_f;!c3%POi$6hla-Ib z2maZd>AIDE{wCVGX8}&f9dPHMMfBl>Tx?(44MAmAGb}O=mS5lb4bY+>M$%497Er2(DQMT z46`j;5t7emMU}W0AXjsG$T0@)>AqJ@`#P~Zj$E(n_b01v8sDJ0Jx`nfT{DIDieVNd<_V@(B9{z4)ziy>tMlA*^=kg)T2pYAJo=VW66fadllyZ zA@n@vy-QmHtg0&;j3w*T&F)3D0cjF6t#&MUWWip|q-ts;> zFduTf)x)!|LDnD(o&HsHl$&kLtz4TNkZFg}X7ktO8@>FJpLelc%KRmPK6f|m>L#`y z3$WJf|B0aKZ%u;xg=dF0MSML}Hnk#@yvKx>PC*?_DWlPP4?@-=i)%u6Coj`)FMBe- zOg^9I5$YLhTs6d+U?=KMggo7kV!JiW$ z%kB!gDO&qYu+R(asXw_WRgh*tFQ)hKomZiz zk-t21~ko?|d!DzT8s$P*hnW+}czuYSF)ynSoAuqi! zHzWg#MA=fH>2x?Jq}s@Eb6wehL^#%tE-;4$Ymds(O7SIvza90{@<4!VnVWAa#>5^~ zRs+jCxPiNTX1~S(RS#6h6s4bUZx4h@FhrHacA9pXI8Sy?mP8dVGu>@WLkp*Pg&D*d zre^8KfJB}p>-3wJ8#36`J}S{GdxQZ^aN2�af{A>Bpy%=j&54(5YIrryWss+U^;t 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

Yo>!zQFQFr=Pz_IZs)d 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%0Dta;yahOZoa+WM3Lpd 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%0A2~-!Fyot zwrn*fBmvC~R-Wl&o)BOT`gFB#{AX|4VM2?mEs9Uhsy*PaX0&wc3qZWSHE)tbja$6a zc|#?o`o4%s0Y5`+z{^kp0dd&u<1NrgCC>|ek!-|9G&iUr!Q-#0tWelOZMQoHN7Y2! zvMlLV$v16c-3W8z9~UJY-Bs*gq9qhObY{1btyGYAKpR5htv+tI!=PHz$IUyBwKc1k zB75?OlxYctSg3}WT-2i>p3w!Y5Bj}TW-^uIqxRKn-y@xFn#-Y^P&I185i4e5SfhXh z3mXthrz`YNOifK4bW6FgvI#no;qRrs=I`}qB&QL+ARjDznFf#LpU|bcseH2e zNDmhe^Xf{ZvS3yP?Lpp(vgEPfTD;#kKKI2ZZ#T5GF>_b9m8XYlN&&G1kCdXFhb#K` zQtRWBNHcC2cM90MzS2F=a+L#$a(`Fqda)e7CDUz?N7*>=b7f@( zgd}>ekLC{z4TW8;pZDNLTZdnE7EREf#Q7qqRyX;+HdEP&j1Vgqgn+yFgM|UpCVIym0quO~ z^97Qb;`x0f?aZO4EmTOregeANS|A5VozD$iFTTe0H@WA`VBh?Os(ZHs3#7!3ek|U4 z=)x?t_43$0{*7)2gR84I&rDajwpPm=@G)0@oGiDj`n*Kz5yt0^=2H`YpAkHs-uy-M z;6vM=vri6*X1eTswQJ@X>135s_6KGxSAS+y9L}Kowt22i^*=egwe&{y@m+JlxE-U+ zU`->r2&?SF8>ML=8DtEfn|p#``Q47w-{q(rwV-#uIMWYNBB_xcZvA{Ne)vw01svxG zve*IFcY*EMdXN3dU3XMBZ*IDPX0qfiEIRjggsJQGtDn9o1%JJ5-s}%17*b~r`QmEHrv{4CYdYaSv)o)5VIozqgf)XJvR!_k}8ZaG&mO|ENtV z%5dI@ls-$mtuw&r&Gj7!C7^zO)C0CBe%#l5dI%|m)iAcpQs{I@B?b^o^(W+c=7)|A z?40q^io;GfNc9W7B}hf5*Vwe_Vnp&KZXez&MIXED8enF=oN(qKGM3;Os^f+FYy*$$i4QRRcbQ#tK~BRX2Zi0KEv>3T%4CPd_-P z%GGQ4Mn+f3yY6(*t=lNVEYk8;lEVr2H6b>ps0Z}G%}<*#yBDgIwB2!$t;#o}qrNZ- zBqm7BQlvGMNl5zkRlR}_@?8bC0#qR($tSzfGL`@s+9!Uwq_>`vXL41dM z#s-T$l!3tf4!}U1pjm_co{g3JIDpgC)C{;bUQ98xxaL13wAaQ2_7r6hy<2WGwdL;Z z?K0P(xBMb3{vBz;>fE3FkTW|m)|Ba5*;jv>t13=4gROH4^OU;1<++=_Onhjs|Es4< z_m^CK0Z5yo1cWX=lq7E0sJ_^APh*M0rxkb5a97d~s)mGwzy*Qf2-bv{WGB(P0wd~| zf+$&`Eki>bw*ARU)J)!Pk%7j`ZBdl>#z2X6{4X)MCtDzRa!We^DZ*y%pgKsz2i);+ z_uyaXOE<;*YJ}5X?c?S?SGM8C^?er1GLA|K4FOAfVb% z^V}P_Mej<&@H3@dGBs{VY46;NJ+c7vFo?#3(*5r5SOh54e;>U^(mK{sO|0W^Rw1i! zV#AVf`J!q38Vbw;9({3B=uz@#WbE)ic$M-k5=~ZuwV2u$LM;v+lq?IKX0dm!?8-}a zjboHCImnjdox%ZWa{gK1l$%Dj%jOonNwCtKs^Jff!=z+i9HbpqT?-)}CV+FM9x6{h z9*|3t;O`pF3B>M0NtRDQ>qU}J7Wt*f;8OVSRxNZ0FYbAz_3#ve_q7(Fhkk_ejUPIgb(8N- z`OiM$j(i)Xn4^~2pDUZ4Y%J}1NMHeBl$})dvCcQq6|jxpwsL=IYgxLL5VS7tp{Htr z^^<9YRlKOx`+cB&jg%MENDkXuMd{OgrXt>?K1Ywz8g{3|wB|V*9p=LclNKv!OI=8%jFDsX2S#)cc+)2-xmh60P?z?(}T)#FHJ873_tPyH1>~fxnmD zE{WPjU&7+hfP1?Ke1-O+V>J&`z1N5lhez!4>vHe|Y%4RY$>Pt;IP>;dnt^#-?Iy@9A)9BTbpSL=-wvxk~LBSHK&g3(9fC;u2W9cf;-mRgq?KF-ddo)71llBVoq%$-#102YRbc_^p7b2b0wZI7c<4FWZ-(uVi|Z2JV5y?ASWY+5&*XphO4 z?BRg>a|T5X02>l0RKij^mz0*v{BA8`X_^-{R>JupTQMAb7hy^wY0c2SFu62F`+h7@ z_v{bk&hk~A?UpFSRA4)TUQ=Q(D@7yazxv2q@^F5J z{E>#m>@ei%11@yQ1V3h105(g1;qazck`(JHdQ@@EG{VxkpdECIDxkP0hCGPywO}Ag zH7&PA&VWG8sdjGLY`iBb?XYR?PdgIata4Vzc1FnP44 z2!4bd%FC-v=21hGLAtgf>%mzA3JsAp8ndvIgXdWs26G2(AeUKUZq;*{=vb?0#aGpz zP*w*ZWPGwnoq9@z{6qwcv?r&y@>-(Br%WKLo;fq+(S!;lfLr%KR6kE+fn6pER^TGs z>ouJxS^V!lrUc7~JB_Q(QyQ~S>ha{ta-~k%1{sVc$#oCHIk{+oV3y1r2|W? zyB=HGqV{q7GhLO=qqT2`DSHNNooTF|ojM4Ye!I0n#UR-0))q3cYU{J_Edr)fulzej z2C#{o^G(UR206W$iwzDa;USm9$0zFbycTb8~agN1S3t*_ldb!_-8% zI_43l9oJAFDd{ac=hRrezX05|bM%T0+uuC?jMRZ;DRo~`L|3j)Ja{GxBXyT*_q^#+ z=DXawVidZfL7A^bUN=5=^M&P6c1=#T;FSYU)jAkz|2I(cd3#dCEh5?Mlw}}81Uuu^Fro^DjSetNq`S;DIXXb==NhyvUv@9|K6Nq!h zm6WBk-o7x9wEP6)s#ym!di_ShwOcRa+13++2Sk!;3EZ$$zi&zF!1(+f1#|KQjc~>aUxRY%8*A#1|jXOC>ho7xB*7uS^cwokI z%ic+hWOqN)B;2j#bKTw`!cmLE8Mdz}{gcng4yaRh;GRrbW2$W7K~lHb{#?jkwYk!^ zH7-TMG}NGIyg;KTb#D4_ZM;G!bI`qh?up28KnWq{t8cb*?Xi3ZQmO3&vh`&9JD4(B>TU`9d<^7Yc^sfLW<#;Ef`rkZs z%AaQ{+N?C6lEte>s)EF8(%uJ&m_YZFtoQD~pVu9ZeVgwQ>X8{pvi++#{+v$o*wlCm zG{&PB!wy$itEF2ft`*(~*DPrmc4V$rX8ZJ z@4qwN<2?PrC*UOW8iuXAE6|lZK-OTMF1BjS*#d&C_J5|p0K2nwIaiYw=M5BJKz+dE zjG=&;Y8U!>=O4<2ap2t$2OeC#0JG|ty-IIDYyPa=_6aooy|MS#m-X>ht ze`>IawCRWdWD(Ts8WmPp~FKq}fc>2~L@)L2Ae;rh`)Ui-$@ap*j=0Lsm|Fu-SdfTq%>)+@LA<{=n-#e#^DF9=i6# z@e}saV_Z))yH8lk$-!_a&fbW(Qe$VQC8(-FMfP9=6zBdg1p0KmYnaLov;F{1*IT_j z^1f6_)Oo7L3>%rY<$L<7LmA_(Vbq?4dk~QS#&sc^{tHPo2l9M_%eeucT81t%Xi3IB z7*$n5B$0zlif5|sHt&8)j=6R2f&AvKE1KEtr%BDmAn0^SPFU#+rV+fCV#1zUP-&-sB5PRz$=`8^XinbI#DqI1)oe{$9X&dPdYB72fM3RSJJI{r zy}%xO`eJJYOvEu!wqdz|?=WM~go;0^~(_ZDS@F;lO}`w-*XQ*q|r=>S>fR1MgbFY(RZPxZjuBGk{- zfyEntGdRyIQmu4GF8>OlPfay?!nYWgyPm&JK&;3qxbjxi+fS+DG{q|@xpg}Tji#FPeLh!vbhM`V2&#C7rI13HzXl$ z?X>!>>l}AK85~o)6@yoF?2(D!ZJY@u?d;3qN&m_sJ2L?9;l2Oh0Xf(EIz)8CYk^^m?Vo8OYQFIvZjV+s3^;uViUqftNy~gvVE|OU6hb>dSuwNQ zc{>hPC;2EZNHkI?1GvPF^gvq zj6UX0B)x37$qaHoa5fkeiU?X8WuG}O?!p`}@sPbLUw7c5NW(=n`u$63(n08ElL?&Q zdxs^iJYrRKkVCu#F-gl%q*~_&lY;9`;aG{ny5);B_=}R{slsGW#s2pK?IrP30+ZX? z;L|X$Iv6zuL0!?wUj{RuT##Ogqz6c>zNZiFaE}Y?6ojZtf0 z%yV{qDuu>mcq?WB?Pa}&n{Z$%_8WH)Qs5!22VT_S(qNgcQa1+*Ax-67(7MGZW0dlD zI9aaJcB>+NgaZatI$t%&zDmb?b!^&;YWMmEz+hyE4~^%yE@3Y|P_?*nh53n(&B818 ze=WSX*%ZcsgzFK)X?_91i1?o$Y2uvskP8}UmA(biQNVCD^BxpHNO_a@y6%+lK5EOc(SOLJ1Tv;eI7B8pPRi;TO@PDcn3DrgXaG(=`}RQqOKn-`3Cz zVWURbs1z7Wy!Y1e>G|AW`;R_S$1z;pQjOtpx$f@)pPR1R{j>yi3B-J(Zb47!hT-h8 z*rf=2d}PUH^Frgx+z}jNe51a;HAC~rHpqklAit!9b+mkD^E@u~o+Q)MZS!T~{Wf`8 z#~TYZyI*c99qZebA&XMlU@9hbQ0xv$qV3R(AR^4`GgKyX<3_Nmp_WHsvbogpUL99! zu7GJZZkh3?)&hHt*^>kyK9O_4WyYUZ;riFZ1OM8Mn&i}41>d$xX8knZdoJAO3;TG% zv=?FBhO|>Lm~4GLAtytxhpJA96$r!@Ip(;1meP=^bqG6=5++8~6=@=Y?RnkgSC(AD zTZYfFzvX@P$kik!`QDZKbqN};{@3M)D^ebqeiqhLnekeE!`Fm(frD-Huh&y`Q~gAU?DgV0Le{_Vh@iK-`zh(iHf81j9}Y!;{Zgo_Kt`2B4bhM%j6XDCbb?%m5@hv$n)Awes^%Z)7ch>b|! zR7ZPQ>6yzd5_wCB!&0E+88gS30sMhk1KMQ2HN!r1bQs?8#(bPbKWF;$4@5w==Q4;% zDD8&&LNaOjgGwFbB!X7Pr%D#OgHpQ+Aj>!$j9FRi8_$DaCN-E=)GBxxP#)vCbCz+OJS7^I>iZfyzRC z(~zhINiz%|jH${mwXq-+Px{QI>-4+7cl6UMD(}UGfS$;khC1X^rms#;?^|VrDs@Sv|W7;=qh(o#; zG7+CMro}I6uuXCOXk4}v49gt2VM+L$kE9*oHl28>W5H~Z2Gq9P;r!j;iO)5o$fkpv zQM3ctiRJ2{j`e=iC$haj&3}-wR?7BdcPfWWl5Xfuj7=%4>A6eeMbjn|9eE-+bt^gM z?pS+=FLq5oS+4$CGU`Z$N&}z8UkkjSQ>qolxO2{Ls3)RGiBk0T&v^Nu!?*vl<;5z? zK9d)g17qa1Lm{iMr5xek{Y6ce8IA6nyyay@b={w@S1T>nvx*-f7&A*8)Wz}V=J+0? zRBrf`pwg3Y;{ROij4Z%=`aU}(uCm}?2i`G_P&SMRFn6z^b@3Y$wN5&+NgJTK z=R?Tp>wPp`$8m!HrdQD@58OXZE5LjQ{Jo!dFtJ)$JuSTf?ts12k7|*98a?_^J{3ci z;ccf?_4tB``O%t|(ZxYI3+v0{c8qfkL&2n}8XIDL;=6-<3IDYZXepGO{W-rkUSMvM z{L+)7ibrV})%hBoak^pwtSpzJ9r+f!=w9sM6M+$Y!W_Y|Yq4Sf^0kO5^S?j82!2Dg z%Wv!w>aQMtcFRCFaWY`E;2_T*d@^Qd@pZMV_Cv4~Q*K~0RL>m_$TI%D0cegIInqf@ zYULaA5fv?%MY~W~rp!R;m(f?|trDNdPm3Z4bMWu)-r|lG06a<~%uqF{vHI5&gDzR$ zy~tq5z-HlKklBP{CLvVWBR)%-Wj|$wk!`Zq=Nu;d-xCVS{}p8vS99hruIemoIje4@>K{XG5`JpM78PA>rG{DzCrq_2LUJ>&70k zDGtX@`bJlR8UvwV7WG`xBwLx=%xWVS;k!n*pJ4oufMMcyiKEdwqK9)0aXwUkq*6oR z<*O5WM-=K8sgJuTVLJbF=sn4!F^7qJUc#9JY7Y$hH}y0dI50mLtqgiM8J&Fc5eAcG z)*>gmxLaE8`-M`Am2JerFW|(|MwhXbk~X<(fmZ$PnfkquCeLXD83!7>C*C%b=^R!P z%H34=t+L}%6o0jQ_s+SWu4_p%igG)|RJMPw?g<`0*mpT-Nz4vvm30?osdQ0S%+K^4 zV{Z1>Px~@&iE*WMl5!zr>4USKw6hvrE};$`WZTiI1N*26yZ>7Ray)?mQV>YaKK^?O zG8l>67UI`1Nb{Z^vLPAcAE?2RwsSsktu@nMMzV4SBW{JZK7vjvwIl4Cb4)}I$CE$g z1I2GIkH<);|G$noY)IZel_P;>5e*3sRvM4T7CJeuXg0_4(_cRvz)Sn#UpG56-W5Mh zcM|NlEK#eh26W0ZW9#Y%(5g3j2aw+DSo+02yQoI}$(vJ^LE=hteUFRttgoUQK%&Lt z<;ORBP6dC!X+-iVAr{60EY&LxithN9c*{XncE%37u++3sn5JtmLAyTbd~g=5bv-%M z>1ydNG}4kixcW0_##briegL27ByhZc37J)V8R>I`OIkW9IZcR$-p9WoxDJ%zb6N z@5EiVl#M^vk=jYl-uNTydHGpJPVP=xXH$sgre#-cI14gP2q@31(wI!k6wV$NRv#ck zNUMa&`nzs;C)dI!m)*xejO)pnme?*2bbpGJw5(4NsJJWxy{B|{qAw9Q!EtWifuE<#;lb(`5KPn>7p!>qaw6`+#q4J6Q71gV^CUwwJ}u=5l)tVaK)UhS?~0;;K=voNLznu>@Q~^9ms0btwo4{W0&|c zDq|?Jvl$z&Kjy$FUkS3$;A9@kWJZI(>Ee4v6O$JtaHT;&POZmY*ajH)}WS)`r3duH=9;$!F!-HB314c6KLvJ4OJ61SD%Rk5%ygxlta2KX=3~WC^a!Qtgr{Vd#ze*N-4~ee^2z=hKNcLae5I)@=>>+9TtHHX7zrX7R!sm9_(5sW~pime2O|p-!6sXSnEPI7br- z(L_8UQqhGAvJt$=B`wDc#FqPo$Ny3_90{1S6cV7(fb%deXyF4;^+~SHFOj#l&dB;kI_MooPgknj*Nyjo z51kL?cMPoz+{V4-RIGoZ5f1k@tB2@BICjNl*&4G&LOKt#t&G_kc(Kir6h%L9<+x(G zHvmTpMJovbDj13XFah`a{z3#w21=C^&sZsNp(5SzY_Z{9T;!w&9(GLZG2}J<^cRm9 zNu4CCDuXLN`)m(8I*#2&dp3`^hvioeNrhsL-%`j}Bfp4>O?* zEw1n~i7lRyG2J&Ft8(Hbys6Rg7h2roFeARb^=~30abRZQ!Nk9b3^K67X72hltnG52 zKdPw+K1bNVBVzy5H=zvQyS?;(D2dp%2;(ufSRoMduE5tDtOs#BkJ-KdA5jwZ=>JbB zi8bCF$^T~l8nlh)j|II?V=PaVcWkp#b1|67t^n2Ff|u3WJfaek!4 zEDg386K|gVswFBg-7Ms0+qFQ@c7+ME#Qdw-0gW9NZH`G&3rH}E|lP1Z|?g`uc#W|%WIah5W%L=zegBLj0tWuzjLv4 zGlB`drG9-;wzba9G54;tLmlLB-l(|qU!|Zr7>Orl`JUr76|3=D8&GoQ;!+DjFT^LVUb`Y>(cY7L}irWx(- zghFWLD-6pmh*qkI&vx(7?|Q2M$B(ySBdl+k{CTSo{F|N;o_|c~nH_#!#+vc}cf5GE zE)&N8-<#4d9)g`;zXDC`%yaRACz42@i*4;a32p<9HDgm_v0Ti|PSem>36wNcCO_AR zY}&C&u`ugND%|Yfn#r-uR;#-bX!W$O2Ct*PIWOb6^Q?=jIMA%k@uIjha6n5FSspO* z`y8ZEQ9`_G>#Ol-fXTwGjm94)%}_8X^5 zAFq+FC5?Ti^rk{2v#~STUcGYF^VU^OHYhYTpT3$&ACKipYBte?xNde5GQ8GRD(l1R z?^YGUbu^Lx8#9X&ERAcQ3kGX??CR3ewX8`YA+d zx-7DEr=qfEVRr5^@~fD1-G!@H1dexB-z&vcw;3t;fGeWXO%u2})EY}>oANuV->MCZ z2t;(st(*)C3((EQ_yAcHZj9Jo2$*t1%Yy-G3=r%76PG=RK#c@vs!~Pv=|7792lB^% zV;G%NL;I8ePYh#a4CG~Dx(=p4NyN7QtDt7#3;qD=%7K4=>rCosWs)AHh0ouCh~F=L z2MxcVqz(k+eM0ON`RcRR`KroT%f6v0riAZoOV-&RVJErfCybR|*#)G^lD}twyB}!zu-r@5!d&WFFq%4yRrmtx!23oqxmNYK~q7k!_8L*#s7zsz3D;6 zED4$Zb%QA54FL_|Bzn5??>y#hCTl5dH28H#Q&Hjq11@gc#6#q3e|Y+HKH^7L7d>(~ zeQkR;WT4uq7{ip#R#69-SsHg8Jzl$UaYYXD>~fL$zOjmZ&*Bm=rzdM{55g$HKIpk| z6k$@s;#ElYYt3-)-dmhKK0FS!*{-N+LT_kOIzGgOf!H_K?%kFRl7ZGa=)>=OkKk2{ zwSp?O$`9C!Ovg*3PG83W^ywm1C4GQ_*6e?0dGVud>O0zP(Y(Ht0l?|fz-b=TI7s7o`VGON|eiY8}VlSy*umn2}Gs zHhy#`evLKurrl+@&@n5}QA*0PQjjv*YY-m^qIlURV)c%0T0x8PmAiSj_RNL0c-U`d z^VxoR$7N;viS_OiZ;!0xdus6Q1^=Ik`6*xOKI2yn3eAE>+fu#P`(72B!LQSm%ho4` zn+uoP@;0gsR!YJsl=>(iOm3sO(O(sFzu!^};~?$gwVt6?KHqF8&QVOV^?dYJ>U#?& zJCe`#;1OJL)|1vr*t@OQr3L2|ifnk(5~D&NEG`f|G0`Igk4Tal`yXcaispL_Wq$J} z{ia#D#to^Nb%nQk4F$173R}6^^Pv1x8XHd<@0+z(<-IQT1=Nsz2qEiuP zdy~H3i>qfX6w&>g%nrno)Rv*Pxt^H^yTczHYZhGoC7HVkm=4M=_KQqROm01ITs=Mc zr>zgB6^1>HN{;)UrFiIW%7Oc5>qV4vj9+hYZ|L-vI&Y$tsBh8nj;>azi|PsU8g$GtPPWl` zFZ+VRfOo&W28bU(X2@Zt%{H{b8)y58e@ zUq4v)mmEsi1&>tM3BnftEAWY?y;9rBc?$B+Y<>;`ff*U(*C8e z!=y}8(wV^ko4M_t!JJMxZh+TZNwOgPM8qC#Bb@R;KM;>{R#RtfBx5aWQQO)9hK9jT zyNoDvn`RhWI>uuRf!iAlo9bM!d`o#2!mMegq?|j^6|1m#_qGZrGZ%z0qH2qn^XM_DSaUX2cgK2&1D%JP-M84@O5$WD-YxnoBXn`++->W<~EH z!nBV6i^*kuHoq|c;@5`{p^sX-+XeYMlTGN2->+i*?U<)~%8k%sG^ zvyfH>maN+I>}B&uRTTplL4(Sq0t?MfYnJiRUNMMzVW^Ts`jR@7N2t!0G}O#UQzt=9O$ONNp9J@?*7#(qoB?M!!`AxxIMFbc~P>(v^M;JEK zs-lDKJgOv4@3IHil8Q&cKZxghR)S(2c|jz-^QesuGWoKsc@yR{n24(^X_g>!Sm}G zDcxA?QfhA}GINbX-V@yiNCtIS2K^v*i`qj+8|BF-&-J>HidQ5Be17n=NQi5djRA6BeAKV?g?FpLd`c^%|4lt%jC4tKqS)nnO`y#+ z)%I;`eJ$8)R8>-an_KE|AcLmN>TRxfr7`|KU>)VSzV=-5piqAw=Ut^f@dH=(p7mBf zQhU15!5My+;!xYWI_y80z6v|#$MHMleUT6+%(m2aESqsueut(Gg5NdszbsU6u2lf1 zRlIH~e+MJLAN{zRCZBI|w)a;rd043>H~&aP`Y6>oTN5$#_6RZ%HADC6eHU>&uHQRb zX;N>{h^@e;88xbGM<7a-;=g^8XLt*dcHDe?l6*;imhlT~<5&3`k$^LVLSM-dP;`?kLiyWyUH`jOK)w}?ig^P zrCjb}wTH#mPjAfCo>#i+EJ6J@#q`nuH#_?R`R;_)FjzG}XpPo9F&JOat}0zq5^CR8 zB4nhw*@DMqQO#iWNB-<%VB|^Qhg|eR&~1V7(ifkNui|EaMDijVe3E_G?_U|w;%_8!vGF z7`ljOg9l*ByV1pR`tTgbfcKs7Yw3=9O)aZf8$c{ias^+dMK+(QM^gPZahbUJ=%qik zQ@VCaK1aN25PVRAx)2gLv8?ML_^s$B5pgy7<$EIqQ|gkGf^GQw_s0+2SZRQI*X}2q zskzqd-`fW32Vy&GJYlPeYuVWwJsUvi^TtqEX-G>y#>Q-#vHgeuKT1aHA~c}j)JNCxH2N<%;~?$L>tEQ z_75eK_~GMip4ES?JxLsm3A>L+&`vRbQ_{3|nqyK{M0IOaBT3W8e-&rUOMi$nnJ>&f#yWW`WDCe*dLcXdT4< z!sBj*hKP&q+ppabacN=aj0|cg@RmcP1F^Ua)~M=LOEXK8^?z2!p=3;Jg%BoYtXLGu zqrB|?32JMgWK&9?{D~|JnaUU>tt`xe3tcK`MJg7Kq!q^?vD5Y86SvF!k5;7fA9AlP z2dc$Lw!Hqs8^5al`lXajz8$*wNCqzZDxybuQ*@ck>mz?qWf+!ps`OkN)^Y|mMhVRc zGQ>rEt998|dJg6gCb!zRxv$yYz4q3v119&$2uum7XpApW1_uS;ij z;=BFQaNxfo-Dbg@`~w%r4LElUXZVn;y-^OviE~J;VDwY59|oBw>!Qg8F%?R=w4ceJ zjR^dPNgo`JEY5EFf!3}#TU)#;=J+%KdGl-)dt~%wP&UT^Be&nsEtNKbt{!6kZrZw+ z!6>4f33ImH2tRq%dL7y zFwwAiuF5Jij7|kYdyif!-{$&IZ%S1$nBlpM_KKXk%n1U{btIsPTHuIfpM}2f$}-&mu?8a$y;M(K5Gma%U_|RN$M@r=1#C8P@kM&H`!^S^m}I|sGeQaR1Bj6XPrE9- zy!Q8@pY$JxKHAXtcDd2=&_KpOC-b!-k|5%9im#pXz?FxBF||kwzU%I% zj)wu(9LNziy*ufEV*Kh+*m3%DdYuQ1<~68lS4Hze#ZP0uKRxJf*WWDv%z1eRSnO8l z0lmk0nU#h)kcr5`6QRczExIo^Uz9^Hh`nt735xdepswkR}=j}EBw zj6uT4aIWbx*)oriNKls!CjguvJ?+3GT{GiLs^enz}?ZLKbYuX4{S)J!J zdmw(&4SlP`4$zdK>JOZnk&t=y&T$!2$$pVMAt0 zc^)V|8M0hL%iW4oqm_%4+wF$Bg%Et64aC%-IZiR6<+de|n5hL)o8Ab~&r;p+f`=WO ztYISn2awJ_2q?PJzU>)9%UMS3gt{(7kf=6ceYCHy@`_nV0>jz7M}XxB7+smxwZGKO zYuE)@RcT{h=bnbR#0#j|hWT|LRkCO+Ur_f(`;L^;uq-h>UzTRYFHM%v_(i>AlgZiH z>rK#~r!$?$0*wy>PU|%=%*;)q`wAl&$OtD)2)S&J9&@Ei-EkCaKlX0FDcES7Y>`B? z0L*wz0?nFRoK|N#{lCy;wVs>p&c7}<^F%VRjy?1$LNni7l6$zJF22#_7LHbh(j(mY zjMu7Y2XQu=8BbnR4CC@vbet|>OV_ru#!h(7?`cb3NQ)_9y`w^}IpL=3)AExnQ=*Uf zw<30CpXh2{?((Ylv}}lWiOub0cr=B$Dvc&QxJ0nQT(EAt>Z*N+4NKg#Q-h(E3_vwi$wmm=ir9ReT(xJ)a{sa- z<|ywa@KRVn^M%zNtdb3QtO0sqijuNbK*(vB_(Fb>44=nhQk~UD#35$QZYPNpL(+9! zz$#WB8=xm)Q<}|q(XH6rI(t*LojvViFw5)9v2J;51I|7E3}+8X0!drm8|oqn@f3uI z!S#qB;c|wteuJ-j>-49OI+7|;!N(rm!>2H=39|c7 zHZa})5I-rp{>{$tP>*<`M)8cSX zac`7w13gbOwJGo~4@5~pyneWnUPB`7$^%)9xu|ZV8S7-j#yGTpXJyt0=VrA1+cBu_ zv#6`?4+bULjhgBYlykVGatRl#&akdXhW(9J0|B)Yx+zdQZBI3V<7z*O!91x=#qDN3DzUP)%GKZ&vSJPibP5y6+u{19j0;)xDz$rJF&wcZSd>$_9=X0PSK!`=6aX zQvsF%1)v@jH zds}fd!IU|5>t-n1TDVG{3~>WJbHdWmEsrLP)AwpPZpXZAP7BLli1@SYChdt z%~s3nB|8yZy`@i2429gv*!K`AR|XO7LEAZYaX8X+Dp!JJ)Vhpt$8`O>u%#}x2*%_C zUDFsdCXPX}ZgdJbLh~ynMfRLy83UY0Ktdk%SK`o<=!_A+~^b4!kJO z&e?>_2O@bcdiE{WW5Eb$3x7GN8mm7HE*4w{4%UCHaH(AWtC;Jzq2DcBE{0F=7D`l;vOkt-zIi{ui9szK8whscJ_IB!e{q;;97TP0{& zAOT_ASDQJZYSlN*ftIj)jI-QiAP`-4MCCY>vVM+{edqh<>SA`C)x+gqAKw&)tP^!K z#40|$!WEsM#6IJ0*?wue>kZhsL6tEF=aH6{`U&&tV-3cE=`3aJ)dGr<)-5W$R5Ej6 zL`kb-IuX;CrQ+uwjK4EuX&+xTD-Mj@h;~sZ18iQIH24Q#9?}rX$qyqh6&nki4?>5d zn#O`Ys^kiomYUPQ$#4<9bq*ZvQ*c2eb0Z1&y8_~<`1w5oGo>Xdw( z)1nTt1Kdq)KJZG`3jP;ax4ZPTf6RXyvt5Y@k?INanee}jTbH7j5b&TKtL9~aniHktsJGyLd~k$AP* zH4|xMXl-ZlRt7P}5KQUMoMUF~md>&yX9PRYHh|GDf~EURj!nzd4rkFb-ifuPoy*v6 z?!W1&HdD10pjj&Dt_H4JC!q}hp?lX4Q;9zr9jEsD1jwcdfs{E^_~zwSe0ZYv#nXI? zA;B?P@t1;~w!D=?M@vj|z%35bi<~l5)2}Oa4;EY!E+xdraQWW9cska>T>qXzj@#t4;Il+oTWgt! z4Xg0|?J%GR^yF~pO^FlD9>*!Wqq`b}@W7kv_m8nsdXfV7_xmVapC4~8@c|eL)`J#%LLDgS!6f7Gc{mFT|;X1 zSzWB`89X|r>D_czG`e~ScTuEc1`)9O^j3+(yVxM$?WKxdaY1A#Bd=nFtz%13QKc}Y zi;?T)TCFh1Nyl~`YS{t%?aT|uVDus&ML=ucYmc^-VWtC?R10i_CB{m7M$o^yF%VpP zb%BzsUA#0>qR>dY2a7sZOe!KN7bVl~kUZmKL*KRKx9*$tdV|5!Crdrt3)SnvV{9Q_ zdt6u%7W@=37T$@MI%w_77GAs_=x7(h80d6}r^2|^yn*xx@Q29!7_F8m1YJdli$CtU zQt(CsNH6|xy5IRetNYa1_5Ni^QOT&jgpR@3jIcd$^c{%D;yvXCAh_k-TsSkB!7V13 zYG;YISnsssr-nQq8?eRkE7?^WsIA)3ze?FIl*u&y7M2-a8{8U3kOe#3yg$JV9OE9V zX=?tpV*0@E-vsnx3Hycr&_9MR+57yk+qWNlrAFjVVMUB5prg7B%8SvaFQ0q|j!?{jsy8gZ?y)3IuL{i3P&mmS7|xhv(`x9xBB>1Wr3yN$ zqt?DuL2%;=mMuOJ@y$KQ`wbm^G*;i)LzM67<&u=$^h>jGI?AdDyLgnQV5y2<_r}HE zP-hi#7`gLkBG8|DcVtCoG=g82d^1njR5}YLYq?Gh9~^EOhrw%e5IeRxxC(ErFv`j* z8~3)Mjl>(_kHj1V*=e?JdTB{Jxy>Vmuk@3PUgMtt?`(>Di`-jE){<_J)2D42^@z{S zVPtdL)j?o8WG1WTz$gyTL?8Go){Ygqy0*x3tHG*q4HbxMa0TT3kV-bEg)6xF?G!q4 zY%k4D9jc)LyEpc@VRiB9A!|+d7Z$Zkvh|p*ImegFIRy^szemP2W+F=B zAsC^Zg=@%6$)nKYeks5eJsGsdRL}gpg6uu@LT9_5<4lWYp^mu#izUT%#Of(cg1V7I zK&^{Y#y>s1>do5!Yi{_STwS$q^VEqz+kns}quoVOAY#yEcV2fiW04-ws(|WnWDIMq z4KUbDW%VZk;7?O{ODb9(i80q4B3Z?T_I81nNw=JBzEr$)7%<*qAkbnover1OfrIWu zExH+^kj#)n{8++0=GK3;e+WI?ItaOqi3>3P7#8UC^>K8MCldTujMtNu2#rWW%^fAv z?Bq%n@Gk?m|3TW(gO0k&xrJ^7QJwL<_np6~II7Zmq=Ff9Gi!Om(SNuRH*cF=p&zM_ zs^(D+z&9x|LbX@stKHj&%Char<`pbR& zk?}1pshdI1x%?4_nHR!jj~?lFC!=1I%iCfLb;-=QX++qacR8hzVtCXlP^yC0n}C*J z;K=p|rc)S!1hUr&EI4$!Cab2!Rh+@vX+J^Wlzd932uUHft~CpO)@T1@WU-Uk4Ji9eZq&#~HIi0#;^%~)RPOTifCT{oMS`7 z*}oj_68uoDZGU@xFu&8ot!lu+IvdmTg%NByQ#D|Tdo67HI5hYe^;7xWThg%5v97S4 z$EvO+mP)(wZ5a^i*Rh3Da6nB9OQW`v8sqO-uH< zIfsnvS<1JBzk@_>H=s7#Osg7BRb)WT-NSh@!=r2Hcb6(7k{5$c(eJ3;5TBb22MH;E z{osPf7{<%itiv_+L`sw$Un76&DZvm2+>t}h>(ME!KL-O2U;TS9!0~w$0z8gdE-j>| z9Q+?Gq{!C+1XZS1nV{ayQuWn4w+zObpvdhnod}9=DeruR7Z!#O+CE?vayUk&1lS`- z3^c6UcXqyvaK6d(goU$w8-MI&C~_+t#LyJu!_16<24}|XuERpXM%g}oODro!F$S6Z zU9qbzh*_e4(X9eA2a8`WJvjV*3e=j_XZVNNvKJ-!Z!?%VMGIqk;KJ9XXB3&_`7440 z+^Kg8JYZaf0ypGg`=_a`4Ak0U$Jo?v{*>%--#?JpH|HE3cL@w`%-Vx%V?pJ6s1iYj z{B`0Vb{CSPQuqAwQzNxbD&bn0(M7e;r1g~(ydKZ}%aXHCUcd7BWxeeFQ%i)3>wSM8 z^48AHCjYr~931!Unat)VHkmm%Bo;ZG3ORF=_hA~HVPT%j}`{A@Z&w>MRZ{ljz zCB5~c5n${POYZHCyX9!??I?Mu8kfW$Ki&UIrV9T(r`X`IT7&aFT$_El{6pNYg5EI+ z?2eYJ%4o58)_<8?AoL#b+$y!LT10zgNDDucybl}*YBYAH<7!}Y8$lieYNvWb_B-{t zQ;7d2%_+mY`$Y@+4;?bWfV{eYx+fD8{yFU+BO?>RRvUhq+G(PYho5QWr{2`*Gpf-{ z(^Uro1f~DbMu86;GS+NZcyXk>k;ogUfPkGNDrAqUY{96h{Q$`ckG+Bhh-lNLgA9*( z=roEONtDCR1Ty?J_ywQ;5g%_#*hHEvDPSaXXj@rIZCrep5Grr){<9q|30D6$*v6QU z%6>q@f{F4NP=GaIjiQ>F6&{l;w(j;E>=U+6-e(u!vr*l`(Wo=r^(*)F`dTAX3l8P| zw}!T;53l@OzW2t-Z>E@QQR>{s>BazA@j(^y2bZU)iq+84@2u;l!(sYUqH(Ys@VT)3QXA?)zI}K@ z5IAfOsod6(qR-IaZIyN%7A7n)B=_H zhKf8a+*pxHZv&#xI?z-wC%fhU|O@u z9x1DC?%KGxOSym8{|p}9zQ`Rb5*ZZ_zn%N-2^u)r(X@oP^@+IQ^z_((RS3;Ay7>|& z98PKGlqf2DSSAvF)c$`AA8n~8zH;LaJae(Se>~(${2xoA(+)RUx?rL6t50wun5(cc z{IBG9;Mh)T!MBKnD`u1+*v}XQ$7ZfjCVxg@Cq=qQ z_4m=y91qFe2-I zDqmKo)-H#4cX2+MWO>voTQ^)VTGhzZt5t2$azuvzr#W%RwNPCoC$!B4zDwW1{|=1~ z1s~A)EI5+%Z{N_pJ}HrG&E8@C{(iSdowHP$+uQnry4mPD&Ae;)vws%tG?JuKVJT_k ztwoY*ZQ%Wh{I@X7f{$R(vg~l5%QTS&>Q@4O^fS;; z+v;X2ylOvz=Tw!?TYmWLau4(wf66Z2rZGP?5c&W#f2+1QwkTHb%!4P8epTBV6)Ue%x=!=;R^9g zK<}8$jXF7d&dwc`4WdCWpT9l9SO-?v*Vou%nf>Q>r`bbM`|vPnbmsn@;KLiqY`;vA-q#@jbH?Ps$ zr1oYJXY<~^`OE!Pe!jFiU)RWk=f)Mp7mo~S4b@>`Z66|P_!lRZ_*ErBG!T|!f%SAj zk-p|2!PK4bp@ysPaZlWM??tKO#HE#YANT9M;9r4cnybxBK63Gj4k?UFJcr)@-OwgA zlS@z{W1sY{{c2I@^q-57?gG&;a}R4SyH_ZWO27MoJ^}spKGdQRQz2T(js2K;>FD@r z;9K_$WYAcV56QGAtM zeN@~xB1(M%B(9%ODJ7^D(Gp5p(<${Xx;FvO)a!j!89{fzTt%fw64gS>rwwxi26eNk z?tM*asN};>-r9)9(pEMWK6bGUHQu;jky!2H^LCrEBLo)by&Y2RX+vMk&T=7i1 z^b)Hd1ry%9{N)Hr1Sb6~CO$rP-BK9YtbZ3DSyUu6A)nJAOeXf=`89TkJH^y6;AL(# z@Z6&icIExW+awaQwA3mtF-$NVbQy6o*D?yKZxE3V`e2>Z*Ys{-;S}5;i^oEtcsav^ zXcpTaQBU-LdTy%u-F}-I6RjlI7a@?M_qHO$Io9o5fn6+dHr2w9>#2`4)ooal`mSdoKVX=!70lEktdUiEZ z6IMSGIP}0puSX;e=>z2l_!mW_;v)=}kElh4!O6GAVe3;gWL8G!m_9GR03dLDT&TF1 zk=bWjyL6d()uQbx9%7DxmV2LCfyDOMbjAS>hPSj6i;y-|gg&HyH@aTYuz!4;I6uv= zbr8nt>KRe=xfR~o`_McHzc<~`-6t~R9TBv>ZQ?bNQTifqnm@D#R#qK@H|LIx6dxs~ zoDm$^x`hpO%JZ=ay<||vBS&&XkyF^9(sm9;)K`_2mFF;9WSXP!xZP>+RZz6@HuhvW8oj&84_`P<4+hc;&m18+tI$7rPMT#(<7Ad>#Zz&1CJdj~**QZac6oIDLi(wLdRe2e=eumtGs^i@6y9h8 z>`1_L)EyaoSb0Q+_S~;M(VPSLK`Yd8kGEyXk5#4QxpsXCl~-SyfABG{RK1{?+3O0T zRSspb#TfD#B7HVdn6z|z874%>^ojTh&|BZ;JzJE{YqqadBPj)8{2=g;^h!CAvZBfq z2~jPJ-I&Qooth)6CuAH}W?LhpURZ;#xpCHkKxC**XJ+Kn0FaJb#h*2)UBv|(03*8s zF%NS5D~ue|W6^$AAM-H*?!u56dY%6&zEC$cNv8?MEYxeRb70*FHC(ep?hYS%a#@lDPwcS9>ezm&Dhbed zV>|&zHLEnGrA9guMk7Gh{sTNchhw58JEbhEUA>Hh*$Z2%u$hY;RHS;egwk!Syo8$t zJuIkou6|HAs)jYK=HiSP{~F5+?K_HZEk=(Sc#}RXL#_ChT~;&0T$A|5o31QY*rs+* zck~h{<`_}W*E^54RGJ?}nBlmyE<)frx=P)P^C*|>$(-?YTpkgCR&b_Pe-iD@=-Vg9 z8raHw8W@sVF{HeQn_YOG&NJ;YyI8}kxxAkUSy8m~F%ilkSM;=PNzR1Qn|&URX6gkd z^RQSZC_+l%g*Nv=-BrXFvAvpd*AFtG!kSj>wDn?U!3mllFqHxG3Pp24*x8)=T^| z5)Zs{L@&g0OlW!Dkri@OvLMF;s2B%6b#%mOnm37k6f|BJV;9NysFZgNIrA;fd z?8>q-fp6@dOI@KV>T7x38Ja*fL_N8;|4g##(NvNg<&yHi`Q3Brj7K`^s2{!A%XSj~jXC=@Y8E zN*8jvwJO1UyVS`|zI1lgji?EkW%p}oPMySpr_9Y^wx{{!Wa^CM$k77R-u)?NbJWom zDPE34qQdQQu4_^=$5rCT?oC^9O-~L^N;MGXBT9%MAAFHUxJPg217JKfy-K z+f`g6>)I!pJG(C!*jFJ|n(`DqK5+;dWk1`pel7awU?jw@?*`?TI5BsUE~(9YcqHJ} zf=NAbyFIy$#}e?`Z4u$F8gn-c%;X~#-7Rtd8fcyO*LoAkY$$)WKz-oo%RL>GYD1r1 z+%Zx$)U^_6l|_8v+T_vHvcf}nq9)dLFgIdZ?q#1j+~M~ zE2Y5h6kl6L%VG#r?k>r@ePKuQ#XUn8YMAV7#tyKz##>)2%)qt-^=2#?8lTCG8x>hs zoWr@N;&>H#IKGUAQ@_-xC1pjOZn`y`9cxD`@q8s-%L5PoG(|co5kGBa>8JpvE;ZoUQBtltI&#DA%YQl zy3s9|)m`a5l;Ed;TT7$zLXfl^ccC_wv_z|s0o@z}L1iq#WvH?+a{^wq-cwju=usPU z(Bw4lK@2*`w1qagkSs?fs3BY198NK5`rsjxl-RV(_pTm{fo;wQE9EUbTM*e+T(Xb- z6j9!ydnd(LMo3hG6jflF6GjfBa64u2Kt2x0wY(!Q0AbEcjTTG$Wl(8&#wIXSojCTO3HRSC07+gSO(WQcs?(ja+EVJP; z;J>@HWs!evr?ds?O2%?M5)*Soa_YpSU2H#Z`b1kn3}VYN{7>>>KBJD50?3(UlS2+7 z$3yO|etvKaX(hi;rco8j=&v5EcGZTVunYH!YwG2JqbuvFDuymMho+bt)hA818y^ZP zXhyu87Ix@PFNlq~UN`_3q?n-J=wNr=XJ1R;T`QeeJ`x%!3yeJimC*HRpHDSTx1>sOS8K=GI#h zPOT6FV_wEJh`>Ggv`7)joP!}X^B3|&0ePx}IhZv{F_}S<7E(U>d+w(sy7___-K~o^ zsQPV(iL`xY&1VJPdf)4PGtiG3Wq>lhtUN4IwL*M8aoj}oNW*JH(>>>zQbOO9k)yD7 za!bfZJ+G$JF;$_S>w~+JH57{l#n7$XX9ovP#5%wsb5Lm+M~6R-s1yTbvH46tDn@RL zFo<)!lx(uLVFm|s$;g@>i__E5*_(}QPiDSmlGdY{HvSo+3 zISgL|V1Z(Cbxej4M0B*55F=CFVPDOtP^*15bQ#+efK8!@Bg2v&^9incrx-Wf!a|aV z6QvDo>O;r#Y@fgOXzSY52G2@4&|QdthMJ>_Bqi0PLYN1T`dee#*< zpp;#^*b*%U%gL*A3+-EO18vQVq<7xH2}f6PCM&wW{bb*h_c07orfRv8nYV+$!^_#9 zwu9<~Ll3am?ReGvz~$(Q>sYaj%coI{**YDI=jzB6A1A^N5I?C}>pi}*u~9KRCZMga z=D$)_sUIH`7R0wnPF;U`JW0f`zZ2l$WmO*pMrA8?Nr7Wq_m^-1ra zDY$!CHQR>|O+^@iJwOih2tT=Nkc=6AHR|n&on=G%*OnPhYm{Zd^NVWL?k+`A5;c$W zTnKyQNidgLmR^@ z8BRI0yIWd-DqFCoSP37xn%3x|)wg0gfJ7IDVih`@g9F<3#WW`OMy7~|S$MX4BqFu+ zZCY>zBn`^PSHOspDTbbroVA|S#KXEix&_kd0bj7%>hA9EmodFxdd{xVVmxh_%lA@* zwfZs+IMGxE`0MS8C|eY*n z%w+L_M{0LdOr}RiryZf{X^m+@X?(pZy}+)LoyaLrc7zRU_nlK*f<{ zl2(j4dF3?1E8l^Q(*pgC=Wyy}EM6>Q-rvDhNiA}nI^}5d<`=IQ3^+K$Ct%zuEGj`9 z%0-sSNB9-KM?Bf@eE|SGsGK*Fyn^Db+s3`g%%RO}Ej12o5;VU;{ovhOKMBLrd9RsV z4Abgs<7i?qM)S)k*;$9??rxsvnEp^xWa z{Khj)j=tNTBkIZ_qn{d5SPHSXje~REN?!&a-S-Lj54J2JKD#dMw-4+tQFRg?Y_H{D zdOK3K5d#Qib^EqzuIK|b&2RkTFY$5L7N<2p2zsxP&;#2yW8ISNo@`OI>z=nezMKlGx*f zMR9mt^F^l+Yc3@ad4mi^w5J&Qk$lGqCQ48LC;vR3PF)g}vbGK08?%zd49QOuI* zzqLkhmVTX@fb0;O2OYN$o-i-#udFAUjG|D+1k#UgWBOIWy2p{)LTecX&Q^cNiDeVF zgroq<$|ey2NJ+2xA9krjxxWHuWl*$q(*gmmAinYFO^I06ysBQ>@~N4UW|$afJCHIE zhQo3IS>x&Q1ci6&8L`&&XP1HI3xAmjw&YeHjT2gfT=Xtn?u>mUSP=C5PNj(3!u+jO zB2J5TTmFxgshJZ?J!u7v78VJ&%dewEMAh{H_B0`_5;75qA|NK1Fr3=OSKjgL=stc1fN%=stc@3HzZXe7}sD z!oVG-AJ9V^d;bem-RfZkWCoVNt#YxIq08Pri>o8~klK4C79{RiwIT zctw2@^qq!MJuf9WV+ntkx@3NE>_iP}jVt4nz?-tSi7GY#y`0Fs>0(>#?-k&St!n}(CEr3xN$5dGX01E zlmgK^|1n(pBgl0Ltrm(+w`WPNNjRTR%s2ykya06!aoxs-aho*|?Kht<6e~&5_Eb$| zFKD7*{z-ic@`5GSuohI!pUVsn{rmiaOp@Q!2rE;>9(2&dLw8$ypauUv2&F{^k2N+m zn=C;XQJOMQYvOm=1oO(pLk{En4HTS-_Sd-xhms^iznzL)B;8VpUUqGo3UNPK5?~cBc zzV7q^qmHWalHv_)<*K1hk)M_p8iR1k%Y2v17EE+>(Mu;TYY4MGqG&0=XDd$1vE6ua zS~+-Q_N)*p=TyCeUs`R{|8?-h@A}=?TZ>pXVZ;Zt_!|{Cq%Ab zBKZj7C@V{%RdEYo{N)V&+_|!tW1E#_H9T-R@sU5T#v8oS#=303#hOibkSQA+84i0R zLkFT2j|P1HU)V81vmg-^aga_jQMp}_y<;2pt5ms&NEzSw`@P7ugdo@3TaU6$%O!qG z9&c&JPt75l_|ApFb`}=$!p3gN-?{Cn6gZft;gR?u<2*~Y4d$FQ9!T2+b>~{bEwp?0 zW*V7U2V!lN%L2N}o=^-{ZvpS>efV${Sz>nIx0FjhXlnkVx-Mq&dj8_4Wv0L4Ne%x| zgBYPkT-#Od11pb}nyJ=3+9F&C0CABvGUmyZMec5q!9tz@ET$c&5kUW~=!X$0fmgvj zM_Otev`0oZ0Ea|jQx`AINv3)`;bJ?_DSTCh7$TKoZxnj;j)ezNVhC_De6Mn6}V=fg9hb=QaJg zoH5Kid@NNH`FI~Ax+Z$;yeJr|0@}51d&(l*h?x!*l@FxpPA3>r_u``1=vHWr62>Xx zQIQSVz^XtoqioCJyHm;AjogTw&#Ga4LrJ_n@}-%5BYt)fdx&C|^vf?@V0mQe0*C!) zEWMhSi_f`~{w*Jk{EsA7hQ{xFsE(~@%Lz>8;s;%G5&6ivZ6d(L#ot->+2>-f_jq{@ zBIX?0bX8uIG6gU^k2Gd7G|YG`Z{kH}i9sh+-@RhPmFQ^xom&#Gic5Q^ZfoQG@vuPl zML!HdC-Otl)K7H_^H3|pmVZm2D$ZAP@5_xJ7P$nTB9E0fRPi9IGk*d=AgG4(~a`ppo( zyJMRW)Xee}YODNdz}EIseGNYseW#f#ViYu{9zhb@3e^u}?U#b~D=9!{F2mg0?UG%= zMh6<3g8&#bMDs=fZ7{6aIW8{F*m>E;38|xMyKSUyFl@w|vb|G-x1akAaOf?Y4FjiF zcY_DRr5!TI|HM?KAwx7exky^CMdvAY;gd%{#%$2s?NVc-A140kpmjMQ75MZ=n<6z} zGruo|hbRw%?zHbxQCq*t23prhVg78+j(*z@RPKCo@BQb;qg%X;lQW3C!sZec{FM!DHz9Qw5(rGD8bV}oK*Ts8|f zFQYzemddDS6vvs!@pKL*vyD@VvEd&m@tj4~wu&O}tuOa*T)gYLkngb^9=N3$Iu6`l zxEG{|P_0Yc;Ws&Tz-N9gG3y>BI$7K?Tg{I)o%3+=w~tM!7fU`ADcD+Vj5;9^tcCn9 zLWooyVCQzZlP~rnDQj%zMaG_6F5)`pi04Mv+6+yoDr~WGlz?QG!=ZPVU_G404y8UZ zN2Y89E4Eg=3N-?WC_88)V^|K|F^DdYhGVlB8R*y1#x1zV_GwrJP_u+oVMh|J2cr1@ z^Lqcu>ro<~A0UW~GiLCeeU(9Owq3ve9`1>^K6aF>7P?p$a0D%#(MjU2o40b(zwYc@ zwB(lvI-(aC7-&ecs|c~i@8|2ZzS7p#76iSl^S$c2R*B*)a&#rYKB}BQ_rA5J8_PUD zzi>~e(M;P9$o}?VRZ>oFbYVH0BGU-23#JZun0qhwLrZX@%Kl!yTf>X&%YWVeyQ^%v z3gWAB=xm+eaLF(%)HWVl%I_RtknT2aqsVXMnUe7s!ERl3WxTSGWcZSEjk>vdvUw2= z``9<(XXAG3ZFSh+0&va%l>c)|f{Nwk`3q@ro)e(8l*t^4#-LMc@htiA(o=vMFdRGEaX$rRzN`A4>qz_3`G8bXCp7#rgj{9=I7SYs)q_G z{C8fmWYav}@FZqbVc^-@KJ`$T`Hg!` zD}O2WSHRfJ!tqK3$l-Rq(_0^hDt_fihkNc2sQYsC%f+EHa-GHE;gqrf(5ULjX^3)h z9M>jwG|0x(Ze{wQ52CFFbLpibc1Y0*QJr9k0h_|W84Y4?+B8K+x`v`psH^h}?#P6t z>+?v16(=6DIalobxv#~1Cap2QOD91*ocJPbJXpFsL^CNW zZ_~=1SoP6od-3{7N--h)(dszHkJE;?;T@gb7#~H=iCEc zlW<$ldy-|HTzZQ`4g068%m<1 z+FhHk@Xlg|%ry~~N@|q(k>pZ{T97CHy<3jWZ62q*Ko)e6EUgK&lQ;6_c}|ZV@YuGN zN$$cQ3q?yZJ=g2im-yC+p^iXcPFA_8Yws>*UPdr1&bq>z+EB-I&#DpPGF5*s8>8XF zxm3lFcc{!2$Rqq@o6G_6-xo?>Z|#XiXB2gM0{TRyzshp93<1dKdF0b${6!bsn}T|J z@}KmJxzn)`6Uz2C`=YG!IuU^Fnn77IDxF`YI=fOk(uW%IyG7+XrcJA-Mqrxsac6+8 z*tBq^ZO*_qQOXNG%BBBI-|tzdz(3kVr&!&_`#fyZy!Xwx_h9plG+FU29t#V>e^*TeWWhZ|m|h zTBg8s?cpIva$uSlSkLgW>kYXChZ}*PT58#|4)18 z9o1C+c6;kE;wT~r7KBj*L%(h8QJ(x?YJ?l+$0$v%6Ml7EY^T-KB`w<&(o$4CmR z>I?O>il_)ICD0XTV5|Wok8@w%uq=d&^ z#J9~Jls%zb$VXhOa2_+^V>ejkAfLc6+)S(2Y2?TB1J4rqlOj9H{Jq@xrRAeM+CRh% zy$FPS7=iZ$5ws(e9n1n+g$Z*Gu2=fuZKG|^Z%0g}OtCc?`fH!?ln4w7s507{&F7?K zzy8s?+Z75GI+NX*-)}~#maFbrkU8T*nb!*CfnAA;GHajSn_=gzRG~l@A(pm24Ac-~ zu0u${+NS=4YDjj{Y=XazY}nBLWU~m(5WeBDirVM|Z~RKud_qhua#HpJObfbC1(Fx*TM^{(*l@LNRh27R;(5guafQ*IM?au{G% z_fB`m$WR7+3itrQs8aH^W$HrjMpZnlJT_IFz;^60mT6=>BAOk*=I7kuX*juh+L+8| z=EJ!GpiQiyI)umDB}JO{ZO9~?ldt%Rw((lj7|L;}P#KmHS*zSYoA{=adPQINvV58} zQR}c?y(u8G%O4_im2_7?%e>k_5WB8?!W9RjDyC5w+93SeeE}Mm|TWtpa zhmp2EL1SH`ecBNoBulTb+r`DY7MKm>Es-CD4m*;2h81*#wdl3NBq>XvB_&qZ6 z=cdNNBALxBD)qOVmD_G1svN_o?q40Iy!e@|zp}^+x&eF!+HN^{!{1^0;PCONTJPT= zt#^gpzM?dmRPug4*6hf4R27KslIEt??oUrkZ;r&2QRiUH{zA)YPj!=4fsoQy@T?JN z#TvWF4IQlnz4g{vRXp4NGOFdR6DM)OXAYCC6y$u83$LJZs-zK#{~$WttAp2|bb4?c zhuF^YX%Oj3D%fpk=|Qk56H)4;Ikq~KBze!{2xrx|CDy=-PL9~7P&~iX#Zz4`BAYiQ z@L$B+ZZRWrZ*Ly=Ej6uQTnyTg8Nn4vr2Z^b^zsk(Jk!8?z2DP>c865HryH|Obc>0< zBneGl@bw#_KdV|=pQHKs`b`cQ-kcMu@%2nd;5lZxib&JwM#Zwl7iWHerR6r6yd2U= zaHu)&V)QOxY3_=I)Y8(U1o?xsJ+HKCaA6+OqH|`$x*f`&S;>W*=WIJ%B=$2GxwpMR zbP78>;uGiX>S{cIC=cSXC5)Rii){3kl(&MYm#h|%>*9Fo3$LID9SYC?PC(XHjbj&Y zp_$)<_XeG24mVQiLP@a>U(Y*=7Y{|9 zS5i#|I4gDCmFIKlgiEP_IA8}qDZJFi1&EylW(0;#2%q%XmW>r&uJp&L1P&?`cD^}= zx!@?^wO-nu-F;4Yex(bG%L5>oeX@sH54gEGuWUT5Twfn}Uuf7pGQ5v#c^v5Akc)0t zB;NC8xGitM`wK@Zon3n5B4!8HM1?-OzsSd+2EbbmwQ^O#H&XGJmT#ou8Xa_Rl4aK7 zY;3;zP^FB)MgaA>vS_>9Qy5~5(Z-Q?Rw+l(%RMdZT<qg#AJ$=(Oi+9VItf}-tvolino=k#6JeKgw?&G~FHFeSi zCKljs9R^g2SGI3RyPnx^?jUdfMnce|=E+|tn?}7|M|m+VFBv7@AC*~EtIS-{?Vds| z>Br7W@u@$X9W|tuE(r+7vM3OL{yOMvv6n2L*-J^nz0yBYC3z-q`gtu5%{}pkYEagt zF8s*NoluZ<{HTKjyML9^ZC-Cn={8w3rN+Tq2e4@xq*?&NygBD%QEKuNZ_5H8YfIjo z!!!M|0I|ENx~E`SBG`spU40#Ih%04$V?}_gmrqzkMAKaiO1KXEGSKvZ86`*C;0~{w z9^bFi%PLiVw=D2$X!iXP;a~g}w>zQI@-L`Em@4|W!-G`Pp6BoR3{$RK%t8WWXU{9K!lgTJ)v5?T_z#_xDE!$A?R%$p2{e7eahyQp)&Su8~gI7=sy$ z9NdkFXJKJxLl`CdIjRBrL3jQ7wt@F%7i{h8(ea?0yrj6>A`j@K=lh^U?<_rNqM~EQ zi9UVjrtiLALZ4Yg{ShBuY1QkfBNEQGA5#=xfHf5sf$;_rs6i7u$4gn{9|Y>O9;0Ls zrKHVw*D&?K;o|#xlbsjFTpLm1Pr~D<5}gX;-~p))sBG#4XoGvD;5cRJcU*9HCCtWG zVf%lzQo8No3H?Rc9W8kU^Z%`&_r1D<%6Y$!83D6`LDcubk%-X z_$%Q=lb6+5Hff(PF8r>LF97{qiyIGcjON4KthOKh!BS|{}Nr7Y6B%e%E({FIRH0xzdsm9-3mu8E{lfiNI9(e(VT7NA!LX`Wk(mI=i}bTiR;#@~3jCb9221 zGcyH$lFpsB?5ZDbAMBp{UeuIesqU?8KP9L{&=a;^dr3yK7`fqP?zKLPNM!5yfi0ML zP@!si*k9d+A@Y;9M#$-|9t)*}uhJd5?`(~Ig+Iubd7f&N%7w2Ve1%Tm(Oj*spwo9y zMpeqMAxW1GvnEl+^xHW;E%#ChORMk8@}Benyq9OLNXTC3`Bq6sZbE#RQeI zNiIl=L%aawzA~Ak{NUh=Ih33G)h~?;O7;5Uml{PB^nU7GY)s#dB*@X00pUSDcYb>i z{j_Km!QS>8FP5@SapT*$=9b4o}(_{7ETQ z^7NvGLha+waNpc1JNptIMl27GsX$FOnatO{Vh`76{@gNdj2OCDGb58oL1_Do<#r_r z-H;=y$Ux_eI>~b1_gvvhu02+v^q4X8ijQM2<*#Jfc+>u9&1#qPRT$444 zUfcEEcgi_^KU|=$vP3DbB#<^FVqvr3P};uLaDL3DK@AbJ=Yss8JXn%vAa9Bi9nCmD z?4I}&`PHZM&~egNH+6Ui*y(KEd|=>4SmW)p$odh&Ke#cOc#&UGakv$YR=+X`SXy!u z?qccr1|e1KaQkt0no@2U7XHZ|mHD$40QuoU-J~~;@|)7oPI*F_bQ=Pf1qz?9Z~)sA zBI@bl$e|vsu^jWP2f89-e3+LHOSISu)*XwU*2f@+QB@wqfol8A`g*jsng2OS(uefY z7AfXu)uhGAa>#-CN)|}*ENTHZ>cMT!bIIRt@);K+nH_pn-`+?l6nX%gqv1-&eaU{6R>&X_{KzhxJM`?Oj-D?L$dp5hNrTtSaC_r`>~njE!eBwKZ7_I zUV2Gs2n%plaG1gY8Qd1z=iX?jE|>6r=7OUMQJ&-Qzhfeb_>n4)zQ+*i znhE#HK~~lhvHO9&ll=L$Q1a8T2|!b0qbS}Lew75t?JP2M9q%r4#GLlC!~dLn=?Di- zeXV#sog+sHoBpnLdlx!yL&hE0sWg6*86=d(cjhoX=x%>)uO5-idTfop7h@qW{6WhE z!t>pk3fsfDzHDaaDFrRXV+)*`(!ZcDQ@VmYKpTAB2%LW02V=MaoJtr!5+?WJO`sV{v zpgQr&yD3WZQ%$Nu0>i|sv(O`wn=H+kiJH7qFr5Fwh6XQjDRL*sD1w_?>sp5RJD8tj zpS^he&1GZXb)v~=y^jS627;rrKY!m7d|v{&j&lHwfOb!hRG(i>H>7k0~e~q$||D{OKk@{Pc{SxOl?I zP(&Crq)bY`XT{hd)782#xcD{j3XE4bvtXXFd_Zv^1LRXCr`z=Nzz@* z9DZCPQfH~htGQ~qD~au!|JL&T!kK-p+HbRQbyQrJ=Mjy4GAZLO?u3+%XYO=q$Gq3y zcFf!akqm|YQ+&Eg?_W3NXz{4@i?rylBf*Q5i4m=^jlNg}GI`6L3=KGMs1&iGkmixv zl~j>IHH@sx2^W8ihp<0$wBp&OiFppyj+<PM@(7%q;%T z2j@m}K2QoaFX7f$(UKUO2UI!4t6)z-Gu9VTCt}Qy<>$cdA-B9ECr@)89UmW>B<%++ zFBd-2 z8sFB~YGpI%WK>I{VbxstNjb&_G#jeJd=uGFCt3%SOU;MAbwGzRn|*XkZJB&T{zw8A z-L1!5AvW-nDA&>200E?)s)z7Rk&dlpFh&qa*fMgc>yy2A4Y1-e5#JF_fVS`}qm*Co z?7&7Keant-i>q`_6EJ9zn#IKeg7y%##F70;;JbzmLS@<7hdrOaNVJlmT0-m=BlbYw zo>$@TBsHq>BUYK2JFCFl?gSjKs9C>ql^xE6GE};?rA8)IY|JLvSy!(Zd7?B#UG`*v z3a-Entj)3sLMJ8WNp`HU(xJ>aUH!+K6BB~_ zsa3M?MSLV&#;T)I5QkZAJAL`?Ej86cNiTSae5~#z9_OO&fpL4J z_1yhe)GOZE%ujq|+C!$Bs^}`pXxB%bGH2Jqx&g4yOmAIDmF`PvJ{7UWQBVU4_n>Lo z?!f5)|5_ejFI*v^AgRr10=UnDtSNf<9sTDOtuRxixN$$mfTGXa#@(gaY8_0z_r$WA zM2xN1JB5l1-T|*yG_Gp*a)OYJFQq%b3jByV(9(g$(XpHM+(+B@GF4^OV&c|kC*pFJ z`Pum>U36rgwFFbLW&vCv0l<8D+*bIHLT`Ab=*r0eUfkxX+~Ays1V5SeKe1NNCssBm z$(Bm;_ui>7L|3h=|L{l8g3d6c?YlAJ=MUYYYAz#)8Y7%I!}|UhTj7P>;L4Q`e_B|7 zN?TR9@mYA=^@`cdlI&%Lse|-A-hBA*VgAAWe95XOqRXMnOXLWY|{i#?S3B8Q-#RSlmzWM1u!uenLcKYg8aBI_yW^H7Wq;i1U~qV>B1u%2VeXDeR;J3?8FG=Wa&wgb^CgE0Iy%DmyV30ukZw) z?Vuk2Dtj8Q#Vjhkv`b}gEHJ=Q(x(3t>_`{p2nAunF7ug!y? z`BW)l!b>Ohrvw|#b_6#HMPyG`uFn&1w-?1zmz-Dr7C^MQE<2Aa&N;n8Yj}Q6($CrX zsZ#o2|LOI`jTw5UUtEPx?xrVdP^5{aI$`)T*9x?}Bx{h{3wqb`V(?5X->ai|#`&U6 zl{8WPYrYc;M|^DXyt@7es>)!-?0ya{(K@UU_F!iwO*#;g$a419FQ*lJm;QJ@&m>r~ zM&MVbK0~qH(PdY(Joz*m>yHFe{|N3lo$VTaATKB1zBvhfE-KS5lit;w_oT1P=}7fo zQjo$mJP%*KYPfz0HY*r!x9?9}7i^~1B9Tn{D)j0ru!8j4MZ!VkBgn&JKL67gyhqC<<$CP#ixcb1=@tcQyjM>%Xk=L)XV=AdKCNL3q2ZL{67_X?EHTidhBy0Ts+$$ zMY$-4cxMZBggO!R$q??z((}sg22F97*i@NXp_YnL$Gw=~KI}k~)>YWkA*KzxS{g#R zV|kvFr9h$Cu(Vf7tfN^#=A)A-1{rE%zjn z>z7yacOw@r_@t&*x-)O@@=F|R=)Bgpfj9LWwu_rvXhpgFmw0BGg1`){V2_Ri6SXRl zB`>G{eew)>I`$3z%KHp|Egr!ISvz#)p`iP#;A3x}KV7+)#L#7I>py!MvqpzcajoUy zf5nJ>6YOb>Ey12z`I->bcW93vv4uI5zl;aWy}$YPvm#WxZag@G2o^YeWjhdVK)l0H zNYnY}zJfL8rUf{gON<|zm()+PYrv}Vk+4@!mszR10_SZLD=71?osmD zrW{c`rG2_K0~@x%-^Q_ATcEVKZ`*S182-wie@lFtr`9x(Ek<;_GAKnM%Txrj@^_)q z!J+fU5dEO|K;D$}YM&%wv5T+c@bV>Qi9)6xeQ`m{L__mgXx=9j9fzI)fM2p7qc#j&N^Yvxr4g9XKTMD$tfth<8#lD zVhX|A-pZW4MVEC_1@o-z^6mG9bV-iw2cPFbog|hf%*hyLf_N+_X({mPF`;C}eJhRm z$M^QMsb-q*-upyKsoHkTPRR8|HmzJ)$vc?X8YFLzxvcuOGf4Hy|2K(EM8L^af^;Dc zo|F+4VO|{r!e+y455qUR5-!dQipu(YEKD6lfrb_sIZ{_@qhza?P*BvY zh4}*H)1+!Jg!K7t|v zxmhhEW@IKR4=8Gbjrm^#^9V;{v&`GxH#41C`(E4_%`))T;LE0*Wsh+21={*>o{4Ni zoL(Q)eYz^H#!OHpTqbX-v=3}Z#I#5$lg50)K|*PA%(V4=n~yqHBUcrSh|Kinhzc?O z74jUY@5M=$LoX8{_hOZ(y=KgJFTl|a_{ZB1oEQ;6omaLgY*w>hFdr7?CsA2WDo|sm zm@Lp0+S&+a9ehfgYV}XrgyHEZZ z?MnP_p+5;&N z_uP$*>E2#ZbTbmBq?8CplBQ#JR+HBXoQswNv`?uc^CfqxfNYvPZJsFrJEiE~c|T|o z{ZdY{!JfL1u_J)9O0wbzhelwy8`NsE7t16&NX&=Kg{_Cov99Cd)jvmgEX)TnQ@tJ3 zoZXi>p41k5I$e7_Et*90X9Tt@gL21w+CjM*Kqbf1KuI>qrX1~DtZD$1WC7^qu9j9N z+IM%&54tlD5adMrr)5lw2Ox*300-QE=~LIO=^Xe`UTl%a@-i;ZmLpg?67!g{mfB71 z-%s?mh#HoR(03pvo%~B0RUlD_B%DRLL!h27^PLlTR?0=S5_)~67tfbOzRM(`Ai~S&W#!M6vs1Ecs!CR>+9uv!`wR zROP20O(;rJh;9^WDYe?Vh;pDoqd@RtpyWOLB>8abfjFHXudJx7o^dV(O1qs%dH8R) zHA3-Zl^9<3p!oy@v9G{vI`1k$_o#aSGxMS`d!qnuq^(mY<25yB-+4Mo-fhT^JLXmb zvo>XI^qI0a9C=>y{zNu2Dz}H$WiTW2uF@X-Y~{|Pjw}ncmUnP?*v`)J*w7Vvm2Vq5 zl^>9Ah7xmmJJ7c{YvQvQj|1x_t8Psp_Zc^wh}Y2&Zd@tr+w}`CYne9j%h}6GY{cfU zr2D)aWpU>_ObsT|(r*L{hn*y(l&suO_Xr(gRAb7uj~^v|ik(?TutA(x+h}FB=)(os zPTjwoLtBn$dT$1-|5nvkUo$p9r|<>)@Z6VC$nWc_S0l8$HPR1Kpo}_qyD5Mja;(H} zKMM<4F5IE&J^yddtNq8)t_N9yZI)i;v{s~CMG5qb0o(skPBnS*Ynbzp_}9J9-0Q0; zTH$hq<8-z`>iM?6EwW>GLWev)>&-gKU#(U9xWP5_s>(p*t0DMfarNS#Wa9pzpytgF z3u;!h`lZlS-s>L{HY}=>7&#F^I!w(vHv6`Q^QZP+>4FBB^TO3OaV#(rF?#&#h)$MizZIP+#%V zM7Zg&k*hJ>vjW(IISC&?p#~(z72km_WGJErKlld}fO6$r!tj+dAHL+&plj-Z3Vrz*k-$ZZiGR#f#8viGax+f_JlAKtg&_RwylaHhPdAAPn9;H~+43OCW(}zot zEF^y?mwz0}jq6|n^YbLtPTH}~iaBh>3qmFUmGN<3aeBpt&JU#Nhy<^f`Vl_)D2grAoEJPZwiNeB$ zxGen*D) zZd@$(=mff)EGlmE(xN6{*3VYJRU91Aa_=MG?k>W^|9Z{4w;JxHnRtNQ2b>u(Wm*PB_)wI?di*Vy?G>PuaAcn4W8p`l_VtjO! z@;D+883U6Azq+V`ou+T9eyV&refiU-(K{K(3!E&)KS5afXz0GvkLylf8=?2h?ys$~ zZH&LhClqCk>q`T|%lFUQ?r9=rUleYp%8iKs$#8&vXfcKI3jZVJmHBtdi}y6HBc)Vq zVYs5R`VZipJAZhk%Ruk%`+X}Y`?uaCx!pFfZC>n6eZkn9EXV#j`PGggb^|z5vPlaS zO8b(8+qDs$^SMchYdL6*Z75h6%oJzO552UE^fB zGoz@;d_ksZ9Y`08v<74iCr|oN6|C&@nK7375_YW%32n-VG3UM~GmE_!@prv|7DzuU z&z^?yTfHM9e!ev(&|{{aJWTrGbDzv*b?+E?9UXJo{Pd{`-5;!+eb=sjpS4Xq#!UVe zfx8PHW@qC&VF#JK5i~ektt*j11yu*7rI80evty3HzE`uCv%_{c(_>)1O14o|INt0X(j{0pP zUdiX0|7q>~F&%~^W`9l=2{Z9XVkFlv*bpaktWirr>=7|tE(LKgV_ATiL`}{3LKfZ> zgj)PI`PFha()%xVuduT%WW9XpH!>ojY)fY2Mlitmmhj=}TLswo2xpA@6;ZX84O&=wo#s79 z9Y11w8948j9clzDcQf*bWBGk^ghR6Cjqe8YxfJEc)PqqLfXFDyI=k)OpkQ!Yj72XHh z@ywUV-#qh1qaIU|!l^>V_nr1gtz zJAcZ$jJhC|m6um6_FeeWx{(wuj#liy_%Lj*tqv@?YXUAY0kgf(o~2d*x6SY_s}y!3 zzWvjvq!6E=)>D{nu;D>!iAk0_G~Zk^yzP@CLbI8-LWBo?DP4k8<4N|oq8xvmiO2_c z7bdv2-|*{mW0pzwRypRK+P`6+>E2(AJ;it((EY;Rqklo(L&Cz{TdX6hREpM<0+h2EDt}+qMJN82=A|*QiVMhwGePW2pRn z#G;c0pfibf2D1w=w}1m7TWln2y=C0?v;MrZ0L7fKv~(!UWR9u}9|&sk8=US{lxuPw zel-v@t5LsKzi(pAZ4@1R`_F}a*MzMCw*Nh^)%RzQ&b9jcq@TnrYSu>6eflEK@9niy z_^E~J1Ft+EXk%_Z(oJ7e*T-bb{S?jH^!XL06osK}tvx!Tz^vke=6=%bM>UfzR_g&; zU07*1-oOrMY^?peD8Od)-I%l6NAF-cAGsdNV+H_K64&i;kvxR=c=yh`w;a&d`g8Ak z^vf0c@ZQ`DtxY+-;!?s2*Gz=(IXr1pSaOv|!k2{)_WLUvSoh;JaGcrmb_u@!4WJvz_mTGb5Mhb2eMhpIaP-1E#=>tcDJ@ z5JXrvOv>y$-zAR)icOu13IoEy?obD2hgJvG8WT_YcmsaX^$GzaEeCGArmV?K(N68f zm=>RNaPWoyC#v7&IOVks;9wW%^~Cl|)6O4@-SZl)KP?pI>H`h*BROQ6KDG@;Zh9eE zW82qsD*Y7zQwjC^Q;(qz;uxcscYDVRkMBHH*}essUa5TX99nsp6@# zgVHXTK(8%);~LL@rYJegW`=p9~>1>_Da`5F(vI(wbwXHRse z(WWfL3kzMweqDr_WZx1MG$fxGTv4r}4R46Khozt;l#x8%1&|=^#YM$bd^GRc-Dh!S z+9ETsG^9PYP}WMZA5gk4D_|5+|IVd6M_1P;z`b{Yn_0T6DD6YWy?(~SLblZLH4u#> z)}zRNkaD3Fw)PGG&*-&;@);L*M|m+i-rJpEvp+R|6_2zgRvN{seg*Q9S$LiOyq1cu zwv2pHil+~{FC9opI4=J|hbVqb3_mtjR0MQpp&0q@AO{vogxDAR_s&(vpQ~v}$rdW) z>HFY^-D=LrCK=6Gt*|B^;iKMqkW^y1(_0(qTD}uJmXMa;5hca^cSK2Dp*iMq6tVjr zhY?#2VpI4{jsI$J=}m=vk*s-fAmUfPedy=C-{qB^TsSQe9azp;P?cquZ*+p`>Kp-h zomYHIM-~Z|Dl&g@A6iALe^f==oKpW#s8J!?tVva}w~xz-5DzEj<{p<3KI5&T?^DI$ z&0B!3tq`lNQs8<-yqO0|lD-`^k!Zhfh3+vYr_Fr= za|>w+jNv%L^rz?)Njnz3TH&|en@mrh>!WTLEDcIN}%b!ry@6)+`TW94jG>jbpA zF>hx!DmOSg51exB=Y}hM(>T@LU(rnZjr1M*O?ZwcF6-eM{K_!C<@M6xlDvAg)W&rD zl+wnF#kX*1ORd>d&YL_dtKj(r<)wqP%F8Q3t77b$ednCbc`iWeXd!-`oI4!BpnPOB z1plTydPIlxEyk)=Eg`;x8>UDK%<_1jOr;bUa@{;2z{$G*g8icNo_1KF z&A0ev8^bs7b380t3^n+#2f@&;xf6-0RtxSkNRKoHiwN>ABJB-U@IB17*t{Onn{fQEA!P7`Fofeb+ zI?LthrFGY-;`dACYaqqH(*$1WCheCTfiei`bhXZ`kyx^a!;DE+Uh?GPu(f`D3%3s5wG`L7 z#?qPU19ceFuVRbKA)&3owxUJ4VL3{@W0xxI7zAhs4IWKwhB1_$^V2|67;yqMcX*kI zvb71Iv^E}$4Kn6j)DatAlW%6JGj+?GPAoi)^QY7M0GQKlqkgw>=;ZY0h@xrHy3?12H=4h_ws(ZJ z`$fV<)EfX^*5*U|`k5g2L&)co9xUMcobvo;WSZVRQJ0;@l_XU4nw+0PF*oqCAb-oPX7ji@~W<> zx2ziC@@}0`xi$RIS!Fe@q(yqP;Kz^Q)jX~9Nzm->nU1=^liNNdSuDQ zpZ95&kd0N{*sZyF9OVA@)}$51nM}$>qwDtB z50x1GYWCBJ*7tQDUW5HvCXkNIOy#T>dNEIuhF>RIL#x~E;8TWh;s}F2si91|WCZ6+ z^V=I&XhB{4An&NAz}w4L$bDY^{pT_#R$n(m!|h?6*;Q1p&iI-w*%i&p`Zc0>^G`Kz z5BFT%`TIvWzsg%r(sq4@e0J@+v~T|oQ2XG_`LDpwFV}Z}X(iwF`_KRWYGwxX-wVQA zNB{kXFz=>+Z<(z}%D>ML=0$k(??aV&6^{RV$}q3OzsD}~BK$inFfYQt!@|}@_;*;? zx(fde3tLy=-(i7y5&j((w!RAgw}u75DaH=XaX!@p*CDK#_^qY*FUQohO9tYJn2_FEoTQqzpmET_yQjt`TPrZEsg)y a&0s4n5h{i^_sDPkP+e79rSQh@5B~=~3v_S* literal 0 HcmV?d00001 diff --git a/images/Remote-connection.png b/images/Remote-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..b7db20314cada210f3b2833d247ef68e82620be1 GIT binary patch literal 87268 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 NrDyn4xy~<9{{u8XPMZJ# literal 0 HcmV?d00001 diff --git a/images/Streaming-Server-Link.png b/images/Streaming-Server-Link.png new file mode 100644 index 0000000000000000000000000000000000000000..f369d580bcab8beda2f3b1f01e3ee2d1a911d7dd GIT binary patch literal 87385 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 literal 0 HcmV?d00001 From bdf184c194454b631e05842d75716b7c02aa8700 Mon Sep 17 00:00:00 2001 From: shivasiddharth Date: Sat, 13 Nov 2021 19:56:16 +0530 Subject: [PATCH 2/8] Update README.md Testing banner palcement --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 56e757a..8929875 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +![github-small](https://github.com/shivasiddharth/Stremio-RaspberryPi/blob/Awesome/images/Banner.jpg) + + ## **If you like the work and if you would like to get me a :coffee: :smile:** [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7GH3YDCHZ36QN) From f5056597b36a90d207e346d56801e8d84c42e903 Mon Sep 17 00:00:00 2001 From: shivasiddharth Date: Sat, 13 Nov 2021 21:32:59 +0530 Subject: [PATCH 3/8] Remove clutter --- README.md | 163 +- Requirements.txt | 10 - scripts/Stremio-Client-Service-Shortcut.sh | 3 - scripts/Stremio-Server-Service-Shortcut.sh | 3 - scripts/installer.sh | 52 - scripts/service-installer.sh | 27 - src/client-launcher.sh | 9 - src/server-launcher.sh | 9 - stremio-shell/.dockerignore | 2 - stremio-shell/.gitignore | 50 - stremio-shell/.gitmodules | 10 - stremio-shell/AppImage.makefile | 55 - stremio-shell/Info.plist | 74 - stremio-shell/LICENSE.md | 595 - stremio-shell/autoupdater.cpp | 346 - stremio-shell/autoupdater.h | 111 - stremio-shell/autoupdater.js | 184 - stremio-shell/build_windows.bat | 17 - stremio-shell/deployment.pri | 17 - .../deps/chroma/ChromaSDK/ChromaAppInfo.xml | 8 - .../chroma/ChromaSDK/inc/RzChromaSDKDefines.h | 153 - .../chroma/ChromaSDK/inc/RzChromaSDKTypes.h | 785 - .../deps/chroma/ChromaSDK/inc/RzErrors.h | 46 - stremio-shell/deps/chroma/ChromaSDKImpl.cpp | 1739 - stremio-shell/deps/chroma/ChromaSDKImpl.h | 54 - stremio-shell/deps/chroma/README.md | 16 - stremio-shell/deps/chroma/chroma.cpp | 960 - stremio-shell/deps/chroma/chroma.h | 58 - stremio-shell/deps/chroma/chroma.pri | 10 - stremio-shell/deps/libmpv/README.md | 55 - .../deps/libmpv/include/mpv/client.h | 1875 - stremio-shell/deps/libmpv/include/mpv/mpv.def | 58 - .../deps/libmpv/include/mpv/mpv.pc.in | 12 - .../deps/libmpv/include/mpv/opengl_cb.h | 339 - .../deps/libmpv/include/mpv/qthelper.hpp | 380 - .../deps/libmpv/include/mpv/render.h | 596 - .../deps/libmpv/include/mpv/render_gl.h | 191 - .../deps/libmpv/include/mpv/stream_cb.h | 229 - stremio-shell/deps/libmpv/mac/bin/ffmpeg | Bin 254612 -> 0 bytes stremio-shell/deps/libmpv/mpv.def | 59 - stremio-shell/deps/libmpv/win32-x64/mpv.lib | Bin 14354 -> 0 bytes stremio-shell/deps/libmpv/win32/mpv.lib | Bin 14632 -> 0 bytes .../deps/singleapplication/CHANGELOG.md | 141 - stremio-shell/deps/singleapplication/LICENSE | 24 - .../deps/singleapplication/README.md | 274 - .../examples/basic/basic.pro | 5 - .../singleapplication/examples/basic/main.cpp | 9 - .../examples/calculator/button.cpp | 73 - .../examples/calculator/button.h | 68 - .../examples/calculator/calculator.cpp | 406 - .../examples/calculator/calculator.h | 117 - .../examples/calculator/calculator.pro | 11 - .../examples/calculator/main.cpp | 71 - .../examples/sending_arguments/main.cpp | 25 - .../sending_arguments/messagereceiver.cpp | 12 - .../sending_arguments/messagereceiver.h | 15 - .../sending_arguments/sending_arguments.pro | 9 - .../singleapplication/singleapplication.cpp | 450 - .../singleapplication/singleapplication.h | 129 - .../singleapplication/singleapplication.pri | 13 - .../singleapplication/singleapplication_p.h | 77 - stremio-shell/dist-utils/build-package.sh | 97 - stremio-shell/dist-utils/common/description | 1 - stremio-shell/dist-utils/common/postinstall | 17 - stremio-shell/dist-utils/common/preremove | 17 - stremio-shell/distros/ArchLinux/Dockerfile | 17 - stremio-shell/distros/ArchLinux/PKGBUILD | 54 - stremio-shell/distros/ArchLinux/mkconfig.sh | 9 - stremio-shell/distros/ArchLinux/package.sh | 9 - .../distros/ArchLinux/stremio.install.tpl | 5 - stremio-shell/distros/Fedora/Dockerfile | 17 - stremio-shell/distros/Fedora/mkconfig.sh | 13 - stremio-shell/distros/Fedora/package.sh | 8 - stremio-shell/distros/Fedora/stremio.spec.tpl | 62 - stremio-shell/distros/Ubuntu/Dockerfile | 16 - stremio-shell/distros/Ubuntu/mkconfig.sh | 3 - stremio-shell/distros/Ubuntu/package.sh | 22 - stremio-shell/images/stremio.icns | Bin 28617 -> 0 bytes stremio-shell/images/stremio.ico | Bin 22184 -> 0 bytes stremio-shell/images/stremio.png | Bin 11377 -> 0 bytes stremio-shell/images/stremio.svg | 1 - stremio-shell/images/stremio_tray_black.png | Bin 4771 -> 0 bytes stremio-shell/images/stremio_tray_black.svg | 1 - stremio-shell/images/stremio_tray_white.png | Bin 2952 -> 0 bytes stremio-shell/images/stremio_tray_white.svg | 1 - stremio-shell/images/stremio_window.png | Bin 16678 -> 0 bytes stremio-shell/main.cpp | 115 - stremio-shell/main.qml | 616 - stremio-shell/mainapplication.h | 55 - stremio-shell/mpv.cpp | 283 - stremio-shell/mpv.h | 48 - stremio-shell/publickey.h | 14 - stremio-shell/qclipboardproxy.cpp | 31 - stremio-shell/qclipboardproxy.h | 26 - stremio-shell/qml.qrc | 10 - stremio-shell/razerchroma.cpp | 59 - stremio-shell/razerchroma.h | 23 - stremio-shell/release.makefile | 40 - stremio-shell/screensaver.cpp | 333 - stremio-shell/screensaver.h | 44 - stremio-shell/server.js | 156784 --------------- stremio-shell/smartcode-stremio.desktop | 10 - stremio-shell/sslcerts/ca.crt | 23 - stremio-shell/sslcerts/ca.csr | 19 - stremio-shell/sslcerts/ca.key | 27 - stremio-shell/sslcerts/ca.srl | 1 - stremio-shell/sslcerts/stremio-server.crt | 22 - stremio-shell/stremio.asar | Bin 6548534 -> 0 bytes stremio-shell/stremio.desktop | 10 - stremio-shell/stremio.pro | 97 - stremio-shell/stremioprocess.cpp | 118 - stremio-shell/stremioprocess.h | 37 - stremio-shell/systemtray.cpp | 89 - stremio-shell/systemtray.h | 39 - stremio-shell/verifysig.c | 79 - stremio-shell/verifysig.h | 22 - systemd/stremio-client.service | 14 - systemd/stremio-server.service | 12 - 118 files changed, 99 insertions(+), 170660 deletions(-) delete mode 100644 Requirements.txt delete mode 100644 scripts/Stremio-Client-Service-Shortcut.sh delete mode 100644 scripts/Stremio-Server-Service-Shortcut.sh delete mode 100644 scripts/installer.sh delete mode 100644 scripts/service-installer.sh delete mode 100644 src/client-launcher.sh delete mode 100644 src/server-launcher.sh delete mode 100644 stremio-shell/.dockerignore delete mode 100644 stremio-shell/.gitignore delete mode 100644 stremio-shell/.gitmodules delete mode 100644 stremio-shell/AppImage.makefile delete mode 100644 stremio-shell/Info.plist delete mode 100644 stremio-shell/LICENSE.md delete mode 100644 stremio-shell/autoupdater.cpp delete mode 100644 stremio-shell/autoupdater.h delete mode 100644 stremio-shell/autoupdater.js delete mode 100644 stremio-shell/build_windows.bat delete mode 100644 stremio-shell/deployment.pri delete mode 100644 stremio-shell/deps/chroma/ChromaSDK/ChromaAppInfo.xml delete mode 100644 stremio-shell/deps/chroma/ChromaSDK/inc/RzChromaSDKDefines.h delete mode 100644 stremio-shell/deps/chroma/ChromaSDK/inc/RzChromaSDKTypes.h delete mode 100644 stremio-shell/deps/chroma/ChromaSDK/inc/RzErrors.h delete mode 100644 stremio-shell/deps/chroma/ChromaSDKImpl.cpp delete mode 100644 stremio-shell/deps/chroma/ChromaSDKImpl.h delete mode 100644 stremio-shell/deps/chroma/README.md delete mode 100644 stremio-shell/deps/chroma/chroma.cpp delete mode 100644 stremio-shell/deps/chroma/chroma.h delete mode 100644 stremio-shell/deps/chroma/chroma.pri delete mode 100644 stremio-shell/deps/libmpv/README.md delete mode 100644 stremio-shell/deps/libmpv/include/mpv/client.h delete mode 100644 stremio-shell/deps/libmpv/include/mpv/mpv.def delete mode 100644 stremio-shell/deps/libmpv/include/mpv/mpv.pc.in delete mode 100644 stremio-shell/deps/libmpv/include/mpv/opengl_cb.h delete mode 100644 stremio-shell/deps/libmpv/include/mpv/qthelper.hpp delete mode 100644 stremio-shell/deps/libmpv/include/mpv/render.h delete mode 100644 stremio-shell/deps/libmpv/include/mpv/render_gl.h delete mode 100644 stremio-shell/deps/libmpv/include/mpv/stream_cb.h delete mode 100644 stremio-shell/deps/libmpv/mac/bin/ffmpeg delete mode 100644 stremio-shell/deps/libmpv/mpv.def delete mode 100644 stremio-shell/deps/libmpv/win32-x64/mpv.lib delete mode 100644 stremio-shell/deps/libmpv/win32/mpv.lib delete mode 100644 stremio-shell/deps/singleapplication/CHANGELOG.md delete mode 100644 stremio-shell/deps/singleapplication/LICENSE delete mode 100644 stremio-shell/deps/singleapplication/README.md delete mode 100644 stremio-shell/deps/singleapplication/examples/basic/basic.pro delete mode 100644 stremio-shell/deps/singleapplication/examples/basic/main.cpp delete mode 100644 stremio-shell/deps/singleapplication/examples/calculator/button.cpp delete mode 100644 stremio-shell/deps/singleapplication/examples/calculator/button.h delete mode 100644 stremio-shell/deps/singleapplication/examples/calculator/calculator.cpp delete mode 100644 stremio-shell/deps/singleapplication/examples/calculator/calculator.h delete mode 100644 stremio-shell/deps/singleapplication/examples/calculator/calculator.pro delete mode 100644 stremio-shell/deps/singleapplication/examples/calculator/main.cpp delete mode 100644 stremio-shell/deps/singleapplication/examples/sending_arguments/main.cpp delete mode 100644 stremio-shell/deps/singleapplication/examples/sending_arguments/messagereceiver.cpp delete mode 100644 stremio-shell/deps/singleapplication/examples/sending_arguments/messagereceiver.h delete mode 100644 stremio-shell/deps/singleapplication/examples/sending_arguments/sending_arguments.pro delete mode 100644 stremio-shell/deps/singleapplication/singleapplication.cpp delete mode 100644 stremio-shell/deps/singleapplication/singleapplication.h delete mode 100644 stremio-shell/deps/singleapplication/singleapplication.pri delete mode 100644 stremio-shell/deps/singleapplication/singleapplication_p.h delete mode 100644 stremio-shell/dist-utils/build-package.sh delete mode 100644 stremio-shell/dist-utils/common/description delete mode 100644 stremio-shell/dist-utils/common/postinstall delete mode 100644 stremio-shell/dist-utils/common/preremove delete mode 100644 stremio-shell/distros/ArchLinux/Dockerfile delete mode 100644 stremio-shell/distros/ArchLinux/PKGBUILD delete mode 100644 stremio-shell/distros/ArchLinux/mkconfig.sh delete mode 100644 stremio-shell/distros/ArchLinux/package.sh delete mode 100644 stremio-shell/distros/ArchLinux/stremio.install.tpl delete mode 100644 stremio-shell/distros/Fedora/Dockerfile delete mode 100644 stremio-shell/distros/Fedora/mkconfig.sh delete mode 100644 stremio-shell/distros/Fedora/package.sh delete mode 100644 stremio-shell/distros/Fedora/stremio.spec.tpl delete mode 100644 stremio-shell/distros/Ubuntu/Dockerfile delete mode 100644 stremio-shell/distros/Ubuntu/mkconfig.sh delete mode 100644 stremio-shell/distros/Ubuntu/package.sh delete mode 100644 stremio-shell/images/stremio.icns delete mode 100644 stremio-shell/images/stremio.ico delete mode 100644 stremio-shell/images/stremio.png delete mode 100644 stremio-shell/images/stremio.svg delete mode 100644 stremio-shell/images/stremio_tray_black.png delete mode 100644 stremio-shell/images/stremio_tray_black.svg delete mode 100644 stremio-shell/images/stremio_tray_white.png delete mode 100644 stremio-shell/images/stremio_tray_white.svg delete mode 100644 stremio-shell/images/stremio_window.png delete mode 100644 stremio-shell/main.cpp delete mode 100644 stremio-shell/main.qml delete mode 100644 stremio-shell/mainapplication.h delete mode 100644 stremio-shell/mpv.cpp delete mode 100644 stremio-shell/mpv.h delete mode 100644 stremio-shell/publickey.h delete mode 100644 stremio-shell/qclipboardproxy.cpp delete mode 100644 stremio-shell/qclipboardproxy.h delete mode 100644 stremio-shell/qml.qrc delete mode 100644 stremio-shell/razerchroma.cpp delete mode 100644 stremio-shell/razerchroma.h delete mode 100644 stremio-shell/release.makefile delete mode 100644 stremio-shell/screensaver.cpp delete mode 100644 stremio-shell/screensaver.h delete mode 100644 stremio-shell/server.js delete mode 100644 stremio-shell/smartcode-stremio.desktop delete mode 100644 stremio-shell/sslcerts/ca.crt delete mode 100644 stremio-shell/sslcerts/ca.csr delete mode 100644 stremio-shell/sslcerts/ca.key delete mode 100644 stremio-shell/sslcerts/ca.srl delete mode 100644 stremio-shell/sslcerts/stremio-server.crt delete mode 100644 stremio-shell/stremio.asar delete mode 100644 stremio-shell/stremio.desktop delete mode 100644 stremio-shell/stremio.pro delete mode 100644 stremio-shell/stremioprocess.cpp delete mode 100644 stremio-shell/stremioprocess.h delete mode 100644 stremio-shell/systemtray.cpp delete mode 100644 stremio-shell/systemtray.h delete mode 100644 stremio-shell/verifysig.c delete mode 100644 stremio-shell/verifysig.h delete mode 100644 systemd/stremio-client.service delete mode 100644 systemd/stremio-server.service diff --git a/README.md b/README.md index 8929875..fb864e1 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,103 @@ -![github-small](https://github.com/shivasiddharth/Stremio-RaspberryPi/blob/Awesome/images/Banner.jpg) - +# Stremio-RaspberryPi +![github-small](https://github.com/shivasiddharth/Stremio-RaspberryPi/blob/Awesome/images/Banner.jpg) ## **If you like the work and if you would like to get me a :coffee: :smile:** [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7GH3YDCHZ36QN) - -# Stremio-RaspberryPi - -## Steps to run Stremio in Raspberry Pi - -### Clone the git project -``` -git clone https://github.com/shivasiddharth/Stremio-RaspberryPi -``` - -### Make the scripts executable -``` -sudo chmod +x /home/${USER}/Stremio-RaspberryPi/scripts/installer.sh -sudo chmod +x /home/${USER}/Stremio-RaspberryPi/scripts/service-installer.sh -sudo chmod +x /home/${USER}/Stremio-RaspberryPi/src/server-launcher.sh -sudo chmod +x /home/${USER}/Stremio-RaspberryPi/src/client-launcher.sh -``` - -### Run the installer -``` -sudo /home/${USER}/Stremio-RaspberryPi/scripts/installer.sh -``` - -### After the installation, try opening the Stremio server and client manually using the following commands or use the Launcher Shortcuts created on the desktop -Open first terminal and run -``` -/home/${USER}/Stremio-RaspberryPi/src/server-launcher.sh -``` - -Open second terminal and run -``` -/home/${USER}/Stremio-RaspberryPi/src/client-launcher.sh -``` - -### After verification if desired, set Stremio to auto start on boot -There will be a minor delay ~1Min between the launch of Server Service and Client Service. This is to ensure that the Client starts after the Server. -Run the service installer -``` -sudo /home/${USER}/Stremio-RaspberryPi/scripts/service-installer.sh -``` - -Enable and start the service -``` -systemctl --user enable stremio-server.service -systemctl --user enable stremio-client.service -systemctl --user start stremio-server.service -systemctl --user start stremio-client.service -``` - -### Fix for screen tearing -Open a terminal and run -``` -sudo raspi-config -``` -In that, Navigate to Advanced Options -> Compositor -> xcompmgr composition manager -> Choose “No” - - -### Note - - If you have closed or stopped the background Stremio services, then if you wish to start them again, you can use the service desktop shortcuts. - - You can manually start the Stremio server and client using the Stremio Launcher desktop shortcuts. - - If your cursor is stuck after running ```systemctl --user start stremio-server.service```, press Ctrl+C on keyboard to break free. - - You can access Stremio on Apple iPads and iPhones with the server running on Raspberry Pi. Refer to https://www.youtube.com/watch?v=cYmpVh_GWJg +## Installation Using Binaries +1. Download the Zip files containing the binaries from the Releases section. +2. Place it in the /home/${USER}/ directory. +3. Add Debian sources as given below: + Buster Users: + ``` + echo "deb http://ftp.us.debian.org/debian/ buster main contrib non-free" >> /etc/apt/sources.list + echo "deb http://deb.debian.org/debian buster main contrib non-free" >> /etc/apt/sources.list + sudo apt-get update + ``` + Bullseye Users: + ``` + echo "deb http://ftp.us.debian.org/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list + echo "deb http://deb.debian.org/debian bullseye main contrib non-free" >> /etc/apt/sources.list + sudo apt-get update + ``` +4. Change directory as given below: + 64-Bit Users: + ``` + cd /home/${USER}/Stremio-4.4.142-arm64-64-bit/ + ``` + 32-Bit Users: + ``` + cd /home/${USER}/Stremio-4.4.142-armhf-32-bit/ + ``` +5. Perform the installation as given below (Replace x.x.xxx with the version numbers on the file): + 64-Bit Users: + ``` + sudo apt-get install ./libfdk-aac1_0.1.6-1_arm64.deb ./stremio_x.x.xxx-1_arm64.deb -f + ``` + 32-Bit Users: + ``` + sudo apt-get install ./libfdk-aac1_0.1.6-1_armhf.deb ./stremio_x.x.xxx-1_armhf.deb -f + ``` +6. Now you should have Stremio installed. Grab some snacks and enjoy the show. + + +## Building from source +1. Add Debian sources as given below: + Buster Users: + ``` + echo "deb http://ftp.us.debian.org/debian/ buster main contrib non-free" >> /etc/apt/sources.list + echo "deb http://deb.debian.org/debian buster main contrib non-free" >> /etc/apt/sources.list + sudo apt-get update + ``` + Bullseye Users: + ``` + echo "deb http://ftp.us.debian.org/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list + echo "deb http://deb.debian.org/debian bullseye main contrib non-free" >> /etc/apt/sources.list + sudo apt-get update + ``` +2. Clone the stremio-shell using: + ``` + git clone --recurse-submodules -j8 git://github.com/shivasiddharth/stremio-shell.git + ``` +3. Change directory using: + ``` + cd /home/${USER}/stremio-shell/ + ``` +4. Install dependencies using: + ``` + sed 's/#.*//' ./Requirements.txt | xargs sudo apt-get install -y + ``` +5. Make using: + ``` + qmake + ``` +6. Build binaries using: + ``` + make -f release.makefile + ``` +7. Prepare server using: + ``` + cp ./server.js ./build/ && ln -s "$(which node)" ./build/node + ``` +8. Run Stremio using: + ``` + ./build/stremio + ``` + or + ``` + /home/${USER}/stremio-shell/build/stremio + ``` + + +## Note +1. After the ```sudo apt-get update``` command for adding sources, if you get a key error like shown below: + ![github-small](https://github.com/shivasiddharth/Stremio-RaspberryPi/blob/Awesome/images/Key_Error.png) + Fix the issue using (Replace XXXXXXXXXXXX with the first alphanumeric character key): + ``` + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXXXXXXXXXXX + ``` +2. For remote access of server, go into setting and select your IP address from the **Enable remote HTTPS connections** dropdown menu as shown below. + ![github-small](https://github.com/shivasiddharth/Stremio-RaspberryPi/blob/Awesome/images/Remote-connection.png) +3. For accessing the Stremio server remotely and securely (Expecially from Apple devices), use the **Streaming HTTPS endpoint:** link as shown below. + ![github-small](https://github.com/shivasiddharth/Stremio-RaspberryPi/blob/Awesome/images/Streaming-Server-Link.png) + diff --git a/Requirements.txt b/Requirements.txt deleted file mode 100644 index 61eb2dc..0000000 --- a/Requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -qtcreator -qt5-qmake -qtbase5-dev -qtchooser -qtbase5-dev-tools -g++ -pkgconf -libssl-dev -libmpv-dev -nodejs diff --git a/scripts/Stremio-Client-Service-Shortcut.sh b/scripts/Stremio-Client-Service-Shortcut.sh deleted file mode 100644 index e8dd50e..0000000 --- a/scripts/Stremio-Client-Service-Shortcut.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -systemctl --user restart stremio-client.service diff --git a/scripts/Stremio-Server-Service-Shortcut.sh b/scripts/Stremio-Server-Service-Shortcut.sh deleted file mode 100644 index ecf4024..0000000 --- a/scripts/Stremio-Server-Service-Shortcut.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -systemctl --user restart stremio-server.service diff --git a/scripts/installer.sh b/scripts/installer.sh deleted file mode 100644 index 0e917c8..0000000 --- a/scripts/installer.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# -# Script for running Stremio on Raspberry Pi boards -# -# Written by https://github.com/shivasiddharth - -echo "" -echo "" -set -o errexit - -scripts_dir="$(dirname "${BASH_SOURCE[0]}")" -GIT_DIR="$(realpath $(dirname ${BASH_SOURCE[0]})/..)" - -# make sure we're running as the owner of the checkout directory -RUN_AS="$(ls -ld "$scripts_dir" | awk 'NR==1 {print $3}')" -if [ "$USER" != "$RUN_AS" ] -then - echo "This script must run as $RUN_AS, trying to change user..." - exec sudo -u $RUN_AS $0 -fi -echo "Get your popcorn while we prep your Pi......" -echo "" -echo "" -echo "Updating the OS......." -echo "" -sudo apt-get update -y -echo "" -echo "Installing required packages........" -echo "" -sed 's/#.*//' ${GIT_DIR}/Requirements.txt | xargs sudo apt-get install -y -echo "" -echo "Finished installing the packages........" -echo "" -echo "Changing username in the service files........" -echo "" -sed -i 's/__USER__/'${USER}'/g' ${GIT_DIR}/systemd/stremio-client.service -sed -i 's/__USER__/'${USER}'/g' ${GIT_DIR}/systemd/stremio-server.service -echo "" -echo "Creating desktop shortcuts ............." -echo "" -echo "" -sudo chmod +x ${GIT_DIR}/scripts/Stremio-Server-Service-Shortcut.sh -sudo chmod +x ${GIT_DIR}/scripts/Stremio-Client-Service-Shortcut.sh -sudo chmod +x ${GIT_DIR}/src/client-launcher.sh -sudo chmod +x ${GIT_DIR}/src/server-launcher.sh -sudo \cp ${GIT_DIR}/scripts/Stremio-Server-Service-Shortcut.sh /home/${USER}/Desktop/Stremio-Server-Service -sudo \cp ${GIT_DIR}/scripts/Stremio-Client-Service-Shortcut.sh /home/${USER}/Desktop/Stremio-Client-Service -sudo \cp ${GIT_DIR}/src/server-launcher.sh /home/${USER}/Desktop/Stremio-Server-Launcher -sudo \cp ${GIT_DIR}/src/client-launcher.sh /home/${USER}/Desktop/Stremio-Client-Launcher -echo "" -echo "" -echo "Finished installing. Sit back and enjoy the show............." diff --git a/scripts/service-installer.sh b/scripts/service-installer.sh deleted file mode 100644 index 2b524da..0000000 --- a/scripts/service-installer.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# -# Install systemd service files for running on startup. -# -# Written by https://github.com/shivasiddharth - -set -o errexit - -if [[ $EUID -ne 0 ]]; then - echo "This script must be run as root (use sudo)" 1>&2 - exit 1 -fi - -#Get the checkout directory -GIT_DIR="$(realpath $(dirname ${BASH_SOURCE[0]})/..)" - -#Get the owner of the checkout directory -GIT_OWNER="$(ls -ld "$GIT_DIR" | awk 'NR==1 {print $3}')" - -cd "$(dirname "${BASH_SOURCE[0]}")/.." -repo_path="$PWD" - - -for service in systemd/*.service; do - sed "s:/home/__USER__/Stremio-RaspberryPi:${repo_path}:g;s:__USER__:${GIT_OWNER}:g" "$service" \ - > "/etc/systemd/user/$(basename "$service")" -done diff --git a/src/client-launcher.sh b/src/client-launcher.sh deleted file mode 100644 index 7610bea..0000000 --- a/src/client-launcher.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -# -# Script to launch Stremio web interface in kiosk mode -# -# Written by https://github.com/shivasiddharth - - -# Run Chromium and open tabs -/usr/bin/chromium-browser --app=https://app.strem.io/shell-v4.4/ --window-position=0,0 --start-fullscreen --use-gl=angle diff --git a/src/server-launcher.sh b/src/server-launcher.sh deleted file mode 100644 index d9672f9..0000000 --- a/src/server-launcher.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -# -# Script to launch Stremio server -# -# Written by https://github.com/shivasiddharth - -# Start the server -cd /home/pi/Stremio-RaspberryPi/stremio-shell/ -node ./server.js diff --git a/stremio-shell/.dockerignore b/stremio-shell/.dockerignore deleted file mode 100644 index 04a67d4..0000000 --- a/stremio-shell/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -dist-linux/* -Makefile diff --git a/stremio-shell/.gitignore b/stremio-shell/.gitignore deleted file mode 100644 index bc180eb..0000000 --- a/stremio-shell/.gitignore +++ /dev/null @@ -1,50 +0,0 @@ - -*.slo -*.lo -*.o -*.a -*.la -*.lai -*.so -*.dll -*.dylib - -# Qt-es - -.qmake.cache -.qmake.stash -*.pro.user -*.pro.user.* -*.qbs.user -*.qbs.user.* -*.moc -moc_*.cpp -qrc_*.cpp -ui_*.h -Makefile* -build-*/ -stremio.app/* -/build/* -moc_*.h - -# QtCreator - -*.autosave - -# QtCtreator Qml -*.qmlproject.user -*.qmlproject.user.* - -# QtCtreator CMake -CMakeLists.txt.user* - - -.DS_Store - -debug/* -release/* - -moc_predefs\.h - -# binary on Linux -stremio diff --git a/stremio-shell/.gitmodules b/stremio-shell/.gitmodules deleted file mode 100644 index 287b88c..0000000 --- a/stremio-shell/.gitmodules +++ /dev/null @@ -1,10 +0,0 @@ -[submodule "deps/libmpv"] - path = deps/libmpv - url = https://github.com/Ivshti/libmpv -[submodule "deps/singleapplication"] - path = deps/singleapplication - url = http://github.com/itay-grudev/SingleApplication -[submodule "deps/chroma"] - path = deps/chroma - url = https://github.com/Ivshti/razerchroma - diff --git a/stremio-shell/AppImage.makefile b/stremio-shell/AppImage.makefile deleted file mode 100644 index 83c0f57..0000000 --- a/stremio-shell/AppImage.makefile +++ /dev/null @@ -1,55 +0,0 @@ - -VERSION := $(shell grep -oPm1 'VERSION=\K.+' stremio.pro) - -NSS_DIR := /usr/lib/x86_64-linux-gnu/nss - -DEST_DIR := dist-linux -BUILD_DIR := build -RELEASE_DIR := release - -QT_BIN_PATH ?= /usr/share/qt5 - -ICON_BIN := images/stremio.png - -SERVER_JS := ${DEST_DIR}/server.js -STREMIO_DESKTOP := stremio.desktop - -STREMIO_BIN := ${BUILD_DIR}/stremio -NODE_BIN := $(shell which node) -FFMPEG_BIN := $(shell which ffmpeg) - -QT_RESOURCES = ${QT_BIN_PATH}/resources -QT_TRANSLATIONS = ${QT_BIN_PATH}/translations - - -APPIMAGE_FILE := Stremio-v${VERSION}-x86_64.AppImage - - -ALL: ${APPIMAGE_FILE} - -${DEST_DIR}: ${STREMIO_BIN} ${NODE_BIN} ${FFMPEG_BIN} ${ICON_BIN} ${STREMIO_DESKTOP} ${QT_RESOURCES} ${QT_TRANSLATIONS} - mkdir -p ${DEST_DIR}/lib - cp -r $^ ${DEST_DIR}/ - cp -r ${NSS_DIR} ${DEST_DIR}/lib/ - -${APPIMAGE_FILE}: ${SERVER_JS} linuxdeployqt - ./linuxdeployqt --appimage-extract - #This will create Stremio-x86_64.AppImage - ./squashfs-root/AppRun ${DEST_DIR}/stremio -qmldir=. -bundle-non-qt-libs -appimage - -${SERVER_JS}: ${DEST_DIR} - wget "https://s3-eu-west-1.amazonaws.com/stremio-artifacts/four/v${VERSION}/server.js" -qO ${SERVER_JS} || rm ${SERVER_JS} - -linuxdeployqt: - wget "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" -qO $@ || rm $@ - chmod 700 $@ - -clean: - rm -rf linuxdeployqt ${BUILD_DIR} ${DEST_DIR} ${RELEASE_DIR} ${APPIMAGE_FILE} - -${STREMIO_BIN}: ${BUILD_DIR} - cd ${BUILD_DIR} && qmake .. && make -j - -${BUILD_DIR}: - mkdir ${BUILD_DIR} - diff --git a/stremio-shell/Info.plist b/stremio-shell/Info.plist deleted file mode 100644 index 44873a2..0000000 --- a/stremio-shell/Info.plist +++ /dev/null @@ -1,74 +0,0 @@ - - - - - NSPrincipalClass - NSApplication - CFBundleIconFile - @ICON@ - CFBundlePackageType - APPL - CFBundleGetInfoString - Stremio from Smart Code LTD @2019 - CFBundleSignature - ???? - CFBundleExecutable - @EXECUTABLE@ - CFBundleIdentifier - @BUNDLEIDENTIFIER@ - NOTE - Watch Instantly All the Video Content You Enjoy in One Place - NSHumanReadableCopyright - (c) 2019 Smart Code LTD - CFBundleVersion - @FULL_VERSION@ - CFBundleURLTypes - - - CFBundleTypeRole - Viewer - CFBundleURLIconFile - stremio - CFBundleURLName - Stremio URL - CFBundleURLSchemes - - stremio - - - - CFBundleTypeRole - Viewer - CFBundleURLIconFile - stremio - CFBundleURLName - BitTorrent Magnet URL - CFBundleURLSchemes - - magnet - - - - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - torrent - - CFBundleTypeIconFile - stremio - CFBundleTypeName - BitTorrent Document - CFBundleTypeRole - Viewer - LSTypeIsPackage - - NSPersistentStoreTypeKey - XML - - - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/stremio-shell/LICENSE.md b/stremio-shell/LICENSE.md deleted file mode 100644 index 175443c..0000000 --- a/stremio-shell/LICENSE.md +++ /dev/null @@ -1,595 +0,0 @@ -GNU General Public License -========================== - -_Version 3, 29 June 2007_ -_Copyright © 2007 Free Software Foundation, Inc. <>_ - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -## Preamble - -The GNU General Public License is a free, copyleft license for software and other -kinds of works. - -The licenses for most software and other practical works are designed to take away -your freedom to share and change the works. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change all versions of a -program--to make sure it remains free software for all its users. We, the Free -Software Foundation, use the GNU General Public License for most of our software; it -applies also to any other work released this way by its authors. You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General -Public Licenses are designed to make sure that you have the freedom to distribute -copies of free software (and charge for them if you wish), that you receive source -code or can get it if you want it, that you can change the software or use pieces of -it in new free programs, and that you know you can do these things. - -To protect your rights, we need to prevent others from denying you these rights or -asking you to surrender the rights. Therefore, you have certain responsibilities if -you distribute copies of the software, or if you modify it: responsibilities to -respect the freedom of others. - -For example, if you distribute copies of such a program, whether gratis or for a fee, -you must pass on to the recipients the same freedoms that you received. You must make -sure that they, too, receive or can get the source code. And you must show them these -terms so they know their rights. - -Developers that use the GNU GPL protect your rights with two steps: **(1)** assert -copyright on the software, and **(2)** offer you this License giving you legal permission -to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains that there is -no warranty for this free software. For both users' and authors' sake, the GPL -requires that modified versions be marked as changed, so that their problems will not -be attributed erroneously to authors of previous versions. - -Some devices are designed to deny users access to install or run modified versions of -the software inside them, although the manufacturer can do so. This is fundamentally -incompatible with the aim of protecting users' freedom to change the software. The -systematic pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we have designed -this version of the GPL to prohibit the practice for those products. If such problems -arise substantially in other domains, we stand ready to extend this provision to -those domains in future versions of the GPL, as needed to protect the freedom of -users. - -Finally, every program is threatened constantly by software patents. States should -not allow patents to restrict development and use of software on general-purpose -computers, but in those that do, we wish to avoid the special danger that patents -applied to a free program could make it effectively proprietary. To prevent this, the -GPL assures that patents cannot be used to render the program non-free. - -The precise terms and conditions for copying, distribution and modification follow. - -## TERMS AND CONDITIONS - -### 0. Definitions - -“This License” refers to version 3 of the GNU General Public License. - -“Copyright” also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - -“The Program” refers to any copyrightable work licensed under this -License. Each licensee is addressed as “you”. “Licensees” and -“recipients” may be individuals or organizations. - -To “modify” a work means to copy from or adapt all or part of the work in -a fashion requiring copyright permission, other than the making of an exact copy. The -resulting work is called a “modified version” of the earlier work or a -work “based on” the earlier work. - -A “covered work” means either the unmodified Program or a work based on -the Program. - -To “propagate” a work means to do anything with it that, without -permission, would make you directly or secondarily liable for infringement under -applicable copyright law, except executing it on a computer or modifying a private -copy. Propagation includes copying, distribution (with or without modification), -making available to the public, and in some countries other activities as well. - -To “convey” a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through a computer -network, with no transfer of a copy, is not conveying. - -An interactive user interface displays “Appropriate Legal Notices” to the -extent that it includes a convenient and prominently visible feature that **(1)** -displays an appropriate copyright notice, and **(2)** tells the user that there is no -warranty for the work (except to the extent that warranties are provided), that -licensees may convey the work under this License, and how to view a copy of this -License. If the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - -### 1. Source Code - -The “source code” for a work means the preferred form of the work for -making modifications to it. “Object code” means any non-source form of a -work. - -A “Standard Interface” means an interface that either is an official -standard defined by a recognized standards body, or, in the case of interfaces -specified for a particular programming language, one that is widely used among -developers working in that language. - -The “System Libraries” of an executable work include anything, other than -the work as a whole, that **(a)** is included in the normal form of packaging a Major -Component, but which is not part of that Major Component, and **(b)** serves only to -enable use of the work with that Major Component, or to implement a Standard -Interface for which an implementation is available to the public in source code form. -A “Major Component”, in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system (if any) on which -the executable work runs, or a compiler used to produce the work, or an object code -interpreter used to run it. - -The “Corresponding Source” for a work in object code form means all the -source code needed to generate, install, and (for an executable work) run the object -code and to modify the work, including scripts to control those activities. However, -it does not include the work's System Libraries, or general-purpose tools or -generally available free programs which are used unmodified in performing those -activities but which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for the work, and -the source code for shared libraries and dynamically linked subprograms that the work -is specifically designed to require, such as by intimate data communication or -control flow between those subprograms and other parts of the work. - -The Corresponding Source need not include anything that users can regenerate -automatically from other parts of the Corresponding Source. - -The Corresponding Source for a work in source code form is that same work. - -### 2. Basic Permissions - -All rights granted under this License are granted for the term of copyright on the -Program, and are irrevocable provided the stated conditions are met. This License -explicitly affirms your unlimited permission to run the unmodified Program. The -output from running a covered work is covered by this License only if the output, -given its content, constitutes a covered work. This License acknowledges your rights -of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not convey, without -conditions so long as your license otherwise remains in force. You may convey covered -works to others for the sole purpose of having them make modifications exclusively -for you, or provide you with facilities for running those works, provided that you -comply with the terms of this License in conveying all material for which you do not -control copyright. Those thus making or running the covered works for you must do so -exclusively on your behalf, under your direction and control, on terms that prohibit -them from making any copies of your copyrighted material outside their relationship -with you. - -Conveying under any other circumstances is permitted solely under the conditions -stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - -### 3. Protecting Users' Legal Rights From Anti-Circumvention Law - -No covered work shall be deemed part of an effective technological measure under any -applicable law fulfilling obligations under article 11 of the WIPO copyright treaty -adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention -of such measures. - -When you convey a covered work, you waive any legal power to forbid circumvention of -technological measures to the extent such circumvention is effected by exercising -rights under this License with respect to the covered work, and you disclaim any -intention to limit operation or modification of the work as a means of enforcing, -against the work's users, your or third parties' legal rights to forbid circumvention -of technological measures. - -### 4. Conveying Verbatim Copies - -You may convey verbatim copies of the Program's source code as you receive it, in any -medium, provided that you conspicuously and appropriately publish on each copy an -appropriate copyright notice; keep intact all notices stating that this License and -any non-permissive terms added in accord with section 7 apply to the code; keep -intact all notices of the absence of any warranty; and give all recipients a copy of -this License along with the Program. - -You may charge any price or no price for each copy that you convey, and you may offer -support or warranty protection for a fee. - -### 5. Conveying Modified Source Versions - -You may convey a work based on the Program, or the modifications to produce it from -the Program, in the form of source code under the terms of section 4, provided that -you also meet all of these conditions: - -* **a)** The work must carry prominent notices stating that you modified it, and giving a -relevant date. -* **b)** The work must carry prominent notices stating that it is released under this -License and any conditions added under section 7. This requirement modifies the -requirement in section 4 to “keep intact all notices”. -* **c)** You must license the entire work, as a whole, under this License to anyone who -comes into possession of a copy. This License will therefore apply, along with any -applicable section 7 additional terms, to the whole of the work, and all its parts, -regardless of how they are packaged. This License gives no permission to license the -work in any other way, but it does not invalidate such permission if you have -separately received it. -* **d)** If the work has interactive user interfaces, each must display Appropriate Legal -Notices; however, if the Program has interactive interfaces that do not display -Appropriate Legal Notices, your work need not make them do so. - -A compilation of a covered work with other separate and independent works, which are -not by their nature extensions of the covered work, and which are not combined with -it such as to form a larger program, in or on a volume of a storage or distribution -medium, is called an “aggregate” if the compilation and its resulting -copyright are not used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work in an aggregate -does not cause this License to apply to the other parts of the aggregate. - -### 6. Conveying Non-Source Forms - -You may convey a covered work in object code form under the terms of sections 4 and -5, provided that you also convey the machine-readable Corresponding Source under the -terms of this License, in one of these ways: - -* **a)** Convey the object code in, or embodied in, a physical product (including a -physical distribution medium), accompanied by the Corresponding Source fixed on a -durable physical medium customarily used for software interchange. -* **b)** Convey the object code in, or embodied in, a physical product (including a -physical distribution medium), accompanied by a written offer, valid for at least -three years and valid for as long as you offer spare parts or customer support for -that product model, to give anyone who possesses the object code either **(1)** a copy of -the Corresponding Source for all the software in the product that is covered by this -License, on a durable physical medium customarily used for software interchange, for -a price no more than your reasonable cost of physically performing this conveying of -source, or **(2)** access to copy the Corresponding Source from a network server at no -charge. -* **c)** Convey individual copies of the object code with a copy of the written offer to -provide the Corresponding Source. This alternative is allowed only occasionally and -noncommercially, and only if you received the object code with such an offer, in -accord with subsection 6b. -* **d)** Convey the object code by offering access from a designated place (gratis or for -a charge), and offer equivalent access to the Corresponding Source in the same way -through the same place at no further charge. You need not require recipients to copy -the Corresponding Source along with the object code. If the place to copy the object -code is a network server, the Corresponding Source may be on a different server -(operated by you or a third party) that supports equivalent copying facilities, -provided you maintain clear directions next to the object code saying where to find -the Corresponding Source. Regardless of what server hosts the Corresponding Source, -you remain obligated to ensure that it is available for as long as needed to satisfy -these requirements. -* **e)** Convey the object code using peer-to-peer transmission, provided you inform -other peers where the object code and Corresponding Source of the work are being -offered to the general public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded from the -Corresponding Source as a System Library, need not be included in conveying the -object code work. - -A “User Product” is either **(1)** a “consumer product”, which -means any tangible personal property which is normally used for personal, family, or -household purposes, or **(2)** anything designed or sold for incorporation into a -dwelling. In determining whether a product is a consumer product, doubtful cases -shall be resolved in favor of coverage. For a particular product received by a -particular user, “normally used” refers to a typical or common use of -that class of product, regardless of the status of the particular user or of the way -in which the particular user actually uses, or expects or is expected to use, the -product. A product is a consumer product regardless of whether the product has -substantial commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - -“Installation Information” for a User Product means any methods, -procedures, authorization keys, or other information required to install and execute -modified versions of a covered work in that User Product from a modified version of -its Corresponding Source. The information must suffice to ensure that the continued -functioning of the modified object code is in no case prevented or interfered with -solely because modification has been made. - -If you convey an object code work under this section in, or with, or specifically for -use in, a User Product, and the conveying occurs as part of a transaction in which -the right of possession and use of the User Product is transferred to the recipient -in perpetuity or for a fixed term (regardless of how the transaction is -characterized), the Corresponding Source conveyed under this section must be -accompanied by the Installation Information. But this requirement does not apply if -neither you nor any third party retains the ability to install modified object code -on the User Product (for example, the work has been installed in ROM). - -The requirement to provide Installation Information does not include a requirement to -continue to provide support service, warranty, or updates for a work that has been -modified or installed by the recipient, or for the User Product in which it has been -modified or installed. Access to a network may be denied when the modification itself -materially and adversely affects the operation of the network or violates the rules -and protocols for communication across the network. - -Corresponding Source conveyed, and Installation Information provided, in accord with -this section must be in a format that is publicly documented (and with an -implementation available to the public in source code form), and must require no -special password or key for unpacking, reading or copying. - -### 7. Additional Terms - -“Additional permissions” are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. Additional -permissions that are applicable to the entire Program shall be treated as though they -were included in this License, to the extent that they are valid under applicable -law. If additional permissions apply only to part of the Program, that part may be -used separately under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option remove any -additional permissions from that copy, or from any part of it. (Additional -permissions may be written to require their own removal in certain cases when you -modify the work.) You may place additional permissions on material, added by you to a -covered work, for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you add to a -covered work, you may (if authorized by the copyright holders of that material) -supplement the terms of this License with terms: - -* **a)** Disclaiming warranty or limiting liability differently from the terms of -sections 15 and 16 of this License; or -* **b)** Requiring preservation of specified reasonable legal notices or author -attributions in that material or in the Appropriate Legal Notices displayed by works -containing it; or -* **c)** Prohibiting misrepresentation of the origin of that material, or requiring that -modified versions of such material be marked in reasonable ways as different from the -original version; or -* **d)** Limiting the use for publicity purposes of names of licensors or authors of the -material; or -* **e)** Declining to grant rights under trademark law for use of some trade names, -trademarks, or service marks; or -* **f)** Requiring indemnification of licensors and authors of that material by anyone -who conveys the material (or modified versions of it) with contractual assumptions of -liability to the recipient, for any liability that these contractual assumptions -directly impose on those licensors and authors. - -All other non-permissive additional terms are considered “further -restrictions” within the meaning of section 10. If the Program as you received -it, or any part of it, contains a notice stating that it is governed by this License -along with a term that is a further restriction, you may remove that term. If a -license document contains a further restriction but permits relicensing or conveying -under this License, you may add to a covered work material governed by the terms of -that license document, provided that the further restriction does not survive such -relicensing or conveying. - -If you add terms to a covered work in accord with this section, you must place, in -the relevant source files, a statement of the additional terms that apply to those -files, or a notice indicating where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the form of a -separately written license, or stated as exceptions; the above requirements apply -either way. - -### 8. Termination - -You may not propagate or modify a covered work except as expressly provided under -this License. Any attempt otherwise to propagate or modify it is void, and will -automatically terminate your rights under this License (including any patent licenses -granted under the third paragraph of section 11). - -However, if you cease all violation of this License, then your license from a -particular copyright holder is reinstated **(a)** provisionally, unless and until the -copyright holder explicitly and finally terminates your license, and **(b)** permanently, -if the copyright holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - -Moreover, your license from a particular copyright holder is reinstated permanently -if the copyright holder notifies you of the violation by some reasonable means, this -is the first time you have received notice of violation of this License (for any -work) from that copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - -Termination of your rights under this section does not terminate the licenses of -parties who have received copies or rights from you under this License. If your -rights have been terminated and not permanently reinstated, you do not qualify to -receive new licenses for the same material under section 10. - -### 9. Acceptance Not Required for Having Copies - -You are not required to accept this License in order to receive or run a copy of the -Program. Ancillary propagation of a covered work occurring solely as a consequence of -using peer-to-peer transmission to receive a copy likewise does not require -acceptance. However, nothing other than this License grants you permission to -propagate or modify any covered work. These actions infringe copyright if you do not -accept this License. Therefore, by modifying or propagating a covered work, you -indicate your acceptance of this License to do so. - -### 10. Automatic Licensing of Downstream Recipients - -Each time you convey a covered work, the recipient automatically receives a license -from the original licensors, to run, modify and propagate that work, subject to this -License. You are not responsible for enforcing compliance by third parties with this -License. - -An “entity transaction” is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an organization, or -merging organizations. If propagation of a covered work results from an entity -transaction, each party to that transaction who receives a copy of the work also -receives whatever licenses to the work the party's predecessor in interest had or -could give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if the predecessor -has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the rights granted or -affirmed under this License. For example, you may not impose a license fee, royalty, -or other charge for exercise of rights granted under this License, and you may not -initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging -that any patent claim is infringed by making, using, selling, offering for sale, or -importing the Program or any portion of it. - -### 11. Patents - -A “contributor” is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The work thus -licensed is called the contributor's “contributor version”. - -A contributor's “essential patent claims” are all patent claims owned or -controlled by the contributor, whether already acquired or hereafter acquired, that -would be infringed by some manner, permitted by this License, of making, using, or -selling its contributor version, but do not include claims that would be infringed -only as a consequence of further modification of the contributor version. For -purposes of this definition, “control” includes the right to grant patent -sublicenses in a manner consistent with the requirements of this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free patent license -under the contributor's essential patent claims, to make, use, sell, offer for sale, -import and otherwise run, modify and propagate the contents of its contributor -version. - -In the following three paragraphs, a “patent license” is any express -agreement or commitment, however denominated, not to enforce a patent (such as an -express permission to practice a patent or covenant not to sue for patent -infringement). To “grant” such a patent license to a party means to make -such an agreement or commitment not to enforce a patent against the party. - -If you convey a covered work, knowingly relying on a patent license, and the -Corresponding Source of the work is not available for anyone to copy, free of charge -and under the terms of this License, through a publicly available network server or -other readily accessible means, then you must either **(1)** cause the Corresponding -Source to be so available, or **(2)** arrange to deprive yourself of the benefit of the -patent license for this particular work, or **(3)** arrange, in a manner consistent with -the requirements of this License, to extend the patent license to downstream -recipients. “Knowingly relying” means you have actual knowledge that, but -for the patent license, your conveying the covered work in a country, or your -recipient's use of the covered work in a country, would infringe one or more -identifiable patents in that country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or arrangement, you -convey, or propagate by procuring conveyance of, a covered work, and grant a patent -license to some of the parties receiving the covered work authorizing them to use, -propagate, modify or convey a specific copy of the covered work, then the patent -license you grant is automatically extended to all recipients of the covered work and -works based on it. - -A patent license is “discriminatory” if it does not include within the -scope of its coverage, prohibits the exercise of, or is conditioned on the -non-exercise of one or more of the rights that are specifically granted under this -License. You may not convey a covered work if you are a party to an arrangement with -a third party that is in the business of distributing software, under which you make -payment to the third party based on the extent of your activity of conveying the -work, and under which the third party grants, to any of the parties who would receive -the covered work from you, a discriminatory patent license **(a)** in connection with -copies of the covered work conveyed by you (or copies made from those copies), or **(b)** -primarily for and in connection with specific products or compilations that contain -the covered work, unless you entered into that arrangement, or that patent license -was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting any implied -license or other defenses to infringement that may otherwise be available to you -under applicable patent law. - -### 12. No Surrender of Others' Freedom - -If conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from the -conditions of this License. If you cannot convey a covered work so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not convey it at all. For example, if you -agree to terms that obligate you to collect a royalty for further conveying from -those to whom you convey the Program, the only way you could satisfy both those terms -and this License would be to refrain entirely from conveying the Program. - -### 13. Use with the GNU Affero General Public License - -Notwithstanding any other provision of this License, you have permission to link or -combine any covered work with a work licensed under version 3 of the GNU Affero -General Public License into a single combined work, and to convey the resulting work. -The terms of this License will continue to apply to the part which is the covered -work, but the special requirements of the GNU Affero General Public License, section -13, concerning interaction through a network will apply to the combination as such. - -### 14. Revised Versions of this License - -The Free Software Foundation may publish revised and/or new versions of the GNU -General Public License from time to time. Such new versions will be similar in spirit -to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies that -a certain numbered version of the GNU General Public License “or any later -version” applies to it, you have the option of following the terms and -conditions either of that numbered version or of any later version published by the -Free Software Foundation. If the Program does not specify a version number of the GNU -General Public License, you may choose any version ever published by the Free -Software Foundation. - -If the Program specifies that a proxy can decide which future versions of the GNU -General Public License can be used, that proxy's public statement of acceptance of a -version permanently authorizes you to choose that version for the Program. - -Later license versions may give you additional or different permissions. However, no -additional obligations are imposed on any author or copyright holder as a result of -your choosing to follow a later version. - -### 15. Disclaimer of Warranty - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER -EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE -QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE -DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -### 16. Limitation of Liability - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY -COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS -PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, -INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE -OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE -WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -### 17. Interpretation of Sections 15 and 16 - -If the disclaimer of warranty and limitation of liability provided above cannot be -given local legal effect according to their terms, reviewing courts shall apply local -law that most closely approximates an absolute waiver of all civil liability in -connection with the Program, unless a warranty or assumption of liability accompanies -a copy of the Program in return for a fee. - -_END OF TERMS AND CONDITIONS_ - -## How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to -the public, the best way to achieve this is to make it free software which everyone -can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them -to the start of each source file to most effectively state the exclusion of warranty; -and each file should have at least the “copyright” line and a pointer to -where the full notice is found. - - - Copyright (C) - - 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 3 of the License, 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 this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - -If the program does terminal interaction, make it output a short notice like this -when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type 'show c' for details. - -The hypothetical commands `show w` and `show c` should show the appropriate parts of -the General Public License. Of course, your program's commands might be different; -for a GUI interface, you would use an “about box”. - -You should also get your employer (if you work as a programmer) or school, if any, to -sign a “copyright disclaimer” for the program, if necessary. For more -information on this, and how to apply and follow the GNU GPL, see -<>. - -The GNU General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may consider it -more useful to permit linking proprietary applications with the library. If this is -what you want to do, use the GNU Lesser General Public License instead of this -License. But first, please read -<>. diff --git a/stremio-shell/autoupdater.cpp b/stremio-shell/autoupdater.cpp deleted file mode 100644 index a341eb1..0000000 --- a/stremio-shell/autoupdater.cpp +++ /dev/null @@ -1,346 +0,0 @@ -#include -#include - -AutoUpdater::AutoUpdater() { - init_public_key(); -} - -// HANDLE FATAL ERRORS -void AutoUpdater::emitFatalError(QString msg, QVariant err = QVariant()) { - this->abort(); - emit error(msg, err); -} - -// IS INSTALLED? -bool AutoUpdater::isInstalled() { - - QString dirPath = QDir::toNativeSeparators(QCoreApplication::applicationDirPath()); - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - - // Windows - if (env.contains("LOCALAPPDATA") && dirPath.startsWith(env.value("LOCALAPPDATA"))) return true; - if (env.contains("ProgramFiles") && dirPath.startsWith(env.value("ProgramFiles"))) return true; - if (env.contains("ProgramFiles(x86)") && dirPath.startsWith(env.value("ProgramFiles(x86)"))) return true; - - // macOS - if (dirPath.contains("/Applications") && dirPath.contains(".app")) return true; - - // Linux - appImage - if (dirPath.startsWith("/tmp/.mount_")) return true; - - // Other UNIX - // Disabled, because we cannot update those cases - //if (dirPath.contains("/usr/bin") || dir.contains("/usr/local") || dir.contains("/opt")) return true; - - return false; -} - -// WRAPPERS for public slots to make sure we execute on our thread -void AutoUpdater::checkForUpdates(QString endpoint, QString userAgent) { - if (inProgress) return; - inProgress = true; - QMetaObject::invokeMethod(this, "checkForUpdatesPerform", Qt::QueuedConnection, Q_ARG(QString, endpoint), Q_ARG(QString, userAgent)); -} -void AutoUpdater::updateFromVersionDesc(QUrl versionDesc, QByteArray base64Sig) { - if (inProgress) return; - inProgress = true; - QMetaObject::invokeMethod(this, "updateFromVersionDescPerform", Qt::QueuedConnection, Q_ARG(QUrl, versionDesc), - Q_ARG(QByteArray, base64Sig)); -} -void AutoUpdater::abort() { - QMetaObject::invokeMethod(this, "abortPerform", Qt::QueuedConnection); -} - -// SETTINGS -void AutoUpdater::setForceFullUpdate(bool force) { - forceFullUpdate = force; -} - -// UTILS -bool AutoUpdater::moveFileToAppDir(QString from) { - QDir dir; - QFileInfo oldFile = QFileInfo(from); - QString dest = QCoreApplication::applicationDirPath() + QDir::separator() + oldFile.fileName(); - - if (! QFile::exists(from)) return false; - - if (QFile::exists(dest)) { - if (! QFile::remove(dest)) return false; - } - - return dir.rename(from, dest); -} - -int AutoUpdater::executeCmd(QString cmd, QStringList args, bool noWait = false) { - QProcess proc; - - proc.setProcessChannelMode(QProcess::ForwardedChannels); - - if (noWait) { - proc.startDetached(cmd, args); - return -1; - } - - proc.start(cmd, args); - - // We mostly need quick commands executed, and waiting for them in that func removes a huge layer of complexity - if (! proc.waitForFinished(5 * 60 * 1000)) return -1; - - return proc.exitCode(); -} - -bool AutoUpdater::isOnline() { - QNetworkConfigurationManager mgr; - return mgr.isOnline(); -} - -// CHECK FOR UPDATES -void AutoUpdater::checkForUpdatesPerform(QString endpoint, QString userAgent) -{ - if (! manager) manager = new QNetworkAccessManager(this); - - QByteArray serverHash = getFileChecksum(QCoreApplication::applicationDirPath() + QDir::separator() + SERVER_FNAME); - QByteArray asarHash = getFileChecksum(QCoreApplication::applicationDirPath() + QDir::separator() + ASAR_FNAME); - - QUrl url = QUrl(endpoint); - QUrlQuery query = QUrlQuery(url); - - query.addQueryItem("serverSum", serverHash.toHex()); - query.addQueryItem("asarSum", asarHash.toHex()); - query.addQueryItem("shellVersion", QCoreApplication::applicationVersion()); - - url.setQuery(query); - auto request = QNetworkRequest(QUrl(url)); - request.setRawHeader("User-Agent", userAgent.toUtf8()); - currentCheck = manager->get(request); - QObject::connect(currentCheck, &QNetworkReply::finished, this, &AutoUpdater::checkForUpdatesFinished); -} - -void AutoUpdater::checkForUpdatesFinished() -{ - if (currentCheck == NULL) { - emitFatalError("internal error - currentCheck NULL on checkForUpdatesFinished"); - return; - } - - QNetworkReply* reply = currentCheck; - reply->deleteLater(); - currentCheck = NULL; - - if (reply->error() == QNetworkReply::NoError) { - QJsonParseError *error = NULL; - QJsonDocument jsonResponse = QJsonDocument::fromJson(reply->readAll(), error); - - emit checkFinished(jsonResponse.toVariant()); - - if (jsonResponse.isObject()) { - QJsonObject obj = jsonResponse.object(); - - if (obj.value("upToDate").toBool()) { - // NO NEW VERSION, DO NOTHING - inProgress = false; - } else { - updateFromVersionDescPerform( - QUrl(obj.value("versionDesc").toString()), - QByteArray::fromBase64(obj.value("signature").toString().toUtf8()) - ); - } - } else if (error) { - emitFatalError("JSON parse error on checkForUpdates "+error->errorString()); - } else { - emitFatalError("Unable to understand response from checkForUpdates"); - } - - delete error; - } else if (reply->error() != QNetworkReply::OperationCanceledError) { - emitFatalError("Network error on checkForUpdates "+reply->url().toString(), reply->error()); - } -} - - -// GET & VERIFY (SIGNATURE) VERSION DESC -void AutoUpdater::updateFromVersionDescPerform(QUrl versionDesc, QByteArray base64Sig) { - currentCheck = manager->get(QNetworkRequest(versionDesc)); - currentCheck->setProperty("signature", base64Sig); - QObject::connect(currentCheck, &QNetworkReply::finished, this, &AutoUpdater::updateFromVersionDescFinished); -} - -void AutoUpdater::updateFromVersionDescFinished() { - if (currentCheck == NULL) { - emitFatalError("internal error - currentCheck NULL on updateFromVersionDescFinished"); - return; - } - - QNetworkReply* reply = currentCheck; - reply->deleteLater(); - currentCheck = NULL; - - if (reply->error() == QNetworkReply::NoError) { - QByteArray dataReply = reply->readAll(); - QByteArray sig = reply->property("signature").toByteArray(); - - if (verify_sig( - (const byte*)dataReply.data(), dataReply.size(), - (const byte*)sig.data(), sig.length() - ) != 0) { - emitFatalError("Unable to verify update signature"); - } else { - QJsonParseError *error = NULL; - QJsonDocument jsonResponse = QJsonDocument::fromJson(dataReply, error); - - if (jsonResponse.isObject()) { - prepareUpdate(jsonResponse); - } else if (error) { - emitFatalError("JSON parse error on updateFromVersionDesc "+error->errorString()); - } else { - emitFatalError("Unable to understand response from updateFromVersionDesc"); - } - - delete error; - } - } else if (reply->error() != QNetworkReply::OperationCanceledError) { - emitFatalError("Network error on updateFromVersionDesc "+reply->url().toString(), reply->error()); - } -} - -// DETERMINE WHAT TO DOWNLOAD FROM versionDesc -void AutoUpdater::prepareUpdate(QJsonDocument versionDescDoc) { - currentVersionDesc = versionDescDoc; - - QJsonObject versionDesc = versionDescDoc.object(); - QJsonObject files = versionDesc.value("files").toObject(); - - QVector toDownload; - - if (forceFullUpdate - || versionDesc.value("shellVersion").toString() != QCoreApplication::applicationVersion() - ) { - toDownload = FULL_UPDATE_FILES; - } else { - toDownload = PARTIAL_UPDATE_FILES; - } - - if (! toDownload.length()) { - emitFatalError("internal error - no files to download. Unsupported OS?"); - return; - } - - foreach (const QString &prop, toDownload) { - QJsonObject file = files.value(prop).toObject(); - - if (! (file.contains("url") && file.contains("checksum"))) continue; - - enqueueDownload( - QUrl(file.value("url").toString()), - QByteArray::fromHex(file.value("checksum").toString().toUtf8()) - ); - } - - startNextDownload(); -} - - -// DOWNLOAD & VERIFY (CHECKSUM) -QByteArray AutoUpdater::getFileChecksum(QString path) { - QCryptographicHash crypto(QCryptographicHash::Sha256); - QFile file(path); - file.open(QFile::ReadOnly); - while (!file.atEnd()) { crypto.addData(file.read(FILE_READ_CHUNK)); } - return crypto.result(); -} - -void AutoUpdater::enqueueDownload(QUrl from, QByteArray checksum) { - downloadQueue.enqueue(fDownload(from, checksum)); -} - -void AutoUpdater::startNextDownload() { - if (downloadQueue.isEmpty()) { - inProgress = false; - emit prepared(preparedFiles, QVariant(currentVersionDesc.object())); - return; - } - - fDownload next = downloadQueue.dequeue(); - QUrl url = next.first; - QByteArray checksum = next.second; - - // WARNING: TODO: do we want to make a separate dir inside tempPath? ; we should ensure downloadFile always overrides - QString dest = QDir::tempPath() + QDir::separator() + url.fileName(); - - // Check if the download is already downloaded - could happen if we try to do a full upgrade when we've - // already prepared one - // Sketchy case: if the file does not exist, getFileChecksum would return the default sha256 hash; - - // this would actually prevent a case where the version descriptor is generated from empty files from breaking - // the system - because this check would return true, and then the file wouldn't exist at all, emitting an error - // (this shouldn't be able to happen, but still...) - if (checksum == getFileChecksum(dest)) { - preparedFiles.push_back(dest); - startNextDownload(); - return; - } - - // Start the download - output.setFileName(dest); - if (!output.open(QIODevice::WriteOnly)) { - emitFatalError("error opening file "+dest+" for download: "+output.errorString()); - return; - } - - currentDownload = manager->get(QNetworkRequest(url)); - currentDownload->setProperty("checksum", checksum); - QObject::connect(currentDownload, &QNetworkReply::readyRead, this, &AutoUpdater::downloadReadyRead); - QObject::connect(currentDownload, &QNetworkReply::finished, this, &AutoUpdater::downloadFinished); -} - -void AutoUpdater::downloadReadyRead() -{ - output.write(currentDownload->readAll()); -} - -void AutoUpdater::downloadFinished() -{ - output.close(); - - if (currentDownload == NULL) { - emitFatalError("internal error - currentDownload NULL on downloadFinished"); - return; - } - - QNetworkReply* reply = currentDownload; - reply->deleteLater(); - currentDownload = NULL; - - if (reply->error() == QNetworkReply::NoError) { - QString dest = output.fileName(); - QByteArray checksum = reply->property("checksum").toByteArray(); - - if (checksum == getFileChecksum(dest)) { - preparedFiles.push_back(dest); - startNextDownload(); - } else { - emitFatalError("Unable to verify checksum for file "+dest); - } - } else if (reply->error() != QNetworkReply::OperationCanceledError) { - emitFatalError("Network error on downloadFinished "+reply->url().toString(), reply->error()); - } -} - - -// ABORT -void AutoUpdater::abortPerform() { - // EXPLANATION: those will be aborted, and then in the 'finished' handler, they will be deleted via ->deleteLater() - // since the event handlers are executed in the event loop, one might think calling .checkForVer() right after - // .abort() will re-set currentCheck before the 'finished' handler is executed - // This is not a problem, because all public methods call the internal ones with invokeMethod and queuedConnection - if (currentCheck) currentCheck->abort(); - if (currentDownload) currentDownload->abort(); - - currentVersionDesc = QJsonDocument(); - - downloadQueue = QQueue(); - preparedFiles = QVariantList(); - - output.close(); - - inProgress = false; -} diff --git a/stremio-shell/autoupdater.h b/stremio-shell/autoupdater.h deleted file mode 100644 index 7d123dc..0000000 --- a/stremio-shell/autoupdater.h +++ /dev/null @@ -1,111 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Mixing C and C++ :( -extern "C" { -#include -} - -#define FILE_READ_CHUNK 8192 - -// TODO Move to somewhere? Document that we can override? -#define SERVER_FNAME "server.js" -#define ASAR_FNAME "stremio.asar" - -#define PARTIAL_UPDATE_FILES { SERVER_FNAME, ASAR_FNAME } - -#if defined(Q_OS_WIN) - #define FULL_UPDATE_FILES { "windows" } -#elif defined(Q_OS_MACOS) - #define FULL_UPDATE_FILES { "mac" } -#elif defined(Q_OS_LINUX) - #define FULL_UPDATE_FILES { "linux" } -#else - #define FULL_UPDATE_FILES { } -#endif - -typedef QPair fDownload; - -class AutoUpdater : public QObject -{ - Q_OBJECT - - public: - AutoUpdater(); - - public slots: - bool isInstalled(); - void checkForUpdates(QString, QString); - void updateFromVersionDesc(QUrl, QByteArray); - - void abort(); - - void setForceFullUpdate(bool); - - bool moveFileToAppDir(QString); - int executeCmd(QString, QStringList, bool); - bool isOnline(); - - signals: - void error(QString, QVariant); - void checkFinished(QVariant); - void prepared(QVariantList, QVariant); - - private slots: - void abortPerform(); - - void checkForUpdatesPerform(QString, QString); - void checkForUpdatesFinished(); - - void updateFromVersionDescPerform(QUrl, QByteArray); - void updateFromVersionDescFinished(); - - void prepareUpdate(QJsonDocument); - - void downloadFinished(); - void downloadReadyRead(); - - void emitFatalError(QString, QVariant); - - private: - void enqueueDownload(QUrl, QByteArray); - void startNextDownload(); - - QByteArray getFileChecksum(QString); - - QNetworkAccessManager* manager = NULL; - - // State; must be reset on abort - QJsonDocument currentVersionDesc; - - QNetworkReply* currentCheck = NULL; - QNetworkReply* currentDownload = NULL; - - QFile output; - - // Download queue, prepared files - QQueue downloadQueue; - QVariantList preparedFiles; - - // options - bool forceFullUpdate = false; - - // progress tracking - bool inProgress = false; - -}; diff --git a/stremio-shell/autoupdater.js b/stremio-shell/autoupdater.js deleted file mode 100644 index 4d2163f..0000000 --- a/stremio-shell/autoupdater.js +++ /dev/null @@ -1,184 +0,0 @@ - // - // AUTO UPDATER - // - // signal autoUpdaterErr(var msg, var err); - // signal autoUpdaterRestartTimer(); - function initAutoUpdater(autoUpdater, autoUpdaterErr, shortTimer, longTimer, restartTimer, userAgent) { - var endpoints = ["https://www.strem.io/updater/check", "https://www.stremio.com/updater/check", - "https://www.stremio.net/updater/check"]; - var fallbackSite = "https://www.stremio.com/?fromFailedAutoupdate=true"; - var doAutoupdate = autoUpdater.isInstalled() - - // On Linux, because we use AppImage, we cannot do partial updates - because we can't replace files - // in the read-only mountpoint - if (Qt.platform.os === "linux" && doAutoupdate) autoUpdater.setForceFullUpdate(true); - - var args = Qt.application.arguments - if (args.indexOf("--autoupdater-force-full") > -1) autoUpdater.setForceFullUpdate(true); - if (args.indexOf("--autoupdater-force") > -1) doAutoupdate = true; - - var endpointArg = "--autoupdater-endpoint=" - args.forEach(function(arg) { if (arg.indexOf(endpointArg) === 0) endpoints = [arg.slice(endpointArg.length)] }) - autoUpdater.endpoint = function() { - return endpoints[Math.floor(Math.random()*endpoints.length)] - } - - if (! doAutoupdate) { - console.log("Auto-updater: skipping, possibly not running an installed app?") - return - } - - // This is the timeout we use to check periodically; the signal is handled in the main (UI) thread - var onTriggered - shortTimer.triggered.connect(onTriggered = function() { - // WARNING: what if .isOnline() fails on some system?? it's based on QNetworkConfigurationManager - // can we trust it?? - if (autoUpdater.isOnline()) { - console.log("Auto-updater: checking for new version") - autoUpdater.abort() - autoUpdater.checkForUpdates(autoUpdater.endpoint(), userAgent) - - } else { - console.log("Auto-update: skip check because we're not online") - shortTimer.restart() - } - }) - onTriggered(); // initial check - - // Re-start this timer only from the main thread - restartTimer.connect(function() { - longTimer.restart(); - }); - - // WARNING: all of the slot handlers are handled in another thread, that's why we need the autoUpdaterErr() - // signal - to bring execution back to UI thread - autoUpdater.checkFinished.connect(function(check) { - // reset the notif, so there's no chance we'd trigger a re-start while downloading new ver - if (check && !check.upToDate) autoUpdater.onNotifClicked = null; - - if (check && check.upToDate) console.log("Auto-updater: up to date"); - if (check && !check.upToDate) console.log("Auto-updater: updating to latest ver: "+check.versionDesc) - else restartTimer() // no new ver, schedule a new check - }) - - // signal hack to bring it back to the main thread - autoUpdater.error.connect(function(msg, err) { - autoUpdaterErr(msg, err); - }); - autoUpdaterErr.connect(function(msg, err) { - // send to front-end, so we can handle accordingly - transport.queueEvent("autoupdater-error", { - err: err, - msg: msg - }); - - longTimer.restart() - - // Display the error only if it's not QNetworkReply::HostNotFound (3) and not QNetworkReply::TimeoutError (4) - // - this usually happens when we are not connected; sometimes autoupdater.isOnline() reports wrong - if (err !== 3 && err !== 4) { - errorDialog.text = "Auto updater error" - errorDialog.detailedText = msg - errorDialog.visible = true - } - }) - - autoUpdater.prepared.connect(function(preparedFiles, version) { - var firstFile = preparedFiles[0]; - - console.log("Auto-updater: prepared update "+preparedFiles.join(", ")) - - // When we finish preparing an update, we must call transport.queueEvent so that the app can receive - // a notification event once it loads - // Then, we must set .onNotifClicked to what we'll do when the notification is clicked - - if (preparedFiles.length == 2) { - // - // Prepare partial auto-update - // - console.log("Auto-updater: executing partial update") - var failed = false - preparedFiles.forEach(function(f) { if (!autoUpdater.moveFileToAppDir(f)) failed = true }) - if (failed) { - autoUpdaterErr("preparing partial update failed", null) - return - } - transport.queueEvent("autoupdater-show-notif", { mode: "reload" }) - autoUpdater.onNotifClicked = function() { - splashScreen.visible = true - pulseOpacity.running = true - webView.reloadAndBypassCache() - streamingServer.fastReload = true - streamingServer.terminate() - } - } else if (Qt.platform.os === "osx" && firstFile && firstFile.match(".dmg$")) { - // - // Prepare macOS auto-update (extract from .dmg) - // - console.log("Auto-updater: executing OSX update"); - - var ver = version.version; - var args = ["-c", - "DMG=\""+firstFile+"\"" - +"&& NEW=/Applications/$(date +%s).app" - +"&& MNT=\"/Volumes/Stremio "+ver+"\"" - - +"&& hdiutil attach \"$DMG\" -nobrowse -noautoopen" // NOTE: this returns 0, - // even if it's already mounted - //+"&& MNT=$(hdiutil attach \"$DMG\" -nobrowse -noautoopen | awk -F'/Volumes/' '/Apple_HFS/ {print $2}') &&" - // WARNING: I'm not sure about this working on every OSX ver - - +"&& cp -R \"$MNT\"/*.app \"$NEW\"" - +"&& rm -rf /Applications/Stremio.app && mv \"$NEW\" \"/Applications/Stremio.app\"" - +"&& xattr -d com.apple.quarantine /Applications/Stremio.app" - +"; hdiutil detach \"$MNT\"" - ]; - - var code = autoUpdater.executeCmd("/bin/sh", args, false) - if (code !== 0) { - autoUpdaterErr("preparing macOS .app failed", null); - return; - } - - transport.queueEvent("autoupdater-show-notif", { mode: "restart" }) - autoUpdater.onNotifClicked = function() { - autoUpdater.executeCmd("/bin/sh", ["-c", "sleep 5; open -n /Applications/Stremio.app"], true) - quitApp(); - } - } else if ( Qt.platform.os === "windows" && firstFile && firstFile.match(".exe") ) { - // - // Prepare launch-based auto-update (launch new installer/appimage on Windows) - // - transport.queueEvent("autoupdater-show-notif", { mode: "launchNew" }) - autoUpdater.onNotifClicked = function() { - Qt.openUrlExternally("file:///"+firstFile.replace(/\\/g,'/')) - quitApp(); - } - } else if (Qt.platform.os === "linux" && firstFile && firstFile.match(".appimage")) { - // - // Prepare AppImage-based update (put in home dir and launch) - // - console.log("Auto-updater: executing Linux update"); - - var baseName = firstFile.split("/").pop() - var code = autoUpdater.executeCmd("/bin/sh", - ["-c", "mv '"+firstFile+"' $HOME; chmod +x $HOME/'"+baseName+"'"], false) - if (code !== 0) { - autoUpdaterErr("preparing Linux .appimage failed", null); - return; - } - transport.queueEvent("autoupdater-show-notif", { mode: "launchNew" }) - autoUpdater.onNotifClicked = function() { - autoUpdater.executeCmd("/bin/sh", ["-c", "$HOME/'"+baseName+"'"], true) - // crappy, but otherwise we have to write code to get env var - quitApp(); - } - } else { - autoUpdaterErr("Insane auto-update: "+preparedFiles.join(", "), null) - } - - // WARNING: this seems to randomly crash the program in rare cases if called more than once - // in this signal handler... - restartTimer() - }) - } diff --git a/stremio-shell/build_windows.bat b/stremio-shell/build_windows.bat deleted file mode 100644 index cae05ae..0000000 --- a/stremio-shell/build_windows.bat +++ /dev/null @@ -1,17 +0,0 @@ -SETLOCAL -SET VERSION=4.4.10 -SET BUILD_DIR=build - -:: Set up VS environment -CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 - -IF NOT EXIST "%BUILD_DIR%" mkdir "%BUILD_DIR%" -PUSHD "%BUILD_DIR%" - -qmake .. -nmake - -IF NOT EXIST "server.js" powershell -Command "(New-Object Net.WebClient).DownloadFile('https://s3-eu-west-1.amazonaws.com/stremio-artifacts/four/v%VERSION%/server.js', 'server.js')" - -POPD -ENDLOCAL \ No newline at end of file diff --git a/stremio-shell/deployment.pri b/stremio-shell/deployment.pri deleted file mode 100644 index ad31908..0000000 --- a/stremio-shell/deployment.pri +++ /dev/null @@ -1,17 +0,0 @@ -unix:!android { - isEmpty(target.path) { - qnx { - target.path = $$PREFIX/tmp/$${TARGET}/bin - } else { - target.path = $$PREFIX/opt/$${TARGET} - } - export(target.path) - } - static.files = smartcode-stremio.desktop - static.path = $$target.path - export(static.path) - INSTALLS += static - INSTALLS += target -} - -export(INSTALLS) diff --git a/stremio-shell/deps/chroma/ChromaSDK/ChromaAppInfo.xml b/stremio-shell/deps/chroma/ChromaSDK/ChromaAppInfo.xml deleted file mode 100644 index b5c0d80..0000000 --- a/stremio-shell/deps/chroma/ChromaSDK/ChromaAppInfo.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Razer Chroma SDK Sample Application - Razer Chroma SDK Sample Application - - - - diff --git a/stremio-shell/deps/chroma/ChromaSDK/inc/RzChromaSDKDefines.h b/stremio-shell/deps/chroma/ChromaSDK/inc/RzChromaSDKDefines.h deleted file mode 100644 index c2cd4ef..0000000 --- a/stremio-shell/deps/chroma/ChromaSDK/inc/RzChromaSDKDefines.h +++ /dev/null @@ -1,153 +0,0 @@ -//! \file RzChromaSDKDefines.h -//! \brief Definitions of global and static variables. - -#ifndef _RZSCHROMADKDEFINES_H_ -#define _RZSCHROMADKDEFINES_H_ - -#pragma once - -#ifndef GUID_DEFINED -#include -#endif - -namespace ChromaSDK -{ - // Keyboards - //! Razer Blackwidow Chroma device. - // {2EA1BB63-CA28-428D-9F06-196B88330BBB} - static const GUID BLACKWIDOW_CHROMA = - { 0x2ea1bb63, 0xca28, 0x428d, { 0x9f, 0x06, 0x19, 0x6b, 0x88, 0x33, 0x0b, 0xbb } }; - - //! Razer Blackwidow Chroma Tournament Edition device. - // {ED1C1B82-BFBE-418F-B49D-D03F05B149DF} - static const GUID BLACKWIDOW_CHROMA_TE = - { 0xed1c1b82, 0xbfbe, 0x418f, { 0xb4, 0x9d, 0xd0, 0x3f, 0x5, 0xb1, 0x49, 0xdf } }; - - //! Razer Deathstalker device. - // {18C5AD9B-4326-4828-92C4-2669A66D2283} - static const GUID DEATHSTALKER_CHROMA = - { 0x18c5ad9b, 0x4326, 0x4828, { 0x92, 0xc4, 0x26, 0x69, 0xa6, 0x6d, 0x22, 0x83 } }; - - //! Overwatch Keyboard. - // {872AB2A9-7959-4478-9FED-15F6186E72E4} - static const GUID OVERWATCH_KEYBOARD = - { 0x872ab2a9, 0x7959, 0x4478, { 0x9f, 0xed, 0x15, 0xf6, 0x18, 0x6e, 0x72, 0xe4 } }; - - //! Razer Blackwidow X Chroma device. - // {5AF60076-ADE9-43D4-B574-52599293B554} - static const GUID BLACKWIDOW_X_CHROMA = - { 0x5af60076, 0xade9, 0x43d4, { 0xb5, 0x74, 0x52, 0x59, 0x92, 0x93, 0xb5, 0x54 } }; - - //! Razer Blackwidow X TE Chroma device. - // {2D84DD51-3290-4AAC-9A89-D8AFDE38B57C} - static const GUID BLACKWIDOW_X_TE_CHROMA = - { 0x2d84dd51, 0x3290, 0x4aac, { 0x9a, 0x89, 0xd8, 0xaf, 0xde, 0x38, 0xb5, 0x7c } }; - - //! Razer Ornata Chroma - // {803378C1-CC48-4970-8539-D828CC1D420A} - static const GUID ORNATA_CHROMA = - { 0x803378c1, 0xcc48, 0x4970,{ 0x85, 0x39, 0xd8, 0x28, 0xcc, 0x1d, 0x42, 0xa } }; - - //! Razer Blade Stealth. - // {C83BDFE8-E7FC-40E0-99DB-872E23F19891} - static const GUID BLADE_STEALTH = - { 0xc83bdfe8, 0xe7fc, 0x40e0, { 0x99, 0xdb, 0x87, 0x2e, 0x23, 0xf1, 0x98, 0x91 } }; - - //! Razer Blade - // {F2BEDFAF-A0FE-4651-9D41-B6CE603A3DDD} - static const GUID BLADE = - { 0xf2bedfaf, 0xa0fe, 0x4651, { 0x9d, 0x41, 0xb6, 0xce, 0x60, 0x3a, 0x3d, 0xdd } }; - - - // Mice - //! Razer Deathadder Chroma device. - // {AEC50D91-B1F1-452F-8E16-7B73F376FDF3} - static const GUID DEATHADDER_CHROMA = - { 0xaec50d91, 0xb1f1, 0x452f, { 0x8e, 0x16, 0x7b, 0x73, 0xf3, 0x76, 0xfd, 0xf3 } }; - - //! Razer Mamba Chroma Tournament Edition device. - // {7EC00450-E0EE-4289-89D5-0D879C19061A} - static const GUID MAMBA_CHROMA_TE = - { 0x7ec00450, 0xe0ee, 0x4289, { 0x89, 0xd5, 0xd, 0x87, 0x9c, 0x19, 0x6, 0x1a } }; - - //! Razer Diamondback device. - // {FF8A5929-4512-4257-8D59-C647BF9935D0} - static const GUID DIAMONDBACK_CHROMA = - { 0xff8a5929, 0x4512, 0x4257, { 0x8d, 0x59, 0xc6, 0x47, 0xbf, 0x99, 0x35, 0xd0 } }; - - //! Razer Mamba device. - // {D527CBDC-EB0A-483A-9E89-66D50463EC6C} - static const GUID MAMBA_CHROMA = - { 0xd527cbdc, 0xeb0a, 0x483a, { 0x9e, 0x89, 0x66, 0xd5, 0x4, 0x63, 0xec, 0x6c } }; - - //! Razer Naga Epic device. - // {D714C50B-7158-4368-B99C-601ACB985E98} - static const GUID NAGA_EPIC_CHROMA = - { 0xd714c50b, 0x7158, 0x4368, { 0xb9, 0x9c, 0x60, 0x1a, 0xcb, 0x98, 0x5e, 0x98 } }; - - //! Razer Naga device. - // {F1876328-6CA4-46AE-BE04-BE812B414433} - static const GUID NAGA_CHROMA = - { 0xf1876328, 0x6ca4, 0x46ae, { 0xbe, 0x4, 0xbe, 0x81, 0x2b, 0x41, 0x44, 0x33 } }; - - //! Razer Orochi Chroma device. - // {52C15681-4ECE-4DD9-8A52-A1418459EB34} - static const GUID OROCHI_CHROMA = - { 0x52c15681, 0x4ece, 0x4dd9, { 0x8a, 0x52, 0xa1, 0x41, 0x84, 0x59, 0xeb, 0x34 } }; - - //! Razer Naga Hex Chroma device. - // {195D70F5-F285-4CFF-99F2-B8C0E9658DB4} - static const GUID NAGA_HEX_CHROMA = - { 0x195d70f5, 0xf285, 0x4cff, { 0x99, 0xf2, 0xb8, 0xc0, 0xe9, 0x65, 0x8d, 0xb4 } }; - - - // Headsets - //! Razer Kraken 7.1 Chroma device. - // {CD1E09A5-D5E6-4A6C-A93B-E6D9BF1D2092} - static const GUID KRAKEN71_CHROMA = - { 0xcd1e09a5, 0xd5e6, 0x4a6c, { 0xa9, 0x3b, 0xe6, 0xd9, 0xbf, 0x1d, 0x20, 0x92 } }; - - //! Razer ManO'War device. - // {DF3164D7-5408-4A0E-8A7F-A7412F26BEBF} - static const GUID MANOWAR_CHROMA = - { 0xdf3164d7, 0x5408, 0x4a0e, { 0x8a, 0x7f, 0xa7, 0x41, 0x2f, 0x26, 0xbe, 0xbf } }; - - - // Mouse mat - //! Razer Firefly device. - // {80F95A94-73D2-48CA-AE9A-0986789A9AF2} - static const GUID FIREFLY_CHROMA = - { 0x80f95a94, 0x73d2, 0x48ca, { 0xae, 0x9a, 0x9, 0x86, 0x78, 0x9a, 0x9a, 0xf2 } }; - - - // Keypads - //! Razer Tartarus device. - // {00F0545C-E180-4AD1-8E8A-419061CE505E} - static const GUID TARTARUS_CHROMA = - { 0xf0545c, 0xe180, 0x4ad1, { 0x8e, 0x8a, 0x41, 0x90, 0x61, 0xce, 0x50, 0x5e } }; - - //! Razer Orbweaver device. - // {9D24B0AB-0162-466C-9640-7A924AA4D9FD} - static const GUID ORBWEAVER_CHROMA = - { 0x9d24b0ab, 0x162, 0x466c, { 0x96, 0x40, 0x7a, 0x92, 0x4a, 0xa4, 0xd9, 0xfd } }; - - - // Systems - // {35F6F18D-1AE5-436C-A575-AB44A127903A} - static const GUID LENOVO_Y900 = - { 0x35f6f18d, 0x1ae5, 0x436c, { 0xa5, 0x75, 0xab, 0x44, 0xa1, 0x27, 0x90, 0x3a } }; - - // {47DB1FA7-6B9B-4EE6-B6F4-4071A3B2053B} - static const GUID LENOVO_Y27 = - { 0x47db1fa7, 0x6b9b, 0x4ee6, { 0xb6, 0xf4, 0x40, 0x71, 0xa3, 0xb2, 0x5, 0x3b } }; - - - // Accessories - // {0201203B-62F3-4C50-83DD-598BABD208E0} - static const GUID CORE_CHROMA = - { 0x201203b, 0x62f3, 0x4c50, { 0x83, 0xdd, 0x59, 0x8b, 0xab, 0xd2, 0x8, 0xe0 } }; - - -} - -#endif diff --git a/stremio-shell/deps/chroma/ChromaSDK/inc/RzChromaSDKTypes.h b/stremio-shell/deps/chroma/ChromaSDK/inc/RzChromaSDKTypes.h deleted file mode 100644 index d4c9e98..0000000 --- a/stremio-shell/deps/chroma/ChromaSDK/inc/RzChromaSDKTypes.h +++ /dev/null @@ -1,785 +0,0 @@ -//! \file RzChromaSDKTypes.h -//! \brief Data types. - -#ifndef _RZCHROMASDKTYPES_H_ -#define _RZCHROMASDKTYPES_H_ - -#pragma once - -typedef LONG RZRESULT; //!< Return result. -typedef GUID RZEFFECTID; //!< Effect Id. -typedef GUID RZDEVICEID; //!< Device Id. -typedef unsigned int RZDURATION; //!< Milliseconds. -typedef size_t RZSIZE; //!< Size. -typedef void* PRZPARAM; //!< Context sensitive pointer. -typedef DWORD RZID; //!< Generic data type for Identifier. -typedef DWORD RZCOLOR; //!< Color data. 1st byte = Red; 2nd byte = Green; 3rd byte = Blue; 4th byte = Alpha (if applicable) - -namespace ChromaSDK -{ - //! Event notification Window message - const UINT WM_CHROMA_EVENT = WM_APP+0x2000; - - //! Chroma generic effects. Note: Not all devices supported the listed effects. - typedef enum EFFECT_TYPE - { - CHROMA_NONE = 0, //!< No effect. - CHROMA_WAVE, //!< Wave effect. - CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect. - CHROMA_BREATHING, //!< Breathing effect. - CHROMA_BLINKING, //!< Blinking effect. - CHROMA_REACTIVE, //!< Reactive effect. - CHROMA_STATIC, //!< Static effect. - CHROMA_CUSTOM, //!< Custom effect. For mice, please see Mouse::CHROMA_CUSTOM2. - CHROMA_RESERVED, //!< TODO - CHROMA_INVALID //!< Invalid effect. - } EFFECT_TYPE; - - //! Device info. - typedef struct DEVICE_INFO_TYPE - { - //! Device types. - enum DeviceType - { - DEVICE_KEYBOARD = 1, //!< Keyboard device. - DEVICE_MOUSE = 2, //!< Mouse device. - DEVICE_HEADSET = 3, //!< Headset device. - DEVICE_MOUSEPAD = 4, //!< Mousepad device. - DEVICE_KEYPAD = 5, //!< Keypad device. - DEVICE_SYSTEM = 6, //!< System device. - DEVICE_INVALID //!< Invalid device. - } DeviceType; - - DWORD Connected; //!< Number of devices connected. - } DEVICE_INFO_TYPE; - - const RZSIZE MAX_ROW = 30; //!< Maximum rows for custom effects. - const RZSIZE MAX_COLUMN = 30; //!< Maximum columns for custom effects. - - //! Blinking effect. - typedef struct BLINKING_EFFECT_TYPE - { - RZSIZE Size; //!< Size of the structure. Size = sizeof(BLINKING_EFFECT_TYPE) - DWORD Param; //!< Extra parameters. - - COLORREF Color; //!< Blinking color - } BLINKING_EFFECT_TYPE; - - //! Breathing effect. - typedef struct BREATHING_EFFECT_TYPE - { - RZSIZE Size; //!< Size of ths structure. Size = sizeof(BREATHING_EFFECT_TYPE) - DWORD Param; //!< Extra parameters. - - //! Breathing effect types. - enum _Type - { - ONE_COLOR = 1, //!< 1 color (Only fill Color1). - TWO_COLORS, //!< 2 colors. - RANDOM_COLORS //!< Random colors - } Type; - - COLORREF Color1; //!< First color. - COLORREF Color2; //!< Second color. - } BREATHING_EFFECT_TYPE; - - //! Custom effect. - typedef struct CUSTOM_EFFECT_TYPE - { - RZSIZE Size; //!< Size of the structure. Size = sizeof(CUSTOM_EFFECT_TYPE) - DWORD Param; //!< Extra parameters. - - RZCOLOR Color[MAX_ROW][MAX_COLUMN]; - } CUSTOM_EFFECT_TYPE; - - //! No effect. - typedef struct NO_EFFECT_TYPE - { - RZSIZE Size; //!< Size of the structure. Size = sizeof(NO_EFFECT_TYPE) - DWORD Param; //!< Extra parameters. - } NO_EFFECT_TYPE; - - //! Reactive effect. - typedef struct REACTIVE_EFFECT_TYPE - { - RZSIZE Size; //!< Size of the structure. Size = sizeof(REACTIVE_EFFECT_TYPE) - DWORD Param; //!< Extra parameters. - - //! Duration of the effect. - enum _Duration - { - DURATION_SHORT = 1, //!< Short duration. - DURATION_MEDIUM, //!< Medium duration. - DURATION_LONG //!< Long duration. - } Duration; //!< The time taken for the effect to fade away. - - COLORREF Color; //!< Color of the effect. - } REACTIVE_EFFECT_TYPE; - - //! Spectrum cycling effect. - typedef struct SPECTRUMCYCLING_EFFECT_TYPE - { - RZSIZE Size; //!< Size of the structure. Size = sizeof(SPECTRUMCYCLING_EFFECT_TYPE) - DWORD Param; //!< Extra parameters. - } SPECTRUMCYCLING_EFFECT_TYPE; - - //! Starlight effect. - typedef struct STARLIGHT_EFFECT_TYPE - { - RZSIZE Size; //!< Size of the structure. Size = sizeof(SPECTRUMCYCLING_EFFECT_TYPE) - DWORD Param; //!< Extra parameters. - - //! Starlight effect types. - enum _Type - { - TWO_COLORS = 1, //!< 2 colors. - RANDOM_COLORS //!< Random colors - } Type; - - COLORREF Color1; //!< First color. - COLORREF Color2; //!< Second color. - - //! Duration of the effect. - enum _Duration - { - DURATION_SHORT = 1, //!< Short duration. - DURATION_MEDIUM, //!< Medium duration. - DURATION_LONG //!< Long duration. - } Duration; //!< The time taken for the effect to fade away. - - } STARLIGHT_EFFECT_TYPE; - - //! Static effect. - typedef struct STATIC_EFFECT_TYPE - { - RZSIZE Size; //!< Size of the structure. Size = sizeof(STATIC_EFFECT_TYPE) - DWORD Param; //!< Extra parameters. - - COLORREF Color; //!< Color of the effect. - } STATIC_EFFECT_TYPE; - - //! Wave effect. - typedef struct WAVE_EFFECT_TYPE - { - RZSIZE Size; //!< Size of the structure. Size = sizeof(WAVE_EFFECT_TYPE) - DWORD Param; //!< Extra parameters. - - //! Direction of effect. - enum _Direction - { - DIRECTION_LEFT_TO_RIGHT = 1, //!< Left to right. - DIRECTION_RIGHT_TO_LEFT, //!< Right to left. - DIRECTION_FRONT_TO_BACK, //!< Front to back - DIRECTION_BACK_TO_FRONT //!< Back top front - } Direction; - } WAVE_EFFECT_TYPE; - - //! Keyboards - namespace Keyboard - { - //! Definitions of keys. - typedef enum RZKEY - { - RZKEY_ESC = 0x0001, /*!< Esc (VK_ESCAPE) */ - RZKEY_F1 = 0x0003, /*!< F1 (VK_F1) */ - RZKEY_F2 = 0x0004, /*!< F2 (VK_F2) */ - RZKEY_F3 = 0x0005, /*!< F3 (VK_F3) */ - RZKEY_F4 = 0x0006, /*!< F4 (VK_F4) */ - RZKEY_F5 = 0x0007, /*!< F5 (VK_F5) */ - RZKEY_F6 = 0x0008, /*!< F6 (VK_F6) */ - RZKEY_F7 = 0x0009, /*!< F7 (VK_F7) */ - RZKEY_F8 = 0x000A, /*!< F8 (VK_F8) */ - RZKEY_F9 = 0x000B, /*!< F9 (VK_F9) */ - RZKEY_F10 = 0x000C, /*!< F10 (VK_F10) */ - RZKEY_F11 = 0x000D, /*!< F11 (VK_F11) */ - RZKEY_F12 = 0x000E, /*!< F12 (VK_F12) */ - RZKEY_1 = 0x0102, /*!< 1 (VK_1) */ - RZKEY_2 = 0x0103, /*!< 2 (VK_2) */ - RZKEY_3 = 0x0104, /*!< 3 (VK_3) */ - RZKEY_4 = 0x0105, /*!< 4 (VK_4) */ - RZKEY_5 = 0x0106, /*!< 5 (VK_5) */ - RZKEY_6 = 0x0107, /*!< 6 (VK_6) */ - RZKEY_7 = 0x0108, /*!< 7 (VK_7) */ - RZKEY_8 = 0x0109, /*!< 8 (VK_8) */ - RZKEY_9 = 0x010A, /*!< 9 (VK_9) */ - RZKEY_0 = 0x010B, /*!< 0 (VK_0) */ - RZKEY_A = 0x0302, /*!< A (VK_A) */ - RZKEY_B = 0x0407, /*!< B (VK_B) */ - RZKEY_C = 0x0405, /*!< C (VK_C) */ - RZKEY_D = 0x0304, /*!< D (VK_D) */ - RZKEY_E = 0x0204, /*!< E (VK_E) */ - RZKEY_F = 0x0305, /*!< F (VK_F) */ - RZKEY_G = 0x0306, /*!< G (VK_G) */ - RZKEY_H = 0x0307, /*!< H (VK_H) */ - RZKEY_I = 0x0209, /*!< I (VK_I) */ - RZKEY_J = 0x0308, /*!< J (VK_J) */ - RZKEY_K = 0x0309, /*!< K (VK_K) */ - RZKEY_L = 0x030A, /*!< L (VK_L) */ - RZKEY_M = 0x0409, /*!< M (VK_M) */ - RZKEY_N = 0x0408, /*!< N (VK_N) */ - RZKEY_O = 0x020A, /*!< O (VK_O) */ - RZKEY_P = 0x020B, /*!< P (VK_P) */ - RZKEY_Q = 0x0202, /*!< Q (VK_Q) */ - RZKEY_R = 0x0205, /*!< R (VK_R) */ - RZKEY_S = 0x0303, /*!< S (VK_S) */ - RZKEY_T = 0x0206, /*!< T (VK_T) */ - RZKEY_U = 0x0208, /*!< U (VK_U) */ - RZKEY_V = 0x0406, /*!< V (VK_V) */ - RZKEY_W = 0x0203, /*!< W (VK_W) */ - RZKEY_X = 0x0404, /*!< X (VK_X) */ - RZKEY_Y = 0x0207, /*!< Y (VK_Y) */ - RZKEY_Z = 0x0403, /*!< Z (VK_Z) */ - RZKEY_NUMLOCK = 0x0112, /*!< Numlock (VK_NUMLOCK) */ - RZKEY_NUMPAD0 = 0x0513, /*!< Numpad 0 (VK_NUMPAD0) */ - RZKEY_NUMPAD1 = 0x0412, /*!< Numpad 1 (VK_NUMPAD1) */ - RZKEY_NUMPAD2 = 0x0413, /*!< Numpad 2 (VK_NUMPAD2) */ - RZKEY_NUMPAD3 = 0x0414, /*!< Numpad 3 (VK_NUMPAD3) */ - RZKEY_NUMPAD4 = 0x0312, /*!< Numpad 4 (VK_NUMPAD4) */ - RZKEY_NUMPAD5 = 0x0313, /*!< Numpad 5 (VK_NUMPAD5) */ - RZKEY_NUMPAD6 = 0x0314, /*!< Numpad 6 (VK_NUMPAD6) */ - RZKEY_NUMPAD7 = 0x0212, /*!< Numpad 7 (VK_NUMPAD7) */ - RZKEY_NUMPAD8 = 0x0213, /*!< Numpad 8 (VK_NUMPAD8) */ - RZKEY_NUMPAD9 = 0x0214, /*!< Numpad 9 (VK_ NUMPAD9*/ - RZKEY_NUMPAD_DIVIDE = 0x0113, /*!< Divide (VK_DIVIDE) */ - RZKEY_NUMPAD_MULTIPLY = 0x0114, /*!< Multiply (VK_MULTIPLY) */ - RZKEY_NUMPAD_SUBTRACT = 0x0115, /*!< Subtract (VK_SUBTRACT) */ - RZKEY_NUMPAD_ADD = 0x0215, /*!< Add (VK_ADD) */ - RZKEY_NUMPAD_ENTER = 0x0415, /*!< Enter (VK_RETURN - Extended) */ - RZKEY_NUMPAD_DECIMAL = 0x0514, /*!< Decimal (VK_DECIMAL) */ - RZKEY_PRINTSCREEN = 0x000F, /*!< Print Screen (VK_PRINT) */ - RZKEY_SCROLL = 0x0010, /*!< Scroll Lock (VK_SCROLL) */ - RZKEY_PAUSE = 0x0011, /*!< Pause (VK_PAUSE) */ - RZKEY_INSERT = 0x010F, /*!< Insert (VK_INSERT) */ - RZKEY_HOME = 0x0110, /*!< Home (VK_HOME) */ - RZKEY_PAGEUP = 0x0111, /*!< Page Up (VK_PRIOR) */ - RZKEY_DELETE = 0x020f, /*!< Delete (VK_DELETE) */ - RZKEY_END = 0x0210, /*!< End (VK_END) */ - RZKEY_PAGEDOWN = 0x0211, /*!< Page Down (VK_NEXT) */ - RZKEY_UP = 0x0410, /*!< Up (VK_UP) */ - RZKEY_LEFT = 0x050F, /*!< Left (VK_LEFT) */ - RZKEY_DOWN = 0x0510, /*!< Down (VK_DOWN) */ - RZKEY_RIGHT = 0x0511, /*!< Right (VK_RIGHT) */ - RZKEY_TAB = 0x0201, /*!< Tab (VK_TAB) */ - RZKEY_CAPSLOCK = 0x0301, /*!< Caps Lock(VK_CAPITAL) */ - RZKEY_BACKSPACE = 0x010E, /*!< Backspace (VK_BACK) */ - RZKEY_ENTER = 0x030E, /*!< Enter (VK_RETURN) */ - RZKEY_LCTRL = 0x0501, /*!< Left Control(VK_LCONTROL) */ - RZKEY_LWIN = 0x0502, /*!< Left Window (VK_LWIN) */ - RZKEY_LALT = 0x0503, /*!< Left Alt (VK_LMENU) */ - RZKEY_SPACE = 0x0507, /*!< Spacebar (VK_SPACE) */ - RZKEY_RALT = 0x050B, /*!< Right Alt (VK_RMENU) */ - RZKEY_FN = 0x050C, /*!< Function key. */ - RZKEY_RMENU = 0x050D, /*!< Right Menu (VK_APPS) */ - RZKEY_RCTRL = 0x050E, /*!< Right Control (VK_RCONTROL) */ - RZKEY_LSHIFT = 0x0401, /*!< Left Shift (VK_LSHIFT) */ - RZKEY_RSHIFT = 0x040E, /*!< Right Shift (VK_RSHIFT) */ - RZKEY_MACRO1 = 0x0100, /*!< Macro Key 1 */ - RZKEY_MACRO2 = 0x0200, /*!< Macro Key 2 */ - RZKEY_MACRO3 = 0x0300, /*!< Macro Key 3 */ - RZKEY_MACRO4 = 0x0400, /*!< Macro Key 4 */ - RZKEY_MACRO5 = 0x0500, /*!< Macro Key 5 */ - RZKEY_OEM_1 = 0x0101, /*!< ~ (tilde/半角/全角) (VK_OEM_3) */ - RZKEY_OEM_2 = 0x010C, /*!< -- (minus) (VK_OEM_MINUS) */ - RZKEY_OEM_3 = 0x010D, /*!< = (equal) (VK_OEM_PLUS) */ - RZKEY_OEM_4 = 0x020C, /*!< [ (left sqaure bracket) (VK_OEM_4) */ - RZKEY_OEM_5 = 0x020D, /*!< ] (right square bracket) (VK_OEM_6) */ - RZKEY_OEM_6 = 0x020E, /*!< \ (backslash) (VK_OEM_5) */ - RZKEY_OEM_7 = 0x030B, /*!< ; (semi-colon) (VK_OEM_1) */ - RZKEY_OEM_8 = 0x030C, /*!< ' (apostrophe) (VK_OEM_7) */ - RZKEY_OEM_9 = 0x040A, /*!< , (comma) (VK_OEM_COMMA) */ - RZKEY_OEM_10 = 0x040B, /*!< . (period) (VK_OEM_PERIOD) */ - RZKEY_OEM_11 = 0x040C, /*!< / (forward slash) (VK_OEM_2) */ - RZKEY_EUR_1 = 0x030D, /*!< "#" (VK_OEM_5) */ - RZKEY_EUR_2 = 0x0402, /*!< \ (VK_OEM_102) */ - RZKEY_JPN_1 = 0x0015, /*!< ¥ (0xFF) */ - RZKEY_JPN_2 = 0x040D, /*!< \ (0xC1) */ - RZKEY_JPN_3 = 0x0504, /*!< 無変換 (VK_OEM_PA1) */ - RZKEY_JPN_4 = 0x0509, /*!< 変換 (0xFF) */ - RZKEY_JPN_5 = 0x050A, /*!< ひらがな/カタカナ (0xFF) */ - RZKEY_KOR_1 = 0x0015, /*!< | (0xFF) */ - RZKEY_KOR_2 = 0x030D, /*!< (VK_OEM_5) */ - RZKEY_KOR_3 = 0x0402, /*!< (VK_OEM_102) */ - RZKEY_KOR_4 = 0x040D, /*!< (0xC1) */ - RZKEY_KOR_5 = 0x0504, /*!< (VK_OEM_PA1) */ - RZKEY_KOR_6 = 0x0509, /*!< 한/영 (0xFF) */ - RZKEY_KOR_7 = 0x050A, /*!< (0xFF) */ - RZKEY_INVALID = 0xFFFF /*!< Invalid keys. */ - } RZKEY; - - //! Definition of LEDs. - typedef enum RZLED - { - RZLED_LOGO = 0x0014 /*!< Razer logo */ - } RZLED; - - //! Maximum number of rows in a keyboard. - const RZSIZE MAX_ROW = 6; - - //! Maximum number of columns in a keyboard. - const RZSIZE MAX_COLUMN = 22; - - //! Maximum number of keys. - const RZSIZE MAX_KEYS = MAX_ROW * MAX_COLUMN; - - //! Maximum number of custom effects. - const RZSIZE MAX_CUSTOM_EFFECTS = MAX_KEYS; - - //! Keyboard LED layout. - const COLORREF RZKEY_LAYOUT[MAX_ROW][MAX_COLUMN] = {}; - - //! Chroma keyboard effect types - typedef enum EFFECT_TYPE - { - CHROMA_NONE = 0, //!< No effect. - CHROMA_BREATHING, //!< Breathing effect. - CHROMA_CUSTOM, //!< Custom effect. - CHROMA_REACTIVE, //!< Reactive effect. - CHROMA_STATIC, //!< Static effect. - CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect. - CHROMA_WAVE, //!< Wave effect. - CHROMA_RESERVED, //!< TODO. - CHROMA_CUSTOM_KEY, //!< Custom effects with keys. - CHROMA_INVALID //!< Invalid effect. - } EFFECT_TYPE; - - // Chroma keyboard effects - //! Breathing effect type - typedef struct BREATHING_EFFECT_TYPE - { - //! Breathing effects. - enum Type - { - TWO_COLORS = 1, //!< 2 colors - RANDOM_COLORS, //!< Random colors - INVALID //!< Invalid type - } Type; - COLORREF Color1; //!< First color. - COLORREF Color2; //!< Second color. - } BREATHING_EFFECT_TYPE; - - //! Custom effect using a matrix type. - typedef struct CUSTOM_EFFECT_TYPE - { - COLORREF Color[MAX_ROW][MAX_COLUMN]; //!< Grid layout. 6 rows by 22 columns. - } CUSTOM_EFFECT_TYPE; - - //! Custom effect with keys. - typedef struct CUSTOM_KEY_EFFECT_TYPE - { - COLORREF Color[MAX_ROW][MAX_COLUMN]; //!< Grid layout. 6 rows by 22 columns. - COLORREF Key[MAX_ROW][MAX_COLUMN]; //!< Keys information. 6 rows by 22 columns. To indidate there is a key effect, OR with 0x01000000. i.e. Key[0][1] = 0x01000000 | Color; - } CUSTOM_KEY_EFFECT_TYPE; - - //! Reactive effect type - typedef struct REACTIVE_EFFECT_TYPE - { - //! Duration of the effect. - enum Duration - { - DURATION_NONE=0, //!< No duration. - DURATION_SHORT, //!< Short duration. - DURATION_MEDIUM, //!< Medium duration. - DURATION_LONG, //!< Long duration. - DURATION_INVALID //!< Invalid duration. - } Duration; //!< The time taken for the effect to fade away. - - COLORREF Color; //!< Color of the effect - } REACTIVE_EFFECT_TYPE; - - //! Starlight effect. - typedef struct STARLIGHT_EFFECT_TYPE - { - //! Starlight effect types. - enum _Type - { - TWO_COLORS = 1, //!< 2 colors. - RANDOM_COLORS //!< Random colors - } Type; - - COLORREF Color1; //!< First color. - COLORREF Color2; //!< Second color. - - //! Duration of the effect. - enum _Duration - { - DURATION_SHORT = 1, //!< Short duration. - DURATION_MEDIUM, //!< Medium duration. - DURATION_LONG //!< Long duration. - } Duration; //!< The time taken for the effect to fade away. - - } STARLIGHT_EFFECT_TYPE; - - //! Static effect type - typedef struct STATIC_EFFECT_TYPE - { - COLORREF Color; //!< Color of the effect - } STATIC_EFFECT_TYPE; - - //! Wave effect type - typedef struct WAVE_EFFECT_TYPE - { - //! Direction of the wave effect. - enum Direction - { - DIRECTION_NONE=0, //!< No direction. - DIRECTION_LEFT_TO_RIGHT, //!< Left to right. - DIRECTION_RIGHT_TO_LEFT, //!< Right to left. - DIRECTION_INVALID //!< Invalid direction. - } Direction; //!< Direction of the wave. - } WAVE_EFFECT_TYPE; - } - - //! Mice - namespace Mouse - { - //! Maximum number of custom LEDs (old definition to maintain backward compatibility). - const RZSIZE MAX_LEDS = 30; - - //! Mice LED layout (old definition to maintain backward compatibility). - const RZCOLOR RZLED_LAYOUT[MAX_LEDS] = {}; - - //! Maximum number of rows of the virtual grid. - const RZSIZE MAX_ROW = 9; - - //! Maximum number of columns of the virtual grid. - const RZSIZE MAX_COLUMN = 7; - - //! Maximum number of LEDs of the virtual grid. - const RZSIZE MAX_LEDS2 = MAX_ROW * MAX_COLUMN; - - //! Mice LED virtual grid layout. - const RZCOLOR RZLED_LAYOUT2[MAX_ROW][MAX_COLUMN] = {}; - - //! Mouse LED Id defintion (old definition to maintain backward compatibility). - typedef enum RZLED - { - RZLED_NONE = 0, //!< No LED. - RZLED_SCROLLWHEEL = 1, //!< Scroll Wheel LED. - RZLED_LOGO = 2, //!< Logo LED. - RZLED_BACKLIGHT = 3, //!< Backlight or numpad. - RZLED_SIDE_STRIP1 = 4, //!< Side strip LED 1. (For Mamba TE, starts from top left hand) - RZLED_SIDE_STRIP2 = 5, //!< Side strip LED 2. (For Mamba TE) - RZLED_SIDE_STRIP3 = 6, //!< Side strip LED 3. (For Mamba TE) - RZLED_SIDE_STRIP4 = 7, //!< Side strip LED 4. (For Mamba TE) - RZLED_SIDE_STRIP5 = 8, //!< Side strip LED 5. (For Mamba TE) - RZLED_SIDE_STRIP6 = 9, //!< Side strip LED 6. (For Mamba TE) - RZLED_SIDE_STRIP7 = 10, //!< Side strip LED 7. (For Mamba TE) - RZLED_SIDE_STRIP8 = 11, //!< Side strip LED 8. (For Mamba TE) - RZLED_SIDE_STRIP9 = 12, //!< Side strip LED 9. (For Mamba TE) - RZLED_SIDE_STRIP10 = 13, //!< Side strip LED 10. (For Mamba TE) - RZLED_SIDE_STRIP11 = 14, //!< Side strip LED 11. (For Mamba TE) - RZLED_SIDE_STRIP12 = 15, //!< Side strip LED 12. (For Mamba TE) - RZLED_SIDE_STRIP13 = 16, //!< Side strip LED 13. (For Mamba TE) - RZLED_SIDE_STRIP14 = 17, //!< Side strip LED 14. (For Mamba TE) - RZLED_ALL = 0xFFFF - } RZLED; - - //! Mouse LED Id defintion for the virtual grid. - typedef enum RZLED2 - { - RZLED2_SCROLLWHEEL = 0x0203, //!< Scroll Wheel LED. - RZLED2_LOGO = 0x0703, //!< Logo LED. - RZLED2_BACKLIGHT = 0x0403, //!< Backlight LED. - RZLED2_LEFT_SIDE1 = 0x0100, //!< Left LED 1. - RZLED2_LEFT_SIDE2 = 0x0200, //!< Left LED 2. - RZLED2_LEFT_SIDE3 = 0x0300, //!< Left LED 3. - RZLED2_LEFT_SIDE4 = 0x0400, //!< Left LED 4. - RZLED2_LEFT_SIDE5 = 0x0500, //!< Left LED 5. - RZLED2_LEFT_SIDE6 = 0x0600, //!< Left LED 6. - RZLED2_LEFT_SIDE7 = 0x0700, //!< Left LED 7. - RZLED2_BOTTOM1 = 0x0801, //!< Bottom LED 1. - RZLED2_BOTTOM2 = 0x0802, //!< Bottom LED 2. - RZLED2_BOTTOM3 = 0x0803, //!< Bottom LED 3. - RZLED2_BOTTOM4 = 0x0804, //!< Bottom LED 4. - RZLED2_BOTTOM5 = 0x0805, //!< Bottom LED 5. - RZLED2_RIGHT_SIDE1 = 0x0106, //!< Right LED 1. - RZLED2_RIGHT_SIDE2 = 0x0206, //!< Right LED 2. - RZLED2_RIGHT_SIDE3 = 0x0306, //!< Right LED 3. - RZLED2_RIGHT_SIDE4 = 0x0406, //!< Right LED 4. - RZLED2_RIGHT_SIDE5 = 0x0506, //!< Right LED 5. - RZLED2_RIGHT_SIDE6 = 0x0606, //!< Right LED 6. - RZLED2_RIGHT_SIDE7 = 0x0706 //!< Right LED 7. - } RZLED2; - - //! Chroma mouse effect types - typedef enum EFFECT_TYPE - { - CHROMA_NONE = 0, //!< No effect. - CHROMA_BLINKING, //!< Blinking effect. - CHROMA_BREATHING, //!< Breathing effect. - CHROMA_CUSTOM, //!< Custom effect (old definition to maintain backward compatibility). - CHROMA_REACTIVE, //!< Reactive effect. - CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect. - CHROMA_STATIC, //!< Static effect. - CHROMA_WAVE, //!< Wave effect. - CHROMA_CUSTOM2, //!< Custom effects using a virtual grid. - CHROMA_INVALID //!< Invalid effect. - } EFFECT_TYPE; - - //! Static effect type - typedef struct STATIC_EFFECT_TYPE - { - RZLED LEDId; //!< LED Id - COLORREF Color; //!< Color of the effect. - } STATIC_EFFECT_TYPE; - - //! Blinking effect type. - typedef struct BLINKING_EFFECT_TYPE - { - RZLED LEDId; //!< LED Id - COLORREF Color; //!< Color. - } BLINKING_EFFECT_TYPE; - - //! Breathing effect. - typedef struct BREATHING_EFFECT_TYPE - { - RZLED LEDId; //!< LED Id - - //! Breathing type. - enum Type - { - ONE_COLOR = 1, //!< 1 color (Only fill Color1). - TWO_COLORS, //!< 2 colors. - RANDOM_COLORS, //!< Random colors - INVALID //!< Invalid type - } Type; - - COLORREF Color1; //!< First color. - COLORREF Color2; //!< Second color. - } BREATHING_EFFECT_TYPE; - - //! Custom effect. - typedef struct CUSTOM_EFFECT_TYPE - { - RZCOLOR Color[MAX_LEDS]; //!< Array of colors. - } CUSTOM_EFFECT_TYPE; - - //! Custom effect using virtual grid. - //! Indexes of the LED are defined in RZLED2.i.e. Row = HIBYTE(RZLED2_SCROLLWHEEL), Column = LOBYTE(RZLED2_SCROLLWHEEL) - typedef struct CUSTOM_EFFECT_TYPE2 - { - RZCOLOR Color[MAX_ROW][MAX_COLUMN]; //!< Array of colors. - } CUSTOM_EFFECT_TYPE2; - - //! Reactive effect. - typedef struct REACTIVE_EFFECT_TYPE - { - RZLED LEDId; //!< LED Id - - //! Duration of the effect. - enum Duration - { - DURATION_NONE=0, //!< No duration. - DURATION_SHORT, //!< Short duration. - DURATION_MEDIUM, //!< Medium duration. - DURATION_LONG //!< Long duration. - } Duration; - - RZCOLOR Color; //!< Color of the effect. - } REACTIVE_EFFECT_TYPE; - - //! No effect. - typedef struct NO_EFFECT_TYPE - { - RZLED LEDId; //!< LED Id - } NO_EFFECT_TYPE; - - //! Spectrum cycling. - typedef struct SPECTRUMCYCLING_EFFECT_TYPE - { - RZLED LEDId; //!< LED id. - } SPECTRUMCYCLING_EFFECT_TYPE; - - //! Wave effect. - typedef struct WAVE_EFFECT_TYPE - { - //! Direction of the wave effect. - enum Direction - { - FRONT_TO_BACK, //!< Front to back - BACK_TO_FRONT //!< Back to front - } Direction; - } WAVE_EFFECT_TYPE; - } - - //! Headsets - namespace Headset - { - //! Maximum number of LEDs - const RZSIZE MAX_LEDS = 5; - - //! Chroma headset effect types - typedef enum EFFECT_TYPE - { - CHROMA_NONE = 0, //!< No effect. - CHROMA_STATIC, //!< Static effect. - CHROMA_BREATHING, //!< Breathing effect. - CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect. - CHROMA_CUSTOM, //!< Custom effects. - CHROMA_INVALID //!< Invalid effect. - } EFFECT_TYPE; - - //! Static effect type - typedef struct STATIC_EFFECT_TYPE - { - COLORREF Color; //!< Color of the effect. - } STATIC_EFFECT_TYPE; - - //! Breathing effect type. - typedef struct BREATHING_EFFECT_TYPE - { - COLORREF Color; //!< Color. - } BREATHING_EFFECT_TYPE; - - //! Custom effect type. - typedef struct CUSTOM_EFFECT_TYPE - { - RZCOLOR Color[MAX_LEDS]; //!< Array of colors. - } CUSTOM_EFFECT_TYPE; - } - - //! Mousepads - namespace Mousepad - { - //! Maximum number of LEDs - const RZSIZE MAX_LEDS = 15; - - //! Chroma mousepad effect types - typedef enum EFFECT_TYPE - { - CHROMA_NONE = 0, //!< No effect. - CHROMA_BREATHING, //!< Breathing effect. - CHROMA_CUSTOM, //!< Custom effect. - CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect. - CHROMA_STATIC, //!< Static effect. - CHROMA_WAVE, //!< Wave effect. - CHROMA_INVALID //!< Invalid effect. - } EFFECT_TYPE; - - // Chroma mousepad effects - //! Breathing effect type. - typedef struct BREATHING_EFFECT_TYPE - { - //! Breathing effects. - enum Type - { - TWO_COLORS = 1, //!< 2 colors - RANDOM_COLORS, //!< Random colors - INVALID - } Type; - COLORREF Color1; //!< First color. - COLORREF Color2; //!< Second color. - } BREATHING_EFFECT_TYPE; - - //! Custom effect type. - typedef struct CUSTOM_EFFECT_TYPE - { - RZCOLOR Color[MAX_LEDS]; //!< An array of colors for all the sides of the mousepad. First LED starts from top-right corner. - //!< LED 0-4 right side, 5-9 bottom side, 10-14 left side. - } CUSTOM_EFFECT_TYPE; - - //! Static effect type - typedef struct STATIC_EFFECT_TYPE - { - COLORREF Color; //!< Color of the effect - } STATIC_EFFECT_TYPE; - - //! Wave effect type - typedef struct WAVE_EFFECT_TYPE - { - //! Direction of the wave effect. - enum Direction - { - DIRECTION_NONE=0, //!< No direction. - DIRECTION_LEFT_TO_RIGHT, //!< Left to right. - DIRECTION_RIGHT_TO_LEFT, //!< Right to left. - DIRECTION_INVALID //!< Invalid direction. - } Direction; //!< Direction of the wave. - } WAVE_EFFECT_TYPE; - } - - //! Keypads - namespace Keypad - { - //! Maximum number of rows. - const RZSIZE MAX_ROW = 4; - - //! Maximum number of columns. - const RZSIZE MAX_COLUMN = 5; - - //! Total number of keys. - const RZSIZE MAX_KEYS = MAX_ROW * MAX_COLUMN; - - //! Chroma keypad effect types - typedef enum EFFECT_TYPE - { - CHROMA_NONE = 0, //!< No effect. - CHROMA_BREATHING, //!< Breathing effect. - CHROMA_CUSTOM, //!< Custom effect. - CHROMA_REACTIVE, //!< Reactive effect. - CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect. - CHROMA_STATIC, //!< Static effect. - CHROMA_WAVE, //!< Wave effect. - CHROMA_INVALID //!< Invalid effect. - } EFFECT_TYPE; - - // Chroma keypad effects - //! Breathing effect type. - typedef struct BREATHING_EFFECT_TYPE - { - //! Breathing effects. - enum Type - { - TWO_COLORS = 1, //!< 2 colors - RANDOM_COLORS, //!< Random colors - INVALID //!< Invalid type - } Type; - COLORREF Color1; //!< First color. - COLORREF Color2; //!< Second color. - } BREATHING_EFFECT_TYPE; - - //! Custom effect type - typedef struct CUSTOM_EFFECT_TYPE - { - RZCOLOR Color[MAX_ROW][MAX_COLUMN]; //!< Custom effect. - //!< For Razer Tartarus Chroma only Color[0] is valid. Use index '0' to change the keypad color. - } CUSTOM_EFFECT_TYPE; - - //! Reactive effect type - typedef struct REACTIVE_EFFECT_TYPE - { - //! Duration of the effect. - enum Duration - { - DURATION_NONE=0, //!< No duration. - DURATION_SHORT, //!< Short duration. - DURATION_MEDIUM, //!< Medium duration. - DURATION_LONG, //!< Long duration. - DURATION_INVALID //!< Invalid duration. - } Duration; //!< The time taken for the effect to fade away. - - COLORREF Color; //!< Color of the effect - } REACTIVE_EFFECT_TYPE; - - //! Static effect type - typedef struct STATIC_EFFECT_TYPE - { - RZCOLOR Color; //!< Color of the effect. - } STATIC_EFFECT_TYPE; - - //! Wave effect type - typedef struct WAVE_EFFECT_TYPE - { - //! Direction of the wave effect. - enum Direction - { - DIRECTION_NONE=0, //!< No direction. - DIRECTION_LEFT_TO_RIGHT, //!< Left to right. - DIRECTION_RIGHT_TO_LEFT, //!< Right to left. - DIRECTION_INVALID //!< Invalid direction. - } Direction; //!< Direction of the wave. - } WAVE_EFFECT_TYPE; - } -} - -#endif diff --git a/stremio-shell/deps/chroma/ChromaSDK/inc/RzErrors.h b/stremio-shell/deps/chroma/ChromaSDK/inc/RzErrors.h deleted file mode 100644 index 6d3f29b..0000000 --- a/stremio-shell/deps/chroma/ChromaSDK/inc/RzErrors.h +++ /dev/null @@ -1,46 +0,0 @@ - -//! \file RzErrors.h -//! \brief Error codes for Chroma SDK. If the error is not defined here, refer to WinError.h from the Windows SDK. - -#ifndef _RZERRORS_H_ -#define _RZERRORS_H_ - -#pragma once - -// Error codes -//! Invalid -#define RZRESULT_INVALID -1L -//! Success -#define RZRESULT_SUCCESS 0L -//! Access denied -#define RZRESULT_ACCESS_DENIED 5L -//! Invalid handle -#define RZRESULT_INVALID_HANDLE 6L -//! Not supported -#define RZRESULT_NOT_SUPPORTED 50L -//! Invalid parameter. -#define RZRESULT_INVALID_PARAMETER 87L -//! The service has not been started -#define RZRESULT_SERVICE_NOT_ACTIVE 1062L -//! Cannot start more than one instance of the specified program. -#define RZRESULT_SINGLE_INSTANCE_APP 1152L -//! Device not connected -#define RZRESULT_DEVICE_NOT_CONNECTED 1167L -//! Element not found. -#define RZRESULT_NOT_FOUND 1168L -//! Request aborted. -#define RZRESULT_REQUEST_ABORTED 1235L -//! An attempt was made to perform an initialization operation when initialization has already been completed. -#define RZRESULT_ALREADY_INITIALIZED 1247L -//! Resource not available or disabled -#define RZRESULT_RESOURCE_DISABLED 4309L -//! Device not available or supported -#define RZRESULT_DEVICE_NOT_AVAILABLE 4319L -//! The group or resource is not in the correct state to perform the requested operation. -#define RZRESULT_NOT_VALID_STATE 5023L -//! No more items -#define RZRESULT_NO_MORE_ITEMS 259L -//! General failure. -#define RZRESULT_FAILED 2147500037L - -#endif diff --git a/stremio-shell/deps/chroma/ChromaSDKImpl.cpp b/stremio-shell/deps/chroma/ChromaSDKImpl.cpp deleted file mode 100644 index 38a5d0e..0000000 --- a/stremio-shell/deps/chroma/ChromaSDKImpl.cpp +++ /dev/null @@ -1,1739 +0,0 @@ -//! \example ChromaSDKImpl.cpp - -#include "stdafx.h" -#include "ChromaSDKImpl.h" - -#ifdef _WIN64 -#define CHROMASDKDLL _T("RzChromaSDK64.dll") -#else -#define CHROMASDKDLL _T("RzChromaSDK.dll") -#endif - -using namespace ChromaSDK; -using namespace ChromaSDK::Keyboard; -using namespace ChromaSDK::Keypad; -using namespace ChromaSDK::Mouse; -using namespace ChromaSDK::Mousepad; -using namespace ChromaSDK::Headset; - -typedef RZRESULT (*INIT)(void); -typedef RZRESULT (*UNINIT)(void); -typedef RZRESULT (*CREATEEFFECT)(RZDEVICEID DeviceId, ChromaSDK::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId); -typedef RZRESULT (*CREATEKEYBOARDEFFECT)(ChromaSDK::Keyboard::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId); -typedef RZRESULT (*CREATEHEADSETEFFECT)(ChromaSDK::Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId); -typedef RZRESULT (*CREATEMOUSEPADEFFECT)(ChromaSDK::Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId); -typedef RZRESULT (*CREATEMOUSEEFFECT)(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId); -typedef RZRESULT (*CREATEKEYPADEFFECT)(ChromaSDK::Keypad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId); -typedef RZRESULT (*SETEFFECT)(RZEFFECTID EffectId); -typedef RZRESULT (*DELETEEFFECT)(RZEFFECTID EffectId); -typedef RZRESULT (*REGISTEREVENTNOTIFICATION)(HWND hWnd); -typedef RZRESULT (*UNREGISTEREVENTNOTIFICATION)(void); -typedef RZRESULT (*QUERYDEVICE)(RZDEVICEID DeviceId, ChromaSDK::DEVICE_INFO_TYPE &DeviceInfo); - -INIT Init = NULL; -UNINIT UnInit = NULL; -CREATEEFFECT CreateEffect = NULL; -CREATEKEYBOARDEFFECT CreateKeyboardEffect = NULL; -CREATEMOUSEEFFECT CreateMouseEffect = NULL; -CREATEHEADSETEFFECT CreateHeadsetEffect = NULL; -CREATEMOUSEPADEFFECT CreateMousepadEffect = NULL; -CREATEKEYPADEFFECT CreateKeypadEffect = NULL; -SETEFFECT SetEffect = NULL; -DELETEEFFECT DeleteEffect = NULL; -QUERYDEVICE QueryDevice = NULL; - -DWORD WINAPI Thread_LoadingAnimationOnKeyboard(LPVOID lpParameter) -{ - RZEFFECTID Frame0 = GUID_NULL; - RZEFFECTID Frame1 = GUID_NULL; - RZEFFECTID Frame2 = GUID_NULL; - RZEFFECTID Frame3 = GUID_NULL; - RZEFFECTID Frame4 = GUID_NULL; - RZEFFECTID Frame5 = GUID_NULL; - RZEFFECTID Frame6 = GUID_NULL; - - if(CreateKeyboardEffect) - { - // Loading animation - ChromaSDK::Keyboard::CUSTOM_EFFECT_TYPE Effect = {}; - - // Create the animation frames if not created - CreateKeyboardEffect(ChromaSDK::Keyboard::CHROMA_NONE, NULL, &Frame0); - - for(UINT r=0; r0; --i) - { - CustomEffect.Color[i] = ORANGE; - - CreateMousepadEffect(ChromaSDK::Mousepad::CHROMA_CUSTOM, &CustomEffect, NULL); - - Sleep(50); - } - } - - return 0; -} - -DWORD WINAPI Thread_LoadingAnimationOnMice(LPVOID lpParameter) -{ - if(CreateMouseEffect) - { - // This works too! - // Using old interface. - //ChromaSDK::Mouse::CUSTOM_EFFECT_TYPE CustomEffect = {}; - - //CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM, &CustomEffect, NULL); - - //Sleep(500); - - //for(UINT i=0; i<7; i++) - //{ - // CustomEffect.Color[RZLED_SIDE_STRIP7-i] = ORANGE; - // CustomEffect.Color[RZLED_SIDE_STRIP14-i] = ORANGE; - - // if(i == 2) - // { - // CustomEffect.Color[RZLED_LOGO] = ORANGE; - // } - // else if(i == 6) - // { - // CustomEffect.Color[RZLED_SCROLLWHEEL] = ORANGE; - // } - - // CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM, &CustomEffect, NULL); - - // Sleep(50); - //} - - // Using the new mice virtual grid - ChromaSDK::Mouse::CUSTOM_EFFECT_TYPE2 CustomEffect = {}; - - CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM2, &CustomEffect, NULL); - - Sleep(500); - - //for(UINT i=0; i<7; i++) - //{ - // CustomEffect.Color[HIBYTE(RZLED2_LEFT_SIDE7)-i][0] = ORANGE; - // CustomEffect.Color[HIBYTE(RZLED2_RIGHT_SIDE7)-i][6] = ORANGE; - - // if(i == 0) - // { - // // For Razer Diamondback bottom LEDs. - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM1)] = RED; - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM5)] = RED; - // } - // else if(i == 2) - // { - // CustomEffect.Color[HIBYTE(RZLED2_LOGO)][LOBYTE(RZLED2_LOGO)] = ORANGE; - - // // For Razer Diamondback bottom LEDs. - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM2)] = RED; - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM4)] = RED; - // } - // else if(i == 4) - // { - // // For Razer Naga Epic numpad LED. - // CustomEffect.Color[HIBYTE(RZLED2_BACKLIGHT)][LOBYTE(RZLED2_BACKLIGHT)] = ORANGE; - // } - // else if(i == 6) - // { - // CustomEffect.Color[HIBYTE(RZLED2_SCROLLWHEEL)][LOBYTE(RZLED2_SCROLLWHEEL)] = ORANGE; - - // // For Razer Diamondback bottom LEDs. - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM3)] = RED; - // } - - // CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM2, &CustomEffect, NULL); - - // Sleep(50); - //} - - for(INT row=Mouse::MAX_ROW-1; row>=0; row--) - { - for(UINT col=0; col0; --i) - { - CustomEffect.Color[i] = ORANGE; - - CreateMousepadEffect(ChromaSDK::Mousepad::CHROMA_CUSTOM, &CustomEffect, NULL); - - Sleep(50); - } - } - - return 0; -} - -DWORD WINAPI Thread_LoadingAnimationOnMice(LPVOID lpParameter) -{ - if(CreateMouseEffect) - { - // This works too! - // Using old interface. - //ChromaSDK::Mouse::CUSTOM_EFFECT_TYPE CustomEffect = {}; - - //CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM, &CustomEffect, NULL); - - //Sleep(500); - - //for(UINT i=0; i<7; i++) - //{ - // CustomEffect.Color[RZLED_SIDE_STRIP7-i] = ORANGE; - // CustomEffect.Color[RZLED_SIDE_STRIP14-i] = ORANGE; - - // if(i == 2) - // { - // CustomEffect.Color[RZLED_LOGO] = ORANGE; - // } - // else if(i == 6) - // { - // CustomEffect.Color[RZLED_SCROLLWHEEL] = ORANGE; - // } - - // CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM, &CustomEffect, NULL); - - // Sleep(50); - //} - - // Using the new mice virtual grid - ChromaSDK::Mouse::CUSTOM_EFFECT_TYPE2 CustomEffect = {}; - - CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM2, &CustomEffect, NULL); - - Sleep(500); - - //for(UINT i=0; i<7; i++) - //{ - // CustomEffect.Color[HIBYTE(RZLED2_LEFT_SIDE7)-i][0] = ORANGE; - // CustomEffect.Color[HIBYTE(RZLED2_RIGHT_SIDE7)-i][6] = ORANGE; - - // if(i == 0) - // { - // // For Razer Diamondback bottom LEDs. - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM1)] = RED; - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM5)] = RED; - // } - // else if(i == 2) - // { - // CustomEffect.Color[HIBYTE(RZLED2_LOGO)][LOBYTE(RZLED2_LOGO)] = ORANGE; - - // // For Razer Diamondback bottom LEDs. - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM2)] = RED; - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM4)] = RED; - // } - // else if(i == 4) - // { - // // For Razer Naga Epic numpad LED. - // CustomEffect.Color[HIBYTE(RZLED2_BACKLIGHT)][LOBYTE(RZLED2_BACKLIGHT)] = ORANGE; - // } - // else if(i == 6) - // { - // CustomEffect.Color[HIBYTE(RZLED2_SCROLLWHEEL)][LOBYTE(RZLED2_SCROLLWHEEL)] = ORANGE; - - // // For Razer Diamondback bottom LEDs. - // CustomEffect.Color[8][LOBYTE(RZLED2_BOTTOM3)] = RED; - // } - - // CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM2, &CustomEffect, NULL); - - // Sleep(50); - //} - - for(INT row=Mouse::MAX_ROW-1; row>=0; row--) - { - for(UINT col=0; col -#include // for assert - -#include "RzChromaSDKDefines.h" -#include "RzChromaSDKTypes.h" -#include "RzErrors.h" - -const COLORREF BLACK = RGB(0,0,0); -const COLORREF WHITE = RGB(255,255,255); -const COLORREF RED = RGB(255,0,0); -const COLORREF GREEN = RGB(0,255,0); -const COLORREF BLUE = RGB(0,0,255); -const COLORREF YELLOW = RGB(255,255,0); -const COLORREF PURPLE = RGB(128,0,128); -const COLORREF CYAN = RGB(00,255,255); -const COLORREF ORANGE = RGB(255,165,00); -const COLORREF PINK = RGB(255,192,203); -const COLORREF GREY = RGB(125, 125, 125); - -#define ALL_DEVICES 0 -#define KEYBOARD_DEVICES 1 -#define MOUSEMAT_DEVICES 2 -#define MOUSE_DEVICES 3 -#define HEADSET_DEVICES 4 -#define KEYPAD_DEVICES 5 - -class CChromaSDKImpl -{ -public: - CChromaSDKImpl(); - ~CChromaSDKImpl(); - - BOOL Initialize(); - BOOL UnInitialize(); - - void PlayLoadingAnimation(UINT DeviceType); - void ShowKeys(UINT DeviceType, UINT NumKeys, UINT VKey[], COLORREF Color, BOOL Animate=FALSE); - void ShowKeysWithCustomCol(UINT DeviceType, UINT NumKeys, UINT VKey[], COLORREF Colors[], BOOL Animate=FALSE); - void ShowLevel(UINT DeviceType, UINT Hp, UINT Ammo); - void ShowAlert(UINT DeviceType, COLORREF Color); - void ShowGauge(UINT DeviceType, UINT Level); - void ShowBitmap(UINT DeviceType, HBITMAP hBitmap); - void ShowDamageEffect(UINT DeviceType); - void ShowColor(UINT DeviceType, COLORREF Color); - void ResetEffects(UINT DeviceType); - BOOL IsDeviceConnected(RZDEVICEID DeviceId); - -private: - HMODULE m_ChromaSDKModule; -}; - -#endif diff --git a/stremio-shell/deps/chroma/chroma.pri b/stremio-shell/deps/chroma/chroma.pri deleted file mode 100644 index 7cd3f8f..0000000 --- a/stremio-shell/deps/chroma/chroma.pri +++ /dev/null @@ -1,10 +0,0 @@ -HEADERS += $$PWD/chroma.h -SOURCES += $$PWD/chroma.cpp - -INCLUDEPATH += $$PWD/ChromaSDK/inc -INCLUDEPATH += $$PWD - -win32 { - msvc:LIBS += user32.lib - gcc:LIBS += -luser32 -} diff --git a/stremio-shell/deps/libmpv/README.md b/stremio-shell/deps/libmpv/README.md deleted file mode 100644 index b524e25..0000000 --- a/stremio-shell/deps/libmpv/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# libmpv - -libmpv headers and linking libraries - -Linking libraries are only provided for `win32`, and `win32-x64` will be added. For other operating systems, use `pkg-config` and system-wide libmpv - - -## VERSION - -The `.lib` files for Windows are updated from those builds: - -https://mpv.srsfckn.biz/mpv-dev-20170212.7z - - -## Windows - how to generate `mpv.lib` - -This `mpv.lib` for Windows was generated using the instructions on [MPV's wiki](https://github.com/mpv-player/mpv/blob/master/DOCS/compile-windows.md#linking-libmpv-with-msvc-programs) from the [srsfckn MPV windows builds](https://mpv.srsfckn.biz) Dev package. - - -### x86 - -``` -CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 -lib /def:mpv.def /name:mpv-1.dll /out:mpv.lib /MACHINE:X86 -``` - -### x64 - -``` -CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 -lib /def:mpv.def /name:mpv-1.dll /out:mpv.lib /MACHINE:X64 -``` - - - -## Mac - -The files in `lib/` are taken from the brew build of `libmpv`, 0.24.0 version in particular. The reason to use particular dylibs commited to the repo is to ensure we have consistency, since we take the include files from here either way. - -It also ensures we have a consistency in versions (0.24.0) - -### Fix `rpath` if you copy files - -When you copy files from system deps, you can do something like that to fix `rpath` - -``` -find $1/*.dylib | while read LINE -do - otool -l "$LINE" | grep "name " | grep "/usr/local/Cellar" | cut -d " " -f11 | while read LIB - do - echo "$LINE -> $LIB" - install_name_tool -change "$LIB" "@executable_path/../Frameworks/$(basename $LIB)" $LINE - done -done -``` diff --git a/stremio-shell/deps/libmpv/include/mpv/client.h b/stremio-shell/deps/libmpv/include/mpv/client.h deleted file mode 100644 index 488ccb3..0000000 --- a/stremio-shell/deps/libmpv/include/mpv/client.h +++ /dev/null @@ -1,1875 +0,0 @@ -/* Copyright (C) 2017 the mpv developers - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * Note: the client API is licensed under ISC (see above) to enable - * other wrappers outside of mpv. But keep in mind that the - * mpv core is by default still GPLv2+ - unless built with - * --enable-lgpl, which makes it LGPLv2+. - */ - -#ifndef MPV_CLIENT_API_H_ -#define MPV_CLIENT_API_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Mechanisms provided by this API - * ------------------------------- - * - * This API provides general control over mpv playback. It does not give you - * direct access to individual components of the player, only the whole thing. - * It's somewhat equivalent to MPlayer's slave mode. You can send commands, - * retrieve or set playback status or settings with properties, and receive - * events. - * - * The API can be used in two ways: - * 1) Internally in mpv, to provide additional features to the command line - * player. Lua scripting uses this. (Currently there is no plugin API to - * get a client API handle in external user code. It has to be a fixed - * part of the player at compilation time.) - * 2) Using mpv as a library with mpv_create(). This basically allows embedding - * mpv in other applications. - * - * Documentation - * ------------- - * - * The libmpv C API is documented directly in this header. Note that most - * actual interaction with this player is done through - * options/commands/properties, which can be accessed through this API. - * Essentially everything is done with them, including loading a file, - * retrieving playback progress, and so on. - * - * These are documented elsewhere: - * * http://mpv.io/manual/master/#options - * * http://mpv.io/manual/master/#list-of-input-commands - * * http://mpv.io/manual/master/#properties - * - * You can also look at the examples here: - * * https://github.com/mpv-player/mpv-examples/tree/master/libmpv - * - * Event loop - * ---------- - * - * In general, the API user should run an event loop in order to receive events. - * This event loop should call mpv_wait_event(), which will return once a new - * mpv client API is available. It is also possible to integrate client API - * usage in other event loops (e.g. GUI toolkits) with the - * mpv_set_wakeup_callback() function, and then polling for events by calling - * mpv_wait_event() with a 0 timeout. - * - * Note that the event loop is detached from the actual player. Not calling - * mpv_wait_event() will not stop playback. It will eventually congest the - * event queue of your API handle, though. - * - * Synchronous vs. asynchronous calls - * ---------------------------------- - * - * The API allows both synchronous and asynchronous calls. Synchronous calls - * have to wait until the playback core is ready, which currently can take - * an unbounded time (e.g. if network is slow or unresponsive). Asynchronous - * calls just queue operations as requests, and return the result of the - * operation as events. - * - * Asynchronous calls - * ------------------ - * - * The client API includes asynchronous functions. These allow you to send - * requests instantly, and get replies as events at a later point. The - * requests are made with functions carrying the _async suffix, and replies - * are returned by mpv_wait_event() (interleaved with the normal event stream). - * - * A 64 bit userdata value is used to allow the user to associate requests - * with replies. The value is passed as reply_userdata parameter to the request - * function. The reply to the request will have the reply - * mpv_event->reply_userdata field set to the same value as the - * reply_userdata parameter of the corresponding request. - * - * This userdata value is arbitrary and is never interpreted by the API. Note - * that the userdata value 0 is also allowed, but then the client must be - * careful not accidentally interpret the mpv_event->reply_userdata if an - * event is not a reply. (For non-replies, this field is set to 0.) - * - * Currently, asynchronous calls are always strictly ordered (even with - * synchronous calls) for each client, although that may change in the future. - * - * Multithreading - * -------------- - * - * The client API is generally fully thread-safe, unless otherwise noted. - * Currently, there is no real advantage in using more than 1 thread to access - * the client API, since everything is serialized through a single lock in the - * playback core. - * - * Basic environment requirements - * ------------------------------ - * - * This documents basic requirements on the C environment. This is especially - * important if mpv is used as library with mpv_create(). - * - * - The LC_NUMERIC locale category must be set to "C". If your program calls - * setlocale(), be sure not to use LC_ALL, or if you do, reset LC_NUMERIC - * to its sane default: setlocale(LC_NUMERIC, "C"). - * - If a X11 based VO is used, mpv will set the xlib error handler. This error - * handler is process-wide, and there's no proper way to share it with other - * xlib users within the same process. This might confuse GUI toolkits. - * - mpv uses some other libraries that are not library-safe, such as Fribidi - * (used through libass), ALSA, FFmpeg, and possibly more. - * - The FPU precision must be set at least to double precision. - * - On Windows, mpv will call timeBeginPeriod(1). - * - On memory exhaustion, mpv will kill the process. - * - In certain cases, mpv may start sub processes (such as with the ytdl - * wrapper script). - * - Using UNIX IPC (off by default) will override the SIGPIPE signal handler, - * and set it to SIG_IGN. - * - * Encoding of filenames - * --------------------- - * - * mpv uses UTF-8 everywhere. - * - * On some platforms (like Linux), filenames actually do not have to be UTF-8; - * for this reason libmpv supports non-UTF-8 strings. libmpv uses what the - * kernel uses and does not recode filenames. At least on Linux, passing a - * string to libmpv is like passing a string to the fopen() function. - * - * On Windows, filenames are always UTF-8, libmpv converts between UTF-8 and - * UTF-16 when using win32 API functions. libmpv never uses or accepts - * filenames in the local 8 bit encoding. It does not use fopen() either; - * it uses _wfopen(). - * - * On OS X, filenames and other strings taken/returned by libmpv can have - * inconsistent unicode normalization. This can sometimes lead to problems. - * You have to hope for the best. - * - * Also see the remarks for MPV_FORMAT_STRING. - * - * Embedding the video window - * -------------------------- - * - * Using the opengl-cb API (in opengl_cb.h) is recommended. This API requires - * you to create and maintain an OpenGL context, to which you can render - * video using a specific API call. This API does not include keyboard or mouse - * input directly. - * - * There is an older way to embed the native mpv window into your own. You have - * to get the raw window handle, and set it as "wid" option. This works on X11, - * win32, and OSX only. It's much easier to use than the opengl-cb API, but - * also has various problems. - * - * Also see client API examples and the mpv manpage. There is an extensive - * discussion here: - * https://github.com/mpv-player/mpv-examples/tree/master/libmpv#methods-of-embedding-the-video-window - * - * Compatibility - * ------------- - * - * mpv development doesn't stand still, and changes to mpv internals as well as - * to its interface can cause compatibility issues to client API users. - * - * The API is versioned (see MPV_CLIENT_API_VERSION), and changes to it are - * documented in DOCS/client-api-changes.rst. The C API itself will probably - * remain compatible for a long time, but the functionality exposed by it - * could change more rapidly. For example, it's possible that options are - * renamed, or change the set of allowed values. - * - * Defensive programming should be used to potentially deal with the fact that - * options, commands, and properties could disappear, change their value range, - * or change the underlying datatypes. It might be a good idea to prefer - * MPV_FORMAT_STRING over other types to decouple your code from potential - * mpv changes. - */ - -/** - * The version is incremented on each API change. The 16 lower bits form the - * minor version number, and the 16 higher bits the major version number. If - * the API becomes incompatible to previous versions, the major version - * number is incremented. This affects only C part, and not properties and - * options. - * - * Every API bump is described in DOCS/client-api-changes.rst - * - * You can use MPV_MAKE_VERSION() and compare the result with integer - * relational operators (<, >, <=, >=). - */ -#define MPV_MAKE_VERSION(major, minor) (((major) << 16) | (minor) | 0UL) -#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 101) - -/** - * The API user is allowed to "#define MPV_ENABLE_DEPRECATED 0" before - * including any libmpv headers. Then deprecated symbols will be excluded - * from the headers. (Of course, deprecated properties and commands and - * other functionality will still work.) - */ -#ifndef MPV_ENABLE_DEPRECATED -#define MPV_ENABLE_DEPRECATED 1 -#endif - -/** - * Return the MPV_CLIENT_API_VERSION the mpv source has been compiled with. - */ -unsigned long mpv_client_api_version(void); - -/** - * Client context used by the client API. Every client has its own private - * handle. - */ -typedef struct mpv_handle mpv_handle; - -/** - * List of error codes than can be returned by API functions. 0 and positive - * return values always mean success, negative values are always errors. - */ -typedef enum mpv_error { - /** - * No error happened (used to signal successful operation). - * Keep in mind that many API functions returning error codes can also - * return positive values, which also indicate success. API users can - * hardcode the fact that ">= 0" means success. - */ - MPV_ERROR_SUCCESS = 0, - /** - * The event ringbuffer is full. This means the client is choked, and can't - * receive any events. This can happen when too many asynchronous requests - * have been made, but not answered. Probably never happens in practice, - * unless the mpv core is frozen for some reason, and the client keeps - * making asynchronous requests. (Bugs in the client API implementation - * could also trigger this, e.g. if events become "lost".) - */ - MPV_ERROR_EVENT_QUEUE_FULL = -1, - /** - * Memory allocation failed. - */ - MPV_ERROR_NOMEM = -2, - /** - * The mpv core wasn't configured and initialized yet. See the notes in - * mpv_create(). - */ - MPV_ERROR_UNINITIALIZED = -3, - /** - * Generic catch-all error if a parameter is set to an invalid or - * unsupported value. This is used if there is no better error code. - */ - MPV_ERROR_INVALID_PARAMETER = -4, - /** - * Trying to set an option that doesn't exist. - */ - MPV_ERROR_OPTION_NOT_FOUND = -5, - /** - * Trying to set an option using an unsupported MPV_FORMAT. - */ - MPV_ERROR_OPTION_FORMAT = -6, - /** - * Setting the option failed. Typically this happens if the provided option - * value could not be parsed. - */ - MPV_ERROR_OPTION_ERROR = -7, - /** - * The accessed property doesn't exist. - */ - MPV_ERROR_PROPERTY_NOT_FOUND = -8, - /** - * Trying to set or get a property using an unsupported MPV_FORMAT. - */ - MPV_ERROR_PROPERTY_FORMAT = -9, - /** - * The property exists, but is not available. This usually happens when the - * associated subsystem is not active, e.g. querying audio parameters while - * audio is disabled. - */ - MPV_ERROR_PROPERTY_UNAVAILABLE = -10, - /** - * Error setting or getting a property. - */ - MPV_ERROR_PROPERTY_ERROR = -11, - /** - * General error when running a command with mpv_command and similar. - */ - MPV_ERROR_COMMAND = -12, - /** - * Generic error on loading (usually used with mpv_event_end_file.error). - */ - MPV_ERROR_LOADING_FAILED = -13, - /** - * Initializing the audio output failed. - */ - MPV_ERROR_AO_INIT_FAILED = -14, - /** - * Initializing the video output failed. - */ - MPV_ERROR_VO_INIT_FAILED = -15, - /** - * There was no audio or video data to play. This also happens if the - * file was recognized, but did not contain any audio or video streams, - * or no streams were selected. - */ - MPV_ERROR_NOTHING_TO_PLAY = -16, - /** - * When trying to load the file, the file format could not be determined, - * or the file was too broken to open it. - */ - MPV_ERROR_UNKNOWN_FORMAT = -17, - /** - * Generic error for signaling that certain system requirements are not - * fulfilled. - */ - MPV_ERROR_UNSUPPORTED = -18, - /** - * The API function which was called is a stub only. - */ - MPV_ERROR_NOT_IMPLEMENTED = -19, - /** - * Unspecified error. - */ - MPV_ERROR_GENERIC = -20 -} mpv_error; - -/** - * Return a string describing the error. For unknown errors, the string - * "unknown error" is returned. - * - * @param error error number, see enum mpv_error - * @return A static string describing the error. The string is completely - * static, i.e. doesn't need to be deallocated, and is valid forever. - */ -const char *mpv_error_string(int error); - -/** - * General function to deallocate memory returned by some of the API functions. - * Call this only if it's explicitly documented as allowed. Calling this on - * mpv memory not owned by the caller will lead to undefined behavior. - * - * @param data A valid pointer returned by the API, or NULL. - */ -void mpv_free(void *data); - -/** - * Return the name of this client handle. Every client has its own unique - * name, which is mostly used for user interface purposes. - * - * @return The client name. The string is read-only and is valid until the - * mpv_handle is destroyed. - */ -const char *mpv_client_name(mpv_handle *ctx); - -/** - * Create a new mpv instance and an associated client API handle to control - * the mpv instance. This instance is in a pre-initialized state, - * and needs to be initialized to be actually used with most other API - * functions. - * - * Some API functions will return MPV_ERROR_UNINITIALIZED in the uninitialized - * state. You can call mpv_set_property() (or mpv_set_property_string() and - * other variants, and before mpv 0.21.0 mpv_set_option() etc.) to set initial - * options. After this, call mpv_initialize() to start the player, and then use - * e.g. mpv_command() to start playback of a file. - * - * The point of separating handle creation and actual initialization is that - * you can configure things which can't be changed during runtime. - * - * Unlike the command line player, this will have initial settings suitable - * for embedding in applications. The following settings are different: - * - stdin/stdout/stderr and the terminal will never be accessed. This is - * equivalent to setting the --no-terminal option. - * (Technically, this also suppresses C signal handling.) - * - No config files will be loaded. This is roughly equivalent to using - * --config=no. Since libmpv 1.15, you can actually re-enable this option, - * which will make libmpv load config files during mpv_initialize(). If you - * do this, you are strongly encouraged to set the "config-dir" option too. - * (Otherwise it will load the mpv command line player's config.) - * For example: - * mpv_set_option_string(mpv, "config-dir", "/my/path"); // set config root - * mpv_set_option_string(mpv, "config", "yes"); // enable config loading - * (call mpv_initialize() _after_ this) - * - Idle mode is enabled, which means the playback core will enter idle mode - * if there are no more files to play on the internal playlist, instead of - * exiting. This is equivalent to the --idle option. - * - Disable parts of input handling. - * - Most of the different settings can be viewed with the command line player - * by running "mpv --show-profile=libmpv". - * - * All this assumes that API users want a mpv instance that is strictly - * isolated from the command line player's configuration, user settings, and - * so on. You can re-enable disabled features by setting the appropriate - * options. - * - * The mpv command line parser is not available through this API, but you can - * set individual options with mpv_set_property(). Files for playback must be - * loaded with mpv_command() or others. - * - * Note that you should avoid doing concurrent accesses on the uninitialized - * client handle. (Whether concurrent access is definitely allowed or not has - * yet to be decided.) - * - * @return a new mpv client API handle. Returns NULL on error. Currently, this - * can happen in the following situations: - * - out of memory - * - LC_NUMERIC is not set to "C" (see general remarks) - */ -mpv_handle *mpv_create(void); - -/** - * Initialize an uninitialized mpv instance. If the mpv instance is already - * running, an error is retuned. - * - * This function needs to be called to make full use of the client API if the - * client API handle was created with mpv_create(). - * - * Only the following options require to be set _before_ mpv_initialize(): - * - options which are only read at initialization time: - * - config - * - config-dir - * - input-conf - * - load-scripts - * - script - * - player-operation-mode - * - input-app-events (OSX) - * - all encoding mode options - * - * @return error code - */ -int mpv_initialize(mpv_handle *ctx); - -/** - * Disconnect and destroy the mpv_handle. ctx will be deallocated with this - * API call. - * - * If the last mpv_handle is detached, the core player is destroyed. In - * addition, if there are only weak mpv_handles (such as created by - * mpv_create_weak_client() or internal scripts), these mpv_handles will - * be sent MPV_EVENT_SHUTDOWN. This function may block until these clients - * have responded to the shutdown event, and the core is finally destroyed. - */ -void mpv_destroy(mpv_handle *ctx); - -#if MPV_ENABLE_DEPRECATED -/** - * @deprecated use mpv_destroy(), which has exactly the same semantics (the - * deprecation is a mere rename) - * - * Since mpv client API version 1.29: - * If the last mpv_handle is detached, the core player is destroyed. In - * addition, if there are only weak mpv_handles (such as created by - * mpv_create_weak_client() or internal scripts), these mpv_handles will - * be sent MPV_EVENT_SHUTDOWN. This function may block until these clients - * have responded to the shutdown event, and the core is finally destroyed. - * - * Before mpv client API version 1.29: - * This left the player running. If you want to be sure that the - * player is terminated, send a "quit" command, and wait until the - * MPV_EVENT_SHUTDOWN event is received, or use mpv_terminate_destroy(). - */ -void mpv_detach_destroy(mpv_handle *ctx); -#endif - -/** - * Similar to mpv_destroy(), but brings the player and all clients down - * as well, and waits until all of them are destroyed. This function blocks. The - * advantage over mpv_destroy() is that while mpv_destroy() merely - * detaches the client handle from the player, this function quits the player, - * waits until all other clients are destroyed (i.e. all mpv_handles are - * detached), and also waits for the final termination of the player. - * - * Since mpv_destroy() is called somewhere on the way, it's not safe to - * call other functions concurrently on the same context. - * - * Since mpv client API version 1.29: - * The first call on any mpv_handle will block until the core is destroyed. - * This means it will wait until other mpv_handle have been destroyed. If you - * want asynchronous destruction, just run the "quit" command, and then react - * to the MPV_EVENT_SHUTDOWN event. - * If another mpv_handle already called mpv_terminate_destroy(), this call will - * not actually block. It will destroy the mpv_handle, and exit immediately, - * while other mpv_handles might still be uninitializing. - * - * Before mpv client API version 1.29: - * If this is called on a mpv_handle that was not created with mpv_create(), - * this function will merely send a quit command and then call - * mpv_destroy(), without waiting for the actual shutdown. - */ -void mpv_terminate_destroy(mpv_handle *ctx); - -/** - * Create a new client handle connected to the same player core as ctx. This - * context has its own event queue, its own mpv_request_event() state, its own - * mpv_request_log_messages() state, its own set of observed properties, and - * its own state for asynchronous operations. Otherwise, everything is shared. - * - * This handle should be destroyed with mpv_destroy() if no longer - * needed. The core will live as long as there is at least 1 handle referencing - * it. Any handle can make the core quit, which will result in every handle - * receiving MPV_EVENT_SHUTDOWN. - * - * This function can not be called before the main handle was initialized with - * mpv_initialize(). The new handle is always initialized, unless ctx=NULL was - * passed. - * - * @param ctx Used to get the reference to the mpv core; handle-specific - * settings and parameters are not used. - * If NULL, this function behaves like mpv_create() (ignores name). - * @param name The client name. This will be returned by mpv_client_name(). If - * the name is already in use, or contains non-alphanumeric - * characters (other than '_'), the name is modified to fit. - * If NULL, an arbitrary name is automatically chosen. - * @return a new handle, or NULL on error - */ -mpv_handle *mpv_create_client(mpv_handle *ctx, const char *name); - -/** - * This is the same as mpv_create_client(), but the created mpv_handle is - * treated as a weak reference. If all mpv_handles referencing a core are - * weak references, the core is automatically destroyed. (This still goes - * through normal uninit of course. Effectively, if the last non-weak mpv_handle - * is destroyed, then the weak mpv_handles receive MPV_EVENT_SHUTDOWN and are - * asked to terminate as well.) - * - * Note if you want to use this like refcounting: you have to be aware that - * mpv_terminate_destroy() _and_ mpv_destroy() for the last non-weak - * mpv_handle will block until all weak mpv_handles are destroyed. - */ -mpv_handle *mpv_create_weak_client(mpv_handle *ctx, const char *name); - -/** - * Load a config file. This loads and parses the file, and sets every entry in - * the config file's default section as if mpv_set_option_string() is called. - * - * The filename should be an absolute path. If it isn't, the actual path used - * is unspecified. (Note: an absolute path starts with '/' on UNIX.) If the - * file wasn't found, MPV_ERROR_INVALID_PARAMETER is returned. - * - * If a fatal error happens when parsing a config file, MPV_ERROR_OPTION_ERROR - * is returned. Errors when setting options as well as other types or errors - * are ignored (even if options do not exist). You can still try to capture - * the resulting error messages with mpv_request_log_messages(). Note that it's - * possible that some options were successfully set even if any of these errors - * happen. - * - * @param filename absolute path to the config file on the local filesystem - * @return error code - */ -int mpv_load_config_file(mpv_handle *ctx, const char *filename); - -#if MPV_ENABLE_DEPRECATED - -/** - * This does nothing since mpv 0.23.0 (API version 1.24). Below is the - * description of the old behavior. - * - * Stop the playback thread. This means the core will stop doing anything, and - * only run and answer to client API requests. This is sometimes useful; for - * example, no new frame will be queued to the video output, so doing requests - * which have to wait on the video output can run instantly. - * - * Suspension is reentrant and recursive for convenience. Any thread can call - * the suspend function multiple times, and the playback thread will remain - * suspended until the last thread resumes it. Note that during suspension, all - * clients still have concurrent access to the core, which is serialized through - * a single mutex. - * - * Call mpv_resume() to resume the playback thread. You must call mpv_resume() - * for each mpv_suspend() call. Calling mpv_resume() more often than - * mpv_suspend() is not allowed. - * - * Calling this on an uninitialized player (see mpv_create()) will deadlock. - * - * @deprecated This function, as well as mpv_resume(), are deprecated, and - * will stop doing anything soon. Their semantics were never - * well-defined, and their usefulness is extremely limited. The - * calls will remain stubs in order to keep ABI compatibility. - */ -void mpv_suspend(mpv_handle *ctx); - -/** - * See mpv_suspend(). - */ -void mpv_resume(mpv_handle *ctx); - -#endif - -/** - * Return the internal time in microseconds. This has an arbitrary start offset, - * but will never wrap or go backwards. - * - * Note that this is always the real time, and doesn't necessarily have to do - * with playback time. For example, playback could go faster or slower due to - * playback speed, or due to playback being paused. Use the "time-pos" property - * instead to get the playback status. - * - * Unlike other libmpv APIs, this can be called at absolutely any time (even - * within wakeup callbacks), as long as the context is valid. - * - * Safe to be called from mpv render API threads. - */ -int64_t mpv_get_time_us(mpv_handle *ctx); - -/** - * Data format for options and properties. The API functions to get/set - * properties and options support multiple formats, and this enum describes - * them. - */ -typedef enum mpv_format { - /** - * Invalid. Sometimes used for empty values. - */ - MPV_FORMAT_NONE = 0, - /** - * The basic type is char*. It returns the raw property string, like - * using ${=property} in input.conf (see input.rst). - * - * NULL isn't an allowed value. - * - * Warning: although the encoding is usually UTF-8, this is not always the - * case. File tags often store strings in some legacy codepage, - * and even filenames don't necessarily have to be in UTF-8 (at - * least on Linux). If you pass the strings to code that requires - * valid UTF-8, you have to sanitize it in some way. - * On Windows, filenames are always UTF-8, and libmpv converts - * between UTF-8 and UTF-16 when using win32 API functions. See - * the "Encoding of filenames" section for details. - * - * Example for reading: - * - * char *result = NULL; - * if (mpv_get_property(ctx, "property", MPV_FORMAT_STRING, &result) < 0) - * goto error; - * printf("%s\n", result); - * mpv_free(result); - * - * Or just use mpv_get_property_string(). - * - * Example for writing: - * - * char *value = "the new value"; - * // yep, you pass the address to the variable - * // (needed for symmetry with other types and mpv_get_property) - * mpv_set_property(ctx, "property", MPV_FORMAT_STRING, &value); - * - * Or just use mpv_set_property_string(). - * - */ - MPV_FORMAT_STRING = 1, - /** - * The basic type is char*. It returns the OSD property string, like - * using ${property} in input.conf (see input.rst). In many cases, this - * is the same as the raw string, but in other cases it's formatted for - * display on OSD. It's intended to be human readable. Do not attempt to - * parse these strings. - * - * Only valid when doing read access. The rest works like MPV_FORMAT_STRING. - */ - MPV_FORMAT_OSD_STRING = 2, - /** - * The basic type is int. The only allowed values are 0 ("no") - * and 1 ("yes"). - * - * Example for reading: - * - * int result; - * if (mpv_get_property(ctx, "property", MPV_FORMAT_FLAG, &result) < 0) - * goto error; - * printf("%s\n", result ? "true" : "false"); - * - * Example for writing: - * - * int flag = 1; - * mpv_set_property(ctx, "property", MPV_FORMAT_FLAG, &flag); - */ - MPV_FORMAT_FLAG = 3, - /** - * The basic type is int64_t. - */ - MPV_FORMAT_INT64 = 4, - /** - * The basic type is double. - */ - MPV_FORMAT_DOUBLE = 5, - /** - * The type is mpv_node. - * - * For reading, you usually would pass a pointer to a stack-allocated - * mpv_node value to mpv, and when you're done you call - * mpv_free_node_contents(&node). - * You're expected not to write to the data - if you have to, copy it - * first (which you have to do manually). - * - * For writing, you construct your own mpv_node, and pass a pointer to the - * API. The API will never write to your data (and copy it if needed), so - * you're free to use any form of allocation or memory management you like. - * - * Warning: when reading, always check the mpv_node.format member. For - * example, properties might change their type in future versions - * of mpv, or sometimes even during runtime. - * - * Example for reading: - * - * mpv_node result; - * if (mpv_get_property(ctx, "property", MPV_FORMAT_NODE, &result) < 0) - * goto error; - * printf("format=%d\n", (int)result.format); - * mpv_free_node_contents(&result). - * - * Example for writing: - * - * mpv_node value; - * value.format = MPV_FORMAT_STRING; - * value.u.string = "hello"; - * mpv_set_property(ctx, "property", MPV_FORMAT_NODE, &value); - */ - MPV_FORMAT_NODE = 6, - /** - * Used with mpv_node only. Can usually not be used directly. - */ - MPV_FORMAT_NODE_ARRAY = 7, - /** - * See MPV_FORMAT_NODE_ARRAY. - */ - MPV_FORMAT_NODE_MAP = 8, - /** - * A raw, untyped byte array. Only used only with mpv_node, and only in - * some very special situations. (Currently, only for the screenshot-raw - * command.) - */ - MPV_FORMAT_BYTE_ARRAY = 9 -} mpv_format; - -/** - * Generic data storage. - * - * If mpv writes this struct (e.g. via mpv_get_property()), you must not change - * the data. In some cases (mpv_get_property()), you have to free it with - * mpv_free_node_contents(). If you fill this struct yourself, you're also - * responsible for freeing it, and you must not call mpv_free_node_contents(). - */ -typedef struct mpv_node { - union { - char *string; /** valid if format==MPV_FORMAT_STRING */ - int flag; /** valid if format==MPV_FORMAT_FLAG */ - int64_t int64; /** valid if format==MPV_FORMAT_INT64 */ - double double_; /** valid if format==MPV_FORMAT_DOUBLE */ - /** - * valid if format==MPV_FORMAT_NODE_ARRAY - * or if format==MPV_FORMAT_NODE_MAP - */ - struct mpv_node_list *list; - /** - * valid if format==MPV_FORMAT_BYTE_ARRAY - */ - struct mpv_byte_array *ba; - } u; - /** - * Type of the data stored in this struct. This value rules what members in - * the given union can be accessed. The following formats are currently - * defined to be allowed in mpv_node: - * - * MPV_FORMAT_STRING (u.string) - * MPV_FORMAT_FLAG (u.flag) - * MPV_FORMAT_INT64 (u.int64) - * MPV_FORMAT_DOUBLE (u.double_) - * MPV_FORMAT_NODE_ARRAY (u.list) - * MPV_FORMAT_NODE_MAP (u.list) - * MPV_FORMAT_BYTE_ARRAY (u.ba) - * MPV_FORMAT_NONE (no member) - * - * If you encounter a value you don't know, you must not make any - * assumptions about the contents of union u. - */ - mpv_format format; -} mpv_node; - -/** - * (see mpv_node) - */ -typedef struct mpv_node_list { - /** - * Number of entries. Negative values are not allowed. - */ - int num; - /** - * MPV_FORMAT_NODE_ARRAY: - * values[N] refers to value of the Nth item - * - * MPV_FORMAT_NODE_MAP: - * values[N] refers to value of the Nth key/value pair - * - * If num > 0, values[0] to values[num-1] (inclusive) are valid. - * Otherwise, this can be NULL. - */ - mpv_node *values; - /** - * MPV_FORMAT_NODE_ARRAY: - * unused (typically NULL), access is not allowed - * - * MPV_FORMAT_NODE_MAP: - * keys[N] refers to key of the Nth key/value pair. If num > 0, keys[0] to - * keys[num-1] (inclusive) are valid. Otherwise, this can be NULL. - * The keys are in random order. The only guarantee is that keys[N] belongs - * to the value values[N]. NULL keys are not allowed. - */ - char **keys; -} mpv_node_list; - -/** - * (see mpv_node) - */ -typedef struct mpv_byte_array { - /** - * Pointer to the data. In what format the data is stored is up to whatever - * uses MPV_FORMAT_BYTE_ARRAY. - */ - void *data; - /** - * Size of the data pointed to by ptr. - */ - size_t size; -} mpv_byte_array; - -/** - * Frees any data referenced by the node. It doesn't free the node itself. - * Call this only if the mpv client API set the node. If you constructed the - * node yourself (manually), you have to free it yourself. - * - * If node->format is MPV_FORMAT_NONE, this call does nothing. Likewise, if - * the client API sets a node with this format, this function doesn't need to - * be called. (This is just a clarification that there's no danger of anything - * strange happening in these cases.) - */ -void mpv_free_node_contents(mpv_node *node); - -/** - * Set an option. Note that you can't normally set options during runtime. It - * works in uninitialized state (see mpv_create()), and in some cases in at - * runtime. - * - * Using a format other than MPV_FORMAT_NODE is equivalent to constructing a - * mpv_node with the given format and data, and passing the mpv_node to this - * function. - * - * Note: this is semi-deprecated. For most purposes, this is not needed anymore. - * Starting with mpv version 0.21.0 (version 1.23) most options can be set - * with mpv_set_property() (and related functions), and even before - * mpv_initialize(). In some obscure corner cases, using this function - * to set options might still be required (see below, and also section - * "Inconsistencies between options and properties" on the manpage). Once - * these are resolved, the option setting functions might be fully - * deprecated. - * - * The following options still need to be set either _before_ - * mpv_initialize() with mpv_set_property() (or related functions), or - * with mpv_set_option() (or related functions) at any time: - * - options shadowed by deprecated properties: - * - demuxer (property deprecated in 0.21.0) - * - idle (property deprecated in 0.21.0) - * - fps (property deprecated in 0.21.0) - * - cache (property deprecated in 0.21.0) - * - length (property deprecated in 0.10.0) - * - audio-samplerate (property deprecated in 0.10.0) - * - audio-channels (property deprecated in 0.10.0) - * - audio-format (property deprecated in 0.10.0) - * - deprecated options shadowed by properties: - * - chapter (option deprecated in 0.21.0) - * - playlist-pos (option deprecated in 0.21.0) - * The deprecated properties were removed in mpv 0.23.0. - * - * @param name Option name. This is the same as on the mpv command line, but - * without the leading "--". - * @param format see enum mpv_format. - * @param[in] data Option value (according to the format). - * @return error code - */ -int mpv_set_option(mpv_handle *ctx, const char *name, mpv_format format, - void *data); - -/** - * Convenience function to set an option to a string value. This is like - * calling mpv_set_option() with MPV_FORMAT_STRING. - * - * @return error code - */ -int mpv_set_option_string(mpv_handle *ctx, const char *name, const char *data); - -/** - * Send a command to the player. Commands are the same as those used in - * input.conf, except that this function takes parameters in a pre-split - * form. - * - * The commands and their parameters are documented in input.rst. - * - * Does not use OSD and string expansion by default (unlike mpv_command_string() - * and input.conf). - * - * @param[in] args NULL-terminated list of strings. Usually, the first item - * is the command, and the following items are arguments. - * @return error code - */ -int mpv_command(mpv_handle *ctx, const char **args); - -/** - * Same as mpv_command(), but allows passing structured data in any format. - * In particular, calling mpv_command() is exactly like calling - * mpv_command_node() with the format set to MPV_FORMAT_NODE_ARRAY, and - * every arg passed in order as MPV_FORMAT_STRING. - * - * Does not use OSD and string expansion by default. - * - * @param[in] args mpv_node with format set to MPV_FORMAT_NODE_ARRAY; each entry - * is an argument using an arbitrary format (the format must be - * compatible to the used command). Usually, the first item is - * the command name (as MPV_FORMAT_STRING). - * @param[out] result Optional, pass NULL if unused. If not NULL, and if the - * function succeeds, this is set to command-specific return - * data. You must call mpv_free_node_contents() to free it - * (again, only if the command actually succeeds). - * Not many commands actually use this at all. - * @return error code (the result parameter is not set on error) - */ -int mpv_command_node(mpv_handle *ctx, mpv_node *args, mpv_node *result); - -/** - * Same as mpv_command, but use input.conf parsing for splitting arguments. - * This is slightly simpler, but also more error prone, since arguments may - * need quoting/escaping. - * - * This also has OSD and string expansion enabled by default. - */ -int mpv_command_string(mpv_handle *ctx, const char *args); - -/** - * Same as mpv_command, but run the command asynchronously. - * - * Commands are executed asynchronously. You will receive a - * MPV_EVENT_COMMAND_REPLY event. (This event will also have an - * error code set if running the command failed.) - * - * This has nothing to do with the "async" command prefix, although they might - * be unified in the future. For now, calling this API means that the command - * will be synchronously executed on the core, without blocking the API user. - * - * * Safe to be called from mpv render API threads. - * - * @param reply_userdata the value mpv_event.reply_userdata of the reply will - * be set to (see section about asynchronous calls) - * @param args NULL-terminated list of strings (see mpv_command()) - * @return error code (if parsing or queuing the command fails) - */ -int mpv_command_async(mpv_handle *ctx, uint64_t reply_userdata, - const char **args); - -/** - * Same as mpv_command_node(), but run it asynchronously. Basically, this - * function is to mpv_command_node() what mpv_command_async() is to - * mpv_command(). - * - * See mpv_command_async() for details. Retrieving the result is not - * supported yet. - * - * Safe to be called from mpv render API threads. - * - * @param reply_userdata the value mpv_event.reply_userdata of the reply will - * be set to (see section about asynchronous calls) - * @param args as in mpv_command_node() - * @return error code (if parsing or queuing the command fails) - */ -int mpv_command_node_async(mpv_handle *ctx, uint64_t reply_userdata, - mpv_node *args); - -/** - * Set a property to a given value. Properties are essentially variables which - * can be queried or set at runtime. For example, writing to the pause property - * will actually pause or unpause playback. - * - * If the format doesn't match with the internal format of the property, access - * usually will fail with MPV_ERROR_PROPERTY_FORMAT. In some cases, the data - * is automatically converted and access succeeds. For example, MPV_FORMAT_INT64 - * is always converted to MPV_FORMAT_DOUBLE, and access using MPV_FORMAT_STRING - * usually invokes a string parser. The same happens when calling this function - * with MPV_FORMAT_NODE: the underlying format may be converted to another - * type if possible. - * - * Using a format other than MPV_FORMAT_NODE is equivalent to constructing a - * mpv_node with the given format and data, and passing the mpv_node to this - * function. (Before API version 1.21, this was different.) - * - * Note: starting with mpv 0.21.0 (client API version 1.23), this can be used to - * set options in general. It even can be used before mpv_initialize() - * has been called. If called before mpv_initialize(), setting properties - * not backed by options will result in MPV_ERROR_PROPERTY_UNAVAILABLE. - * In some cases, properties and options still conflict. In these cases, - * mpv_set_property() accesses the options before mpv_initialize(), and - * the properties after mpv_initialize(). These conflicts will be removed - * in mpv 0.23.0. See mpv_set_option() for further remarks. - * - * @param name The property name. See input.rst for a list of properties. - * @param format see enum mpv_format. - * @param[in] data Option value. - * @return error code - */ -int mpv_set_property(mpv_handle *ctx, const char *name, mpv_format format, - void *data); - -/** - * Convenience function to set a property to a string value. - * - * This is like calling mpv_set_property() with MPV_FORMAT_STRING. - */ -int mpv_set_property_string(mpv_handle *ctx, const char *name, const char *data); - -/** - * Set a property asynchronously. You will receive the result of the operation - * as MPV_EVENT_SET_PROPERTY_REPLY event. The mpv_event.error field will contain - * the result status of the operation. Otherwise, this function is similar to - * mpv_set_property(). - * - * Safe to be called from mpv render API threads. - * - * @param reply_userdata see section about asynchronous calls - * @param name The property name. - * @param format see enum mpv_format. - * @param[in] data Option value. The value will be copied by the function. It - * will never be modified by the client API. - * @return error code if sending the request failed - */ -int mpv_set_property_async(mpv_handle *ctx, uint64_t reply_userdata, - const char *name, mpv_format format, void *data); - -/** - * Read the value of the given property. - * - * If the format doesn't match with the internal format of the property, access - * usually will fail with MPV_ERROR_PROPERTY_FORMAT. In some cases, the data - * is automatically converted and access succeeds. For example, MPV_FORMAT_INT64 - * is always converted to MPV_FORMAT_DOUBLE, and access using MPV_FORMAT_STRING - * usually invokes a string formatter. - * - * @param name The property name. - * @param format see enum mpv_format. - * @param[out] data Pointer to the variable holding the option value. On - * success, the variable will be set to a copy of the option - * value. For formats that require dynamic memory allocation, - * you can free the value with mpv_free() (strings) or - * mpv_free_node_contents() (MPV_FORMAT_NODE). - * @return error code - */ -int mpv_get_property(mpv_handle *ctx, const char *name, mpv_format format, - void *data); - -/** - * Return the value of the property with the given name as string. This is - * equivalent to mpv_get_property() with MPV_FORMAT_STRING. - * - * See MPV_FORMAT_STRING for character encoding issues. - * - * On error, NULL is returned. Use mpv_get_property() if you want fine-grained - * error reporting. - * - * @param name The property name. - * @return Property value, or NULL if the property can't be retrieved. Free - * the string with mpv_free(). - */ -char *mpv_get_property_string(mpv_handle *ctx, const char *name); - -/** - * Return the property as "OSD" formatted string. This is the same as - * mpv_get_property_string, but using MPV_FORMAT_OSD_STRING. - * - * @return Property value, or NULL if the property can't be retrieved. Free - * the string with mpv_free(). - */ -char *mpv_get_property_osd_string(mpv_handle *ctx, const char *name); - -/** - * Get a property asynchronously. You will receive the result of the operation - * as well as the property data with the MPV_EVENT_GET_PROPERTY_REPLY event. - * You should check the mpv_event.error field on the reply event. - * - * Safe to be called from mpv render API threads. - * - * @param reply_userdata see section about asynchronous calls - * @param name The property name. - * @param format see enum mpv_format. - * @return error code if sending the request failed - */ -int mpv_get_property_async(mpv_handle *ctx, uint64_t reply_userdata, - const char *name, mpv_format format); - -/** - * Get a notification whenever the given property changes. You will receive - * updates as MPV_EVENT_PROPERTY_CHANGE. Note that this is not very precise: - * for some properties, it may not send updates even if the property changed. - * This depends on the property, and it's a valid feature request to ask for - * better update handling of a specific property. (For some properties, like - * ``clock``, which shows the wall clock, this mechanism doesn't make too - * much sense anyway.) - * - * Property changes are coalesced: the change events are returned only once the - * event queue becomes empty (e.g. mpv_wait_event() would block or return - * MPV_EVENT_NONE), and then only one event per changed property is returned. - * - * Normally, change events are sent only if the property value changes according - * to the requested format. mpv_event_property will contain the property value - * as data member. - * - * Warning: if a property is unavailable or retrieving it caused an error, - * MPV_FORMAT_NONE will be set in mpv_event_property, even if the - * format parameter was set to a different value. In this case, the - * mpv_event_property.data field is invalid. - * - * If the property is observed with the format parameter set to MPV_FORMAT_NONE, - * you get low-level notifications whether the property _may_ have changed, and - * the data member in mpv_event_property will be unset. With this mode, you - * will have to determine yourself whether the property really changd. On the - * other hand, this mechanism can be faster and uses less resources. - * - * Observing a property that doesn't exist is allowed. (Although it may still - * cause some sporadic change events.) - * - * Keep in mind that you will get change notifications even if you change a - * property yourself. Try to avoid endless feedback loops, which could happen - * if you react to the change notifications triggered by your own change. - * - * Only the mpv_handle on which this was called will receive the property - * change events, or can unobserve them. - * - * Safe to be called from mpv render API threads. - * - * @param reply_userdata This will be used for the mpv_event.reply_userdata - * field for the received MPV_EVENT_PROPERTY_CHANGE - * events. (Also see section about asynchronous calls, - * although this function is somewhat different from - * actual asynchronous calls.) - * If you have no use for this, pass 0. - * Also see mpv_unobserve_property(). - * @param name The property name. - * @param format see enum mpv_format. Can be MPV_FORMAT_NONE to omit values - * from the change events. - * @return error code (usually fails only on OOM or unsupported format) - */ -int mpv_observe_property(mpv_handle *mpv, uint64_t reply_userdata, - const char *name, mpv_format format); - -/** - * Undo mpv_observe_property(). This will remove all observed properties for - * which the given number was passed as reply_userdata to mpv_observe_property. - * - * Safe to be called from mpv render API threads. - * - * @param registered_reply_userdata ID that was passed to mpv_observe_property - * @return negative value is an error code, >=0 is number of removed properties - * on success (includes the case when 0 were removed) - */ -int mpv_unobserve_property(mpv_handle *mpv, uint64_t registered_reply_userdata); - -typedef enum mpv_event_id { - /** - * Nothing happened. Happens on timeouts or sporadic wakeups. - */ - MPV_EVENT_NONE = 0, - /** - * Happens when the player quits. The player enters a state where it tries - * to disconnect all clients. Most requests to the player will fail, and - * the client should react to this and quit with mpv_destroy() as soon as - * possible. - */ - MPV_EVENT_SHUTDOWN = 1, - /** - * See mpv_request_log_messages(). - */ - MPV_EVENT_LOG_MESSAGE = 2, - /** - * Reply to a mpv_get_property_async() request. - * See also mpv_event and mpv_event_property. - */ - MPV_EVENT_GET_PROPERTY_REPLY = 3, - /** - * Reply to a mpv_set_property_async() request. - * (Unlike MPV_EVENT_GET_PROPERTY, mpv_event_property is not used.) - */ - MPV_EVENT_SET_PROPERTY_REPLY = 4, - /** - * Reply to a mpv_command_async() request. - */ - MPV_EVENT_COMMAND_REPLY = 5, - /** - * Notification before playback start of a file (before the file is loaded). - */ - MPV_EVENT_START_FILE = 6, - /** - * Notification after playback end (after the file was unloaded). - * See also mpv_event and mpv_event_end_file. - */ - MPV_EVENT_END_FILE = 7, - /** - * Notification when the file has been loaded (headers were read etc.), and - * decoding starts. - */ - MPV_EVENT_FILE_LOADED = 8, -#if MPV_ENABLE_DEPRECATED - /** - * The list of video/audio/subtitle tracks was changed. (E.g. a new track - * was found. This doesn't necessarily indicate a track switch; for this, - * MPV_EVENT_TRACK_SWITCHED is used.) - * - * @deprecated This is equivalent to using mpv_observe_property() on the - * "track-list" property. The event is redundant, and might - * be removed in the far future. - */ - MPV_EVENT_TRACKS_CHANGED = 9, - /** - * A video/audio/subtitle track was switched on or off. - * - * @deprecated This is equivalent to using mpv_observe_property() on the - * "vid", "aid", and "sid" properties. The event is redundant, - * and might be removed in the far future. - */ - MPV_EVENT_TRACK_SWITCHED = 10, -#endif - /** - * Idle mode was entered. In this mode, no file is played, and the playback - * core waits for new commands. (The command line player normally quits - * instead of entering idle mode, unless --idle was specified. If mpv - * was started with mpv_create(), idle mode is enabled by default.) - */ - MPV_EVENT_IDLE = 11, -#if MPV_ENABLE_DEPRECATED - /** - * Playback was paused. This indicates the user pause state. - * - * The user pause state is the state the user requested (changed with the - * "pause" property). There is an internal pause state too, which is entered - * if e.g. the network is too slow (the "core-idle" property generally - * indicates whether the core is playing or waiting). - * - * This event is sent whenever any pause states change, not only the user - * state. You might get multiple events in a row while these states change - * independently. But the event ID sent always indicates the user pause - * state. - * - * If you don't want to deal with this, use mpv_observe_property() on the - * "pause" property and ignore MPV_EVENT_PAUSE/UNPAUSE. Likewise, the - * "core-idle" property tells you whether video is actually playing or not. - * - * @deprecated The event is redundant with mpv_observe_property() as - * mentioned above, and might be removed in the far future. - */ - MPV_EVENT_PAUSE = 12, - /** - * Playback was unpaused. See MPV_EVENT_PAUSE for not so obvious details. - * - * @deprecated The event is redundant with mpv_observe_property() as - * explained in the MPV_EVENT_PAUSE comments, and might be - * removed in the far future. - */ - MPV_EVENT_UNPAUSE = 13, -#endif - /** - * Sent every time after a video frame is displayed. Note that currently, - * this will be sent in lower frequency if there is no video, or playback - * is paused - but that will be removed in the future, and it will be - * restricted to video frames only. - */ - MPV_EVENT_TICK = 14, -#if MPV_ENABLE_DEPRECATED - /** - * @deprecated This was used internally with the internal "script_dispatch" - * command to dispatch keyboard and mouse input for the OSC. - * It was never useful in general and has been completely - * replaced with "script-binding". - * This event never happens anymore, and is included in this - * header only for compatibility. - */ - MPV_EVENT_SCRIPT_INPUT_DISPATCH = 15, -#endif - /** - * Triggered by the script-message input command. The command uses the - * first argument of the command as client name (see mpv_client_name()) to - * dispatch the message, and passes along all arguments starting from the - * second argument as strings. - * See also mpv_event and mpv_event_client_message. - */ - MPV_EVENT_CLIENT_MESSAGE = 16, - /** - * Happens after video changed in some way. This can happen on resolution - * changes, pixel format changes, or video filter changes. The event is - * sent after the video filters and the VO are reconfigured. Applications - * embedding a mpv window should listen to this event in order to resize - * the window if needed. - * Note that this event can happen sporadically, and you should check - * yourself whether the video parameters really changed before doing - * something expensive. - */ - MPV_EVENT_VIDEO_RECONFIG = 17, - /** - * Similar to MPV_EVENT_VIDEO_RECONFIG. This is relatively uninteresting, - * because there is no such thing as audio output embedding. - */ - MPV_EVENT_AUDIO_RECONFIG = 18, -#if MPV_ENABLE_DEPRECATED - /** - * Happens when metadata (like file tags) is possibly updated. (It's left - * unspecified whether this happens on file start or only when it changes - * within a file.) - * - * @deprecated This is equivalent to using mpv_observe_property() on the - * "metadata" property. The event is redundant, and might - * be removed in the far future. - */ - MPV_EVENT_METADATA_UPDATE = 19, -#endif - /** - * Happens when a seek was initiated. Playback stops. Usually it will - * resume with MPV_EVENT_PLAYBACK_RESTART as soon as the seek is finished. - */ - MPV_EVENT_SEEK = 20, - /** - * There was a discontinuity of some sort (like a seek), and playback - * was reinitialized. Usually happens after seeking, or ordered chapter - * segment switches. The main purpose is allowing the client to detect - * when a seek request is finished. - */ - MPV_EVENT_PLAYBACK_RESTART = 21, - /** - * Event sent due to mpv_observe_property(). - * See also mpv_event and mpv_event_property. - */ - MPV_EVENT_PROPERTY_CHANGE = 22, -#if MPV_ENABLE_DEPRECATED - /** - * Happens when the current chapter changes. - * - * @deprecated This is equivalent to using mpv_observe_property() on the - * "chapter" property. The event is redundant, and might - * be removed in the far future. - */ - MPV_EVENT_CHAPTER_CHANGE = 23, -#endif - /** - * Happens if the internal per-mpv_handle ringbuffer overflows, and at - * least 1 event had to be dropped. This can happen if the client doesn't - * read the event queue quickly enough with mpv_wait_event(), or if the - * client makes a very large number of asynchronous calls at once. - * - * Event delivery will continue normally once this event was returned - * (this forces the client to empty the queue completely). - */ - MPV_EVENT_QUEUE_OVERFLOW = 24, - /** - * Triggered if a hook handler was registered with mpv_hook_add(), and the - * hook is invoked. If you receive this, you must handle it, and continue - * the hook with mpv_hook_continue(). - * See also mpv_event and mpv_event_hook. - */ - MPV_EVENT_HOOK = 25, - // Internal note: adjust INTERNAL_EVENT_BASE when adding new events. -} mpv_event_id; - -/** - * Return a string describing the event. For unknown events, NULL is returned. - * - * Note that all events actually returned by the API will also yield a non-NULL - * string with this function. - * - * @param event event ID, see see enum mpv_event_id - * @return A static string giving a short symbolic name of the event. It - * consists of lower-case alphanumeric characters and can include "-" - * characters. This string is suitable for use in e.g. scripting - * interfaces. - * The string is completely static, i.e. doesn't need to be deallocated, - * and is valid forever. - */ -const char *mpv_event_name(mpv_event_id event); - -typedef struct mpv_event_property { - /** - * Name of the property. - */ - const char *name; - /** - * Format of the data field in the same struct. See enum mpv_format. - * This is always the same format as the requested format, except when - * the property could not be retrieved (unavailable, or an error happened), - * in which case the format is MPV_FORMAT_NONE. - */ - mpv_format format; - /** - * Received property value. Depends on the format. This is like the - * pointer argument passed to mpv_get_property(). - * - * For example, for MPV_FORMAT_STRING you get the string with: - * - * char *value = *(char **)(event_property->data); - * - * Note that this is set to NULL if retrieving the property failed (the - * format will be MPV_FORMAT_NONE). - * See mpv_event.error for the status. - */ - void *data; -} mpv_event_property; - -/** - * Numeric log levels. The lower the number, the more important the message is. - * MPV_LOG_LEVEL_NONE is never used when receiving messages. The string in - * the comment after the value is the name of the log level as used for the - * mpv_request_log_messages() function. - * Unused numeric values are unused, but reserved for future use. - */ -typedef enum mpv_log_level { - MPV_LOG_LEVEL_NONE = 0, /// "no" - disable absolutely all messages - MPV_LOG_LEVEL_FATAL = 10, /// "fatal" - critical/aborting errors - MPV_LOG_LEVEL_ERROR = 20, /// "error" - simple errors - MPV_LOG_LEVEL_WARN = 30, /// "warn" - possible problems - MPV_LOG_LEVEL_INFO = 40, /// "info" - informational message - MPV_LOG_LEVEL_V = 50, /// "v" - noisy informational message - MPV_LOG_LEVEL_DEBUG = 60, /// "debug" - very noisy technical information - MPV_LOG_LEVEL_TRACE = 70, /// "trace" - extremely noisy -} mpv_log_level; - -typedef struct mpv_event_log_message { - /** - * The module prefix, identifies the sender of the message. As a special - * case, if the message buffer overflows, this will be set to the string - * "overflow" (which doesn't appear as prefix otherwise), and the text - * field will contain an informative message. - */ - const char *prefix; - /** - * The log level as string. See mpv_request_log_messages() for possible - * values. The level "no" is never used here. - */ - const char *level; - /** - * The log message. It consists of 1 line of text, and is terminated with - * a newline character. (Before API version 1.6, it could contain multiple - * or partial lines.) - */ - const char *text; - /** - * The same contents as the level field, but as a numeric ID. - * Since API version 1.6. - */ - mpv_log_level log_level; -} mpv_event_log_message; - -/// Since API version 1.9. -typedef enum mpv_end_file_reason { - /** - * The end of file was reached. Sometimes this may also happen on - * incomplete or corrupted files, or if the network connection was - * interrupted when playing a remote file. It also happens if the - * playback range was restricted with --end or --frames or similar. - */ - MPV_END_FILE_REASON_EOF = 0, - /** - * Playback was stopped by an external action (e.g. playlist controls). - */ - MPV_END_FILE_REASON_STOP = 2, - /** - * Playback was stopped by the quit command or player shutdown. - */ - MPV_END_FILE_REASON_QUIT = 3, - /** - * Some kind of error happened that lead to playback abort. Does not - * necessarily happen on incomplete or broken files (in these cases, both - * MPV_END_FILE_REASON_ERROR or MPV_END_FILE_REASON_EOF are possible). - * - * mpv_event_end_file.error will be set. - */ - MPV_END_FILE_REASON_ERROR = 4, - /** - * The file was a playlist or similar. When the playlist is read, its - * entries will be appended to the playlist after the entry of the current - * file, the entry of the current file is removed, and a MPV_EVENT_END_FILE - * event is sent with reason set to MPV_END_FILE_REASON_REDIRECT. Then - * playback continues with the playlist contents. - * Since API version 1.18. - */ - MPV_END_FILE_REASON_REDIRECT = 5, -} mpv_end_file_reason; - -typedef struct mpv_event_end_file { - /** - * Corresponds to the values in enum mpv_end_file_reason (the "int" type - * will be replaced with mpv_end_file_reason on the next ABI bump). - * - * Unknown values should be treated as unknown. - */ - int reason; - /** - * If reason==MPV_END_FILE_REASON_ERROR, this contains a mpv error code - * (one of MPV_ERROR_...) giving an approximate reason why playback - * failed. In other cases, this field is 0 (no error). - * Since API version 1.9. - */ - int error; -} mpv_event_end_file; - -#if MPV_ENABLE_DEPRECATED -/** @deprecated see MPV_EVENT_SCRIPT_INPUT_DISPATCH for remarks - */ -typedef struct mpv_event_script_input_dispatch { - int arg0; - const char *type; -} mpv_event_script_input_dispatch; -#endif - -typedef struct mpv_event_client_message { - /** - * Arbitrary arguments chosen by the sender of the message. If num_args > 0, - * you can access args[0] through args[num_args - 1] (inclusive). What - * these arguments mean is up to the sender and receiver. - * None of the valid items are NULL. - */ - int num_args; - const char **args; -} mpv_event_client_message; - -typedef struct mpv_event_hook { - /** - * The hook name as passed to mpv_hook_add(). - */ - const char *name; - /** - * Internal ID that must be passed to mpv_hook_continue(). - */ - uint64_t id; -} mpv_event_hook; - -typedef struct mpv_event { - /** - * One of mpv_event. Keep in mind that later ABI compatible releases might - * add new event types. These should be ignored by the API user. - */ - mpv_event_id event_id; - /** - * This is mainly used for events that are replies to (asynchronous) - * requests. It contains a status code, which is >= 0 on success, or < 0 - * on error (a mpv_error value). Usually, this will be set if an - * asynchronous request fails. - * Used for: - * MPV_EVENT_GET_PROPERTY_REPLY - * MPV_EVENT_SET_PROPERTY_REPLY - * MPV_EVENT_COMMAND_REPLY - */ - int error; - /** - * If the event is in reply to a request (made with this API and this - * API handle), this is set to the reply_userdata parameter of the request - * call. Otherwise, this field is 0. - * Used for: - * MPV_EVENT_GET_PROPERTY_REPLY - * MPV_EVENT_SET_PROPERTY_REPLY - * MPV_EVENT_COMMAND_REPLY - * MPV_EVENT_PROPERTY_CHANGE - */ - uint64_t reply_userdata; - /** - * The meaning and contents of the data member depend on the event_id: - * MPV_EVENT_GET_PROPERTY_REPLY: mpv_event_property* - * MPV_EVENT_PROPERTY_CHANGE: mpv_event_property* - * MPV_EVENT_LOG_MESSAGE: mpv_event_log_message* - * MPV_EVENT_CLIENT_MESSAGE: mpv_event_client_message* - * MPV_EVENT_END_FILE: mpv_event_end_file* - * other: NULL - * - * Note: future enhancements might add new event structs for existing or new - * event types. - */ - void *data; -} mpv_event; - -/** - * Enable or disable the given event. - * - * Some events are enabled by default. Some events can't be disabled. - * - * (Informational note: currently, all events are enabled by default, except - * MPV_EVENT_TICK.) - * - * Safe to be called from mpv render API threads. - * - * @param event See enum mpv_event_id. - * @param enable 1 to enable receiving this event, 0 to disable it. - * @return error code - */ -int mpv_request_event(mpv_handle *ctx, mpv_event_id event, int enable); - -/** - * Enable or disable receiving of log messages. These are the messages the - * command line player prints to the terminal. This call sets the minimum - * required log level for a message to be received with MPV_EVENT_LOG_MESSAGE. - * - * @param min_level Minimal log level as string. Valid log levels: - * no fatal error warn info v debug trace - * The value "no" disables all messages. This is the default. - * An exception is the value "terminal-default", which uses the - * log level as set by the "--msg-level" option. This works - * even if the terminal is disabled. (Since API version 1.19.) - * Also see mpv_log_level. - * @return error code - */ -int mpv_request_log_messages(mpv_handle *ctx, const char *min_level); - -/** - * Wait for the next event, or until the timeout expires, or if another thread - * makes a call to mpv_wakeup(). Passing 0 as timeout will never wait, and - * is suitable for polling. - * - * The internal event queue has a limited size (per client handle). If you - * don't empty the event queue quickly enough with mpv_wait_event(), it will - * overflow and silently discard further events. If this happens, making - * asynchronous requests will fail as well (with MPV_ERROR_EVENT_QUEUE_FULL). - * - * Only one thread is allowed to call this on the same mpv_handle at a time. - * The API won't complain if more than one thread calls this, but it will cause - * race conditions in the client when accessing the shared mpv_event struct. - * Note that most other API functions are not restricted by this, and no API - * function internally calls mpv_wait_event(). Additionally, concurrent calls - * to different mpv_handles are always safe. - * - * As long as the timeout is 0, this is safe to be called from mpv render API - * threads. - * - * @param timeout Timeout in seconds, after which the function returns even if - * no event was received. A MPV_EVENT_NONE is returned on - * timeout. A value of 0 will disable waiting. Negative values - * will wait with an infinite timeout. - * @return A struct containing the event ID and other data. The pointer (and - * fields in the struct) stay valid until the next mpv_wait_event() - * call, or until the mpv_handle is destroyed. You must not write to - * the struct, and all memory referenced by it will be automatically - * released by the API on the next mpv_wait_event() call, or when the - * context is destroyed. The return value is never NULL. - */ -mpv_event *mpv_wait_event(mpv_handle *ctx, double timeout); - -/** - * Interrupt the current mpv_wait_event() call. This will wake up the thread - * currently waiting in mpv_wait_event(). If no thread is waiting, the next - * mpv_wait_event() call will return immediately (this is to avoid lost - * wakeups). - * - * mpv_wait_event() will receive a MPV_EVENT_NONE if it's woken up due to - * this call. But note that this dummy event might be skipped if there are - * already other events queued. All what counts is that the waiting thread - * is woken up at all. - * - * Safe to be called from mpv render API threads. - */ -void mpv_wakeup(mpv_handle *ctx); - -/** - * Set a custom function that should be called when there are new events. Use - * this if blocking in mpv_wait_event() to wait for new events is not feasible. - * - * Keep in mind that the callback will be called from foreign threads. You - * must not make any assumptions of the environment, and you must return as - * soon as possible (i.e. no long blocking waits). Exiting the callback through - * any other means than a normal return is forbidden (no throwing exceptions, - * no longjmp() calls). You must not change any local thread state (such as - * the C floating point environment). - * - * You are not allowed to call any client API functions inside of the callback. - * In particular, you should not do any processing in the callback, but wake up - * another thread that does all the work. The callback is meant strictly for - * notification only, and is called from arbitrary core parts of the player, - * that make no considerations for reentrant API use or allowing the callee to - * spend a lot of time doing other things. Keep in mind that it's also possible - * that the callback is called from a thread while a mpv API function is called - * (i.e. it can be reentrant). - * - * In general, the client API expects you to call mpv_wait_event() to receive - * notifications, and the wakeup callback is merely a helper utility to make - * this easier in certain situations. Note that it's possible that there's - * only one wakeup callback invocation for multiple events. You should call - * mpv_wait_event() with no timeout until MPV_EVENT_NONE is reached, at which - * point the event queue is empty. - * - * If you actually want to do processing in a callback, spawn a thread that - * does nothing but call mpv_wait_event() in a loop and dispatches the result - * to a callback. - * - * Only one wakeup callback can be set. - * - * @param cb function that should be called if a wakeup is required - * @param d arbitrary userdata passed to cb - */ -void mpv_set_wakeup_callback(mpv_handle *ctx, void (*cb)(void *d), void *d); - -/** - * Block until all asynchronous requests are done. This affects functions like - * mpv_command_async(), which return immediately and return their result as - * events. - * - * This is a helper, and somewhat equivalent to calling mpv_wait_event() in a - * loop until all known asynchronous requests have sent their reply as event, - * except that the event queue is not emptied. - * - * In case you called mpv_suspend() before, this will also forcibly reset the - * suspend counter of the given handle. - */ -void mpv_wait_async_requests(mpv_handle *ctx); - -/** - * A hook is like a synchronous event that blocks the player. You register - * a hook handler with this function. You will get an event, which you need - * to handle, and once things are ready, you can let the player continue with - * mpv_hook_continue(). - * - * Currently, hooks can't be removed explicitly. But they will be implicitly - * removed if the mpv_handle it was registered with is destroyed. This also - * continues the hook if it was being handled by the destroyed mpv_handle (but - * this should be avoided, as it might mess up order of hook execution). - * - * Hook handlers are ordered globally by priority and order of registration. - * Handlers for the same hook with same priority are invoked in order of - * registration (the handler registered first is run first). Handlers with - * lower priority are run first (which seems backward). - * - * See the "Hooks" section in the manpage to see which hooks are currently - * defined. - * - * Some hooks might be reentrant (so you get multiple MPV_EVENT_HOOK for the - * same hook). If this can happen for a specific hook type, it will be - * explicitly documented in the manpage. - * - * Only the mpv_handle on which this was called will receive the hook events, - * or can "continue" them. - * - * @param reply_userdata This will be used for the mpv_event.reply_userdata - * field for the received MPV_EVENT_HOOK events. - * If you have no use for this, pass 0. - * @param name The hook name. This should be one of the documented names. But - * if the name is unknown, the hook event will simply be never - * raised. - * @param priority See remarks above. Use 0 as a neutral default. - * @return error code (usually fails only on OOM) - */ -int mpv_hook_add(mpv_handle *ctx, uint64_t reply_userdata, - const char *name, int priority); - -/** - * Respond to a MPV_EVENT_HOOK event. You must call this after you have handled - * the event. There is no way to "cancel" or "stop" the hook. - * - * Calling this will will typically unblock the player for whatever the hook - * is responsible for (e.g. for the "on_load" hook it lets it continue - * playback). - * - * It is explicitly undefined behavior to call this more than once for each - * MPV_EVENT_HOOK, to pass an incorrect ID, or to call this on a mpv_handle - * different from the one that registered the handler and received the event. - * - * @param id This must be the value of the mpv_event_hook.id field for the - * corresponding MPV_EVENT_HOOK. - * @return error code - */ -int mpv_hook_continue(mpv_handle *ctx, uint64_t id); - -#if MPV_ENABLE_DEPRECATED - -/** - * Return a UNIX file descriptor referring to the read end of a pipe. This - * pipe can be used to wake up a poll() based processing loop. The purpose of - * this function is very similar to mpv_set_wakeup_callback(), and provides - * a primitive mechanism to handle coordinating a foreign event loop and the - * libmpv event loop. The pipe is non-blocking. It's closed when the mpv_handle - * is destroyed. This function always returns the same value (on success). - * - * This is in fact implemented using the same underlying code as for - * mpv_set_wakeup_callback() (though they don't conflict), and it is as if each - * callback invocation writes a single 0 byte to the pipe. When the pipe - * becomes readable, the code calling poll() (or select()) on the pipe should - * read all contents of the pipe and then call mpv_wait_event(c, 0) until - * no new events are returned. The pipe contents do not matter and can just - * be discarded. There is not necessarily one byte per readable event in the - * pipe. For example, the pipes are non-blocking, and mpv won't block if the - * pipe is full. Pipes are normally limited to 4096 bytes, so if there are - * more than 4096 events, the number of readable bytes can not equal the number - * of events queued. Also, it's possible that mpv does not write to the pipe - * once it's guaranteed that the client was already signaled. See the example - * below how to do it correctly. - * - * Example: - * - * int pipefd = mpv_get_wakeup_pipe(mpv); - * if (pipefd < 0) - * error(); - * while (1) { - * struct pollfd pfds[1] = { - * { .fd = pipefd, .events = POLLIN }, - * }; - * // Wait until there are possibly new mpv events. - * poll(pfds, 1, -1); - * if (pfds[0].revents & POLLIN) { - * // Empty the pipe. Doing this before calling mpv_wait_event() - * // ensures that no wakeups are missed. It's not so important to - * // make sure the pipe is really empty (it will just cause some - * // additional wakeups in unlikely corner cases). - * char unused[256]; - * read(pipefd, unused, sizeof(unused)); - * while (1) { - * mpv_event *ev = mpv_wait_event(mpv, 0); - * // If MPV_EVENT_NONE is received, the event queue is empty. - * if (ev->event_id == MPV_EVENT_NONE) - * break; - * // Process the event. - * ... - * } - * } - * } - * - * @deprecated this function will be removed in the future. If you need this - * functionality, use mpv_set_wakeup_callback(), create a pipe - * manually, and call write() on your pipe in the callback. - * - * @return A UNIX FD of the read end of the wakeup pipe, or -1 on error. - * On MS Windows/MinGW, this will always return -1. - */ -int mpv_get_wakeup_pipe(mpv_handle *ctx); - -/** - * @deprecated use render.h - */ -typedef enum mpv_sub_api { - /** - * For using mpv's OpenGL renderer on an external OpenGL context. - * mpv_get_sub_api(MPV_SUB_API_OPENGL_CB) returns mpv_opengl_cb_context*. - * This context can be used with mpv_opengl_cb_* functions. - * Will return NULL if unavailable (if OpenGL support was not compiled in). - * See opengl_cb.h for details. - * - * @deprecated use render.h - */ - MPV_SUB_API_OPENGL_CB = 1 -} mpv_sub_api; - -/** - * This is used for additional APIs that are not strictly part of the core API. - * See the individual mpv_sub_api member values. - * - * @deprecated use render.h - */ -void *mpv_get_sub_api(mpv_handle *ctx, mpv_sub_api sub_api); - -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/stremio-shell/deps/libmpv/include/mpv/mpv.def b/stremio-shell/deps/libmpv/include/mpv/mpv.def deleted file mode 100644 index b74378c..0000000 --- a/stremio-shell/deps/libmpv/include/mpv/mpv.def +++ /dev/null @@ -1,58 +0,0 @@ -mpv_client_api_version -mpv_client_name -mpv_command -mpv_command_async -mpv_command_node -mpv_command_node_async -mpv_command_string -mpv_create -mpv_create_client -mpv_create_weak_client -mpv_destroy -mpv_detach_destroy -mpv_error_string -mpv_event_name -mpv_free -mpv_free_node_contents -mpv_get_property -mpv_get_property_async -mpv_get_property_osd_string -mpv_get_property_string -mpv_get_sub_api -mpv_get_time_us -mpv_get_wakeup_pipe -mpv_hook_add -mpv_hook_continue -mpv_initialize -mpv_load_config_file -mpv_observe_property -mpv_opengl_cb_draw -mpv_opengl_cb_init_gl -mpv_opengl_cb_report_flip -mpv_opengl_cb_render -mpv_opengl_cb_set_update_callback -mpv_opengl_cb_uninit_gl -mpv_render_context_create -mpv_render_context_free -mpv_render_context_get_info -mpv_render_context_render -mpv_render_context_report_swap -mpv_render_context_set_parameter -mpv_render_context_set_update_callback -mpv_render_context_update -mpv_request_event -mpv_request_log_messages -mpv_resume -mpv_set_option -mpv_set_option_string -mpv_set_property -mpv_set_property_async -mpv_set_property_string -mpv_set_wakeup_callback -mpv_stream_cb_add_ro -mpv_suspend -mpv_terminate_destroy -mpv_unobserve_property -mpv_wait_async_requests -mpv_wait_event -mpv_wakeup \ No newline at end of file diff --git a/stremio-shell/deps/libmpv/include/mpv/mpv.pc.in b/stremio-shell/deps/libmpv/include/mpv/mpv.pc.in deleted file mode 100644 index 5686343..0000000 --- a/stremio-shell/deps/libmpv/include/mpv/mpv.pc.in +++ /dev/null @@ -1,12 +0,0 @@ -prefix=@PREFIX@ -exec_prefix=@PREFIX@ -libdir=@LIBDIR@ -includedir=@INCDIR@ - -Name: mpv -Description: mpv media player client library -Version: @VERSION@ -Requires: -Libs: -L${libdir} -lmpv -Libs.private: @PRIV_LIBS@ -Cflags: -I${includedir} diff --git a/stremio-shell/deps/libmpv/include/mpv/opengl_cb.h b/stremio-shell/deps/libmpv/include/mpv/opengl_cb.h deleted file mode 100644 index 6820681..0000000 --- a/stremio-shell/deps/libmpv/include/mpv/opengl_cb.h +++ /dev/null @@ -1,339 +0,0 @@ -/* Copyright (C) 2017 the mpv developers - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef MPV_CLIENT_API_OPENGL_CB_H_ -#define MPV_CLIENT_API_OPENGL_CB_H_ - -#include "client.h" - -#if !MPV_ENABLE_DEPRECATED -#error "This header and all API provided by it is deprecated. Use render.h instead." -#else - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * - * Overview - * -------- - * - * Warning: this API is deprecated. A very similar API is provided by render.h - * and render_gl.h. The deprecated API is emulated with the new API. - * - * This API can be used to make mpv render into a foreign OpenGL context. It - * can be used to handle video display. - * - * The renderer needs to be explicitly initialized with mpv_opengl_cb_init_gl(), - * and then video can be drawn with mpv_opengl_cb_draw(). The user thread can - * be notified by new frames with mpv_opengl_cb_set_update_callback(). - * - * You can output and embed video without this API by setting the mpv "wid" - * option to a native window handle (see "Embedding the video window" section - * in the client.h header). In general, using the opengl-cb API is recommended, - * because window embedding can cause various issues, especially with GUI - * toolkits and certain platforms. - * - * OpenGL interop - * -------------- - * - * This assumes the OpenGL context lives on a certain thread controlled by the - * API user. The following functions require access to the OpenGL context: - * mpv_opengl_cb_init_gl - * mpv_opengl_cb_draw - * mpv_opengl_cb_uninit_gl - * - * The OpenGL context is indirectly accessed through the OpenGL function - * pointers returned by the get_proc_address callback in mpv_opengl_cb_init_gl. - * Generally, mpv will not load the system OpenGL library when using this API. - * - * Only "desktop" OpenGL version 2.1 and later and OpenGL ES version 2.0 and - * later are supported. With OpenGL 2.1, the GL_ARB_texture_rg is required. The - * renderer was written for the OpenGL 3.x core profile, with additional support - * for OpenGL 2.1 and OpenGL ES 2.0. - * - * Note that some hardware decoding interop API (as set with the "hwdec" option) - * may actually access some sort of host API, such as EGL. - * - * OpenGL state - * ------------ - * - * OpenGL has a large amount of implicit state. All the mpv functions mentioned - * above expect that the OpenGL state is reasonably set to OpenGL standard - * defaults. Likewise, mpv will attempt to leave the OpenGL context with - * standard defaults. The following state is excluded from this: - * - * - the glViewport state - * - the glScissor state (but GL_SCISSOR_TEST is in its default value) - * - glBlendFuncSeparate() state (but GL_BLEND is in its default value) - * - glClearColor() state - * - mpv may overwrite the callback set with glDebugMessageCallback() - * - mpv always disables GL_DITHER at init - * - * Messing with the state could be avoided by creating shared OpenGL contexts, - * but this is avoided for the sake of compatibility and interoperability. - * - * On OpenGL 2.1, mpv will strictly call functions like glGenTextures() to - * create OpenGL objects. You will have to do the same. This ensures that - * objects created by mpv and the API users don't clash. Also, legacy state - * must be either in its defaults, or not interfere with core state. - * - * Threading - * --------- - * - * The mpv_opengl_cb_* functions can be called from any thread, under the - * following conditions: - * - only one of the mpv_opengl_cb_* functions can be called at the same time - * (unless they belong to different mpv cores created by mpv_create()) - * - for functions which need an OpenGL context (see above) the OpenGL context - * must be "current" in the current thread, and it must be the same context - * as used with mpv_opengl_cb_init_gl() - * - never can be called from within the callbacks set with - * mpv_set_wakeup_callback() or mpv_opengl_cb_set_update_callback() - * - * Context and handle lifecycle - * ---------------------------- - * - * Video initialization will fail if the OpenGL context was not initialized yet - * (with mpv_opengl_cb_init_gl()). Likewise, mpv_opengl_cb_uninit_gl() will - * disable video. - * - * When the mpv core is destroyed (e.g. via mpv_terminate_destroy()), the OpenGL - * context must have been uninitialized. If this doesn't happen, undefined - * behavior will result. - * - * Hardware decoding - * ----------------- - * - * Hardware decoding via opengl_cb is fully supported, but requires some - * additional setup. (At least if direct hardware decoding modes are wanted, - * instead of copying back surface data from GPU to CPU RAM.) - * - * While "normal" mpv loads the OpenGL hardware decoding interop on demand, - * this can't be done with opengl_cb for internal technical reasons. Instead, - * it loads them by default, even if hardware decoding is not going to be used. - * In older mpv releases, this had to be done by setting the - * "opengl-hwdec-interop" or "hwdec-preload" options before calling - * mpv_opengl_cb_init_gl(). You can still use the newer "gpu-hwdec-interop" - * option to prevent loading of interop, or to load only a specific interop. - * - * There may be certain requirements on the OpenGL implementation: - * - Windows: ANGLE is required (although in theory GL/DX interop could be used) - * - Intel/Linux: EGL is required, and also a glMPGetNativeDisplay() callback - * must be provided (see sections below) - * - nVidia/Linux: Both GLX and EGL should work (GLX is required if vdpau is - * used, e.g. due to old drivers.) - * - OSX: CGL is required (CGLGetCurrentContext() returning non-NULL) - * - iOS: EAGL is required (EAGLContext.currentContext returning non-nil) - * - * Once these things are setup, hardware decoding can be enabled/disabled at - * any time by setting the "hwdec" property. - * - * Special windowing system interop considerations - * ------------------------------------------------ - * - * In some cases, libmpv needs to have access to the windowing system's handles. - * This can be a pointer to a X11 "Display" for example. Usually this is needed - * only for hardware decoding. - * - * You can communicate these handles to libmpv by adding a pseudo-OpenGL - * extension "GL_MP_MPGetNativeDisplay" to the additional extension string when - * calling mpv_opengl_cb_init_gl(). The get_proc_address callback should resolve - * a function named "glMPGetNativeDisplay", which has the signature: - * - * void* GLAPIENTRY glMPGetNativeDisplay(const char* name) - * - * See below what names are defined. Usually, libmpv will use the native handle - * up until mpv_opengl_cb_uninit_gl() is called. If the name is not anything - * you know/expected, return NULL from the function. - */ - -// Legacy - not supported anymore. -struct mpv_opengl_cb_window_pos { - int x; // left coordinates of window (usually 0) - int y; // top coordinates of window (usually 0) - int width; // width of GL window - int height; // height of GL window -}; - -// Legacy - not supported anymore. -struct mpv_opengl_cb_drm_params { - // DRM fd (int). set this to -1 if invalid. - int fd; - - // currently used crtc id - int crtc_id; - - // currently used connector id - int connector_id; - - // pointer to the drmModeAtomicReq that is being used for the renderloop. - // This atomic request pointer should be usually created at every renderloop. - struct _drmModeAtomicReq *atomic_request; -}; - -/** - * nVidia/Linux via VDPAU requires GLX, which does not have this problem (the - * GLX API can return the current X11 Display). - * - * Windowing system interop on MS win32 - * ------------------------------------ - * - * You should use ANGLE, and make sure your application and libmpv are linked - * to the same ANGLE DLLs. libmpv will pick the device context (needed for - * hardware decoding) from the current ANGLE EGL context. - */ - -/** - * Opaque context, returned by mpv_get_sub_api(MPV_SUB_API_OPENGL_CB). - * - * A context is bound to the mpv_handle it was retrieved from. The context - * will always be the same (for the same mpv_handle), and is valid until the - * mpv_handle it belongs to is released. - */ -typedef struct mpv_opengl_cb_context mpv_opengl_cb_context; - -typedef void (*mpv_opengl_cb_update_fn)(void *cb_ctx); -typedef void *(*mpv_opengl_cb_get_proc_address_fn)(void *fn_ctx, const char *name); - -/** - * Set the callback that notifies you when a new video frame is available, or - * if the video display configuration somehow changed and requires a redraw. - * Similar to mpv_set_wakeup_callback(), you must not call any mpv API from - * the callback, and all the other listed restrictions apply (such as not - * exiting the callback by throwing exceptions). - * - * @param callback callback(callback_ctx) is called if the frame should be - * redrawn - * @param callback_ctx opaque argument to the callback - */ -void mpv_opengl_cb_set_update_callback(mpv_opengl_cb_context *ctx, - mpv_opengl_cb_update_fn callback, - void *callback_ctx); - -/** - * Initialize the mpv OpenGL state. This retrieves OpenGL function pointers via - * get_proc_address, and creates OpenGL objects needed by mpv internally. It - * will also call APIs needed for rendering hardware decoded video in OpenGL, - * according to the mpv "hwdec" option. - * - * You must free the associated state at some point by calling the - * mpv_opengl_cb_uninit_gl() function. Not doing so may result in memory leaks - * or worse. - * - * @param exts optional _additional_ extension string, can be NULL - * @param get_proc_address callback used to retrieve function pointers to OpenGL - * functions. This is used for both standard functions - * and extension functions. (The extension string is - * checked whether extensions are really available.) - * The callback will be called from this function only - * (it is not stored and never used later). - * Usually, GL context APIs do this for you (e.g. with - * glXGetProcAddressARB or wglGetProcAddress), but - * some APIs do not always return pointers for all - * standard functions (even if present); in this case - * you have to compensate by looking up these functions - * yourself. - * @param get_proc_address_ctx arbitrary opaque user context passed to the - * get_proc_address callback - * @return error code (same as normal mpv_* API), including but not limited to: - * MPV_ERROR_UNSUPPORTED: the OpenGL version is not supported - * (or required extensions are missing) - * MPV_ERROR_INVALID_PARAMETER: the OpenGL state was already initialized - */ -int mpv_opengl_cb_init_gl(mpv_opengl_cb_context *ctx, const char *exts, - mpv_opengl_cb_get_proc_address_fn get_proc_address, - void *get_proc_address_ctx); - -/** - * Render video. Requires that the OpenGL state is initialized. - * - * The video will use the full provided framebuffer. Options like "panscan" are - * applied to determine which part of the video should be visible and how the - * video should be scaled. You can change these options at runtime by using the - * mpv property API. - * - * The renderer will reconfigure itself every time the output rectangle/size - * is changed. (If you want to do animations, it might be better to do the - * animation on a FBO instead.) - * - * This function implicitly pulls a video frame from the internal queue and - * renders it. If no new frame is available, the previous frame is redrawn. - * The update callback set with mpv_opengl_cb_set_update_callback() notifies - * you when a new frame was added. - * - * @param fbo The framebuffer object to render on. Because the renderer might - * manage multiple FBOs internally for the purpose of video - * postprocessing, it will always bind and unbind FBOs itself. If - * you want mpv to render on the main framebuffer, pass 0. - * @param w Width of the framebuffer. This is either the video size if the fbo - * parameter is 0, or the allocated size of the texture backing the - * fbo. The renderer will always use the full size of the fbo. - * @param h Height of the framebuffer. Same as with the w parameter, except - * that this parameter can be negative. In this case, the video - * frame will be rendered flipped. - * @return 0 - */ -int mpv_opengl_cb_draw(mpv_opengl_cb_context *ctx, int fbo, int w, int h); - -/** - * Deprecated. Use mpv_opengl_cb_draw(). This function is equivalent to: - * - * int mpv_opengl_cb_render(mpv_opengl_cb_context *ctx, int fbo, int vp[4]) - * { return mpv_opengl_cb_draw(ctx, fbo, vp[2], vp[3]); } - * - * vp[0] and vp[1] used to have a meaning, but are ignored in newer versions. - * - * This function will be removed in the future without version bump (this API - * was never marked as stable). - */ -int mpv_opengl_cb_render(mpv_opengl_cb_context *ctx, int fbo, int vp[4]); - -/** - * Tell the renderer that a frame was flipped at the given time. This is - * optional, but can help the player to achieve better timing. - * - * Note that calling this at least once informs libmpv that you will use this - * function. If you use it inconsistently, expect bad video playback. - * - * If this is called while no video or no OpenGL is initialized, it is ignored. - * - * @param time The mpv time (using mpv_get_time_us()) at which the flip call - * returned. If 0 is passed, mpv_get_time_us() is used instead. - * Currently, this parameter is ignored. - * @return error code - */ -int mpv_opengl_cb_report_flip(mpv_opengl_cb_context *ctx, int64_t time); - -/** - * Destroy the mpv OpenGL state. - * - * If video is still active (e.g. a file playing), video will be disabled - * forcefully. - * - * Calling this multiple times is ok. - * - * @return error code - */ -int mpv_opengl_cb_uninit_gl(mpv_opengl_cb_context *ctx); - -#ifdef __cplusplus -} -#endif - -#endif /* else #if MPV_ENABLE_DEPRECATED */ - -#endif diff --git a/stremio-shell/deps/libmpv/include/mpv/qthelper.hpp b/stremio-shell/deps/libmpv/include/mpv/qthelper.hpp deleted file mode 100644 index 0f66490..0000000 --- a/stremio-shell/deps/libmpv/include/mpv/qthelper.hpp +++ /dev/null @@ -1,380 +0,0 @@ -/* Copyright (C) 2017 the mpv developers - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef MPV_CLIENT_API_QTHELPER_H_ -#define MPV_CLIENT_API_QTHELPER_H_ - -#include - -/** - * Note: these helpers are provided for convenience for C++/Qt applications. - * This is based on the public API in client.h, and it does not encode any - * knowledge that is not known or guaranteed outside of the C client API. You - * can even copy and modify this code as you like, or implement similar things - * for other languages. - */ - -#include - -#include -#include -#include -#include -#include -#include - -namespace mpv { -namespace qt { - -// Wrapper around mpv_handle. Does refcounting under the hood. -class Handle -{ - struct container { - container(mpv_handle *h) : mpv(h) {} - ~container() { mpv_terminate_destroy(mpv); } - mpv_handle *mpv; - }; - QSharedPointer sptr; -public: - // Construct a new Handle from a raw mpv_handle with refcount 1. If the - // last Handle goes out of scope, the mpv_handle will be destroyed with - // mpv_terminate_destroy(). - // Never destroy the mpv_handle manually when using this wrapper. You - // will create dangling pointers. Just let the wrapper take care of - // destroying the mpv_handle. - // Never create multiple wrappers from the same raw mpv_handle; copy the - // wrapper instead (that's what it's for). - static Handle FromRawHandle(mpv_handle *handle) { - Handle h; - h.sptr = QSharedPointer(new container(handle)); - return h; - } - - // Return the raw handle; for use with the libmpv C API. - operator mpv_handle*() const { return sptr ? (*sptr).mpv : 0; } -}; - -static inline QVariant node_to_variant(const mpv_node *node) -{ - switch (node->format) { - case MPV_FORMAT_STRING: - return QVariant(QString::fromUtf8(node->u.string)); - case MPV_FORMAT_FLAG: - return QVariant(static_cast(node->u.flag)); - case MPV_FORMAT_INT64: - return QVariant(static_cast(node->u.int64)); - case MPV_FORMAT_DOUBLE: - return QVariant(node->u.double_); - case MPV_FORMAT_NODE_ARRAY: { - mpv_node_list *list = node->u.list; - QVariantList qlist; - for (int n = 0; n < list->num; n++) - qlist.append(node_to_variant(&list->values[n])); - return QVariant(qlist); - } - case MPV_FORMAT_NODE_MAP: { - mpv_node_list *list = node->u.list; - QVariantMap qmap; - for (int n = 0; n < list->num; n++) { - qmap.insert(QString::fromUtf8(list->keys[n]), - node_to_variant(&list->values[n])); - } - return QVariant(qmap); - } - default: // MPV_FORMAT_NONE, unknown values (e.g. future extensions) - return QVariant(); - } -} - -struct node_builder { - node_builder(const QVariant& v) { - set(&node_, v); - } - ~node_builder() { - free_node(&node_); - } - mpv_node *node() { return &node_; } -private: - Q_DISABLE_COPY(node_builder) - mpv_node node_; - mpv_node_list *create_list(mpv_node *dst, bool is_map, int num) { - dst->format = is_map ? MPV_FORMAT_NODE_MAP : MPV_FORMAT_NODE_ARRAY; - mpv_node_list *list = new mpv_node_list(); - dst->u.list = list; - if (!list) - goto err; - list->values = new mpv_node[num](); - if (!list->values) - goto err; - if (is_map) { - list->keys = new char*[num](); - if (!list->keys) - goto err; - } - return list; - err: - free_node(dst); - return NULL; - } - char *dup_qstring(const QString &s) { - QByteArray b = s.toUtf8(); - char *r = new char[b.size() + 1]; - if (r) - std::memcpy(r, b.data(), b.size() + 1); - return r; - } - bool test_type(const QVariant &v, QMetaType::Type t) { - // The Qt docs say: "Although this function is declared as returning - // "QVariant::Type(obsolete), the return value should be interpreted - // as QMetaType::Type." - // So a cast really seems to be needed to avoid warnings (urgh). - return static_cast(v.type()) == static_cast(t); - } - void set(mpv_node *dst, const QVariant &src) { - if (test_type(src, QMetaType::QString)) { - dst->format = MPV_FORMAT_STRING; - dst->u.string = dup_qstring(src.toString()); - if (!dst->u.string) - goto fail; - } else if (test_type(src, QMetaType::Bool)) { - dst->format = MPV_FORMAT_FLAG; - dst->u.flag = src.toBool() ? 1 : 0; - } else if (test_type(src, QMetaType::Int) || - test_type(src, QMetaType::LongLong) || - test_type(src, QMetaType::UInt) || - test_type(src, QMetaType::ULongLong)) - { - dst->format = MPV_FORMAT_INT64; - dst->u.int64 = src.toLongLong(); - } else if (test_type(src, QMetaType::Double)) { - dst->format = MPV_FORMAT_DOUBLE; - dst->u.double_ = src.toDouble(); - } else if (src.canConvert()) { - QVariantList qlist = src.toList(); - mpv_node_list *list = create_list(dst, false, qlist.size()); - if (!list) - goto fail; - list->num = qlist.size(); - for (int n = 0; n < qlist.size(); n++) - set(&list->values[n], qlist[n]); - } else if (src.canConvert()) { - QVariantMap qmap = src.toMap(); - mpv_node_list *list = create_list(dst, true, qmap.size()); - if (!list) - goto fail; - list->num = qmap.size(); - for (int n = 0; n < qmap.size(); n++) { - list->keys[n] = dup_qstring(qmap.keys()[n]); - if (!list->keys[n]) { - free_node(dst); - goto fail; - } - set(&list->values[n], qmap.values()[n]); - } - } else { - goto fail; - } - return; - fail: - dst->format = MPV_FORMAT_NONE; - } - void free_node(mpv_node *dst) { - switch (dst->format) { - case MPV_FORMAT_STRING: - delete[] dst->u.string; - break; - case MPV_FORMAT_NODE_ARRAY: - case MPV_FORMAT_NODE_MAP: { - mpv_node_list *list = dst->u.list; - if (list) { - for (int n = 0; n < list->num; n++) { - if (list->keys) - delete[] list->keys[n]; - if (list->values) - free_node(&list->values[n]); - } - delete[] list->keys; - delete[] list->values; - } - delete list; - break; - } - default: ; - } - dst->format = MPV_FORMAT_NONE; - } -}; - -/** - * RAII wrapper that calls mpv_free_node_contents() on the pointer. - */ -struct node_autofree { - mpv_node *ptr; - node_autofree(mpv_node *a_ptr) : ptr(a_ptr) {} - ~node_autofree() { mpv_free_node_contents(ptr); } -}; - -#if MPV_ENABLE_DEPRECATED - -/** - * Return the given property as mpv_node converted to QVariant, or QVariant() - * on error. - * - * @deprecated use get_property() instead - * - * @param name the property name - */ -static inline QVariant get_property_variant(mpv_handle *ctx, const QString &name) -{ - mpv_node node; - if (mpv_get_property(ctx, name.toUtf8().data(), MPV_FORMAT_NODE, &node) < 0) - return QVariant(); - node_autofree f(&node); - return node_to_variant(&node); -} - -/** - * Set the given property as mpv_node converted from the QVariant argument. - - * @deprecated use set_property() instead - */ -static inline int set_property_variant(mpv_handle *ctx, const QString &name, - const QVariant &v) -{ - node_builder node(v); - return mpv_set_property(ctx, name.toUtf8().data(), MPV_FORMAT_NODE, node.node()); -} - -/** - * Set the given option as mpv_node converted from the QVariant argument. - * - * @deprecated use set_property() instead - */ -static inline int set_option_variant(mpv_handle *ctx, const QString &name, - const QVariant &v) -{ - node_builder node(v); - return mpv_set_option(ctx, name.toUtf8().data(), MPV_FORMAT_NODE, node.node()); -} - -/** - * mpv_command_node() equivalent. Returns QVariant() on error (and - * unfortunately, the same on success). - * - * @deprecated use command() instead - */ -static inline QVariant command_variant(mpv_handle *ctx, const QVariant &args) -{ - node_builder node(args); - mpv_node res; - if (mpv_command_node(ctx, node.node(), &res) < 0) - return QVariant(); - node_autofree f(&res); - return node_to_variant(&res); -} - -#endif - -/** - * This is used to return error codes wrapped in QVariant for functions which - * return QVariant. - * - * You can use get_error() or is_error() to extract the error status from a - * QVariant value. - */ -struct ErrorReturn -{ - /** - * enum mpv_error value (or a value outside of it if ABI was extended) - */ - int error; - - ErrorReturn() : error(0) {} - explicit ErrorReturn(int err) : error(err) {} -}; - -/** - * Return the mpv error code packed into a QVariant, or 0 (success) if it's not - * an error value. - * - * @return error code (<0) or success (>=0) - */ -static inline int get_error(const QVariant &v) -{ - if (!v.canConvert()) - return 0; - return v.value().error; -} - -/** - * Return whether the QVariant carries a mpv error code. - */ -static inline bool is_error(const QVariant &v) -{ - return get_error(v) < 0; -} - -/** - * Return the given property as mpv_node converted to QVariant, or QVariant() - * on error. - * - * @param name the property name - * @return the property value, or an ErrorReturn with the error code - */ -static inline QVariant get_property(mpv_handle *ctx, const QString &name) -{ - mpv_node node; - int err = mpv_get_property(ctx, name.toUtf8().data(), MPV_FORMAT_NODE, &node); - if (err < 0) - return QVariant::fromValue(ErrorReturn(err)); - node_autofree f(&node); - return node_to_variant(&node); -} - -/** - * Set the given property as mpv_node converted from the QVariant argument. - * - * @return mpv error code (<0 on error, >= 0 on success) - */ -static inline int set_property(mpv_handle *ctx, const QString &name, - const QVariant &v) -{ - node_builder node(v); - return mpv_set_property(ctx, name.toUtf8().data(), MPV_FORMAT_NODE, node.node()); -} - -/** - * mpv_command_node() equivalent. - * - * @param args command arguments, with args[0] being the command name as string - * @return the property value, or an ErrorReturn with the error code - */ -static inline QVariant command(mpv_handle *ctx, const QVariant &args) -{ - node_builder node(args); - mpv_node res; - int err = mpv_command_node(ctx, node.node(), &res); - if (err < 0) - return QVariant::fromValue(ErrorReturn(err)); - node_autofree f(&res); - return node_to_variant(&res); -} - -} -} - -Q_DECLARE_METATYPE(mpv::qt::ErrorReturn) - -#endif diff --git a/stremio-shell/deps/libmpv/include/mpv/render.h b/stremio-shell/deps/libmpv/include/mpv/render.h deleted file mode 100644 index 253b2b4..0000000 --- a/stremio-shell/deps/libmpv/include/mpv/render.h +++ /dev/null @@ -1,596 +0,0 @@ -/* Copyright (C) 2018 the mpv developers - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef MPV_CLIENT_API_RENDER_H_ -#define MPV_CLIENT_API_RENDER_H_ - -#include "client.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Overview - * -------- - * - * This API can be used to make mpv render using supported graphic APIs (such - * as OpenGL). It can be used to handle video display. - * - * The renderer needs to be created with mpv_render_context_create() before - * you start playback (or otherwise cause a VO to be created). Then (with most - * backends) mpv_render_context_render() can be used to explicitly render the - * current video frame. Use mpv_render_context_set_update_callback() to get - * notified when there is a new frame to draw. - * - * Preferably rendering should be done in a separate thread. If you call - * normal libmpv API functions on the renderer thread, deadlocks can result - * (these are made non-fatal with timeouts, but user experience will obviously - * suffer). See "Threading" section below. - * - * You can output and embed video without this API by setting the mpv "wid" - * option to a native window handle (see "Embedding the video window" section - * in the client.h header). In general, using the render API is recommended, - * because window embedding can cause various issues, especially with GUI - * toolkits and certain platforms. - * - * Supported backends - * ------------------ - * - * OpenGL: via MPV_RENDER_API_TYPE_OPENGL, see render_gl.h header. - * - * Threading - * --------- - * - * You are recommended to do rendering on a separate thread than normal libmpv - * use. - * - * The mpv_render_* functions can be called from any thread, under the - * following conditions: - * - only one of the mpv_render_* functions can be called at the same time - * (unless they belong to different mpv cores created by mpv_create()) - * - never can be called from within the callbacks set with - * mpv_set_wakeup_callback() or mpv_render_context_set_update_callback() - * - if the OpenGL backend is used, for all functions the OpenGL context - * must be "current" in the calling thread, and it must be the same OpenGL - * context as the mpv_render_context was created with. Otherwise, undefined - * behavior will occur. - * - the thread does not call libmpv API functions other than the mpv_render_* - * functions, except APIs which are declared as safe (see below). Likewise, - * there must be no lock or wait dependency from the render thread to a - * thread using other libmpv functions. Basically, the situation that your - * render thread waits for a "not safe" libmpv API function to return must - * not happen. If you ignore this requirement, deadlocks can happen, which - * are made non-fatal with timeouts; then playback quality will be degraded, - * and the message - * mpv_render_context_render() not being called or stuck. - * is logged. If you set MPV_RENDER_PARAM_ADVANCED_CONTROL, you promise that - * this won't happen, and must absolutely guarantee it, or a real deadlock - * will freeze the mpv core thread forever. - * - * libmpv functions which are safe to call from a render thread are: - * - functions marked with "Safe to be called from mpv render API threads." - * - client.h functions which don't have an explicit or implicit mpv_handle - * parameter - * - mpv_render_* functions; but only for the same mpv_render_context pointer. - * If the pointer is different, mpv_render_context_free() is not safe. (The - * reason is that if MPV_RENDER_PARAM_ADVANCED_CONTROL is set, it may have - * to process still queued requests from the core, which it can do only for - * the current context, while requests for other contexts would deadlock. - * Also, it may have to wait and block for the core to terminate the video - * chain to make sure no resources are used after context destruction.) - * - if the mpv_handle parameter refers to a different mpv core than the one - * you're rendering for (very obscure, but allowed) - * - * Context and handle lifecycle - * ---------------------------- - * - * Video initialization will fail if the render context was not initialized yet - * (with mpv_render_context_create()), or it will revert to a VO that creates - * its own window. - * - * Currently, there can be only 1 mpv_render_context at a time per mpv core. - * - * Calling mpv_render_context_free() while a VO is using the render context is - * active will disable video. - * - * You must free the context with mpv_render_context_free() before the mpv core - * is destroyed. If this doesn't happen, undefined behavior will result. - */ - -/** - * Opaque context, returned by mpv_render_context_create(). - */ -typedef struct mpv_render_context mpv_render_context; - -/** - * Parameters for mpv_render_param (which is used in a few places such as - * mpv_render_context_create(). - * - * Also see mpv_render_param for conventions and how to use it. - */ -typedef enum mpv_render_param_type { - /** - * Not a valid value, but also used to terminate a params array. Its value - * is always guaranteed to be 0 (even if the ABI changes in the future). - */ - MPV_RENDER_PARAM_INVALID = 0, - /** - * The render API to use. Valid for mpv_render_context_create(). - * - * Type: char* - * - * Defined APIs: - * - * MPV_RENDER_API_TYPE_OPENGL: - * OpenGL desktop 2.1 or later (preferably core profile compatible to - * OpenGL 3.2), or OpenGLES 2.0 or later. - * Providing MPV_RENDER_PARAM_OPENGL_INIT_PARAMS is required. - * It is expected that an OpenGL context is valid and "current" when - * calling mpv_render_* functions (unless specified otherwise). It - * must be the same context for the same mpv_render_context. - */ - MPV_RENDER_PARAM_API_TYPE = 1, - /** - * Required parameters for initializing the OpenGL renderer. Valid for - * mpv_render_context_create(). - * Type: mpv_opengl_init_params* - */ - MPV_RENDER_PARAM_OPENGL_INIT_PARAMS = 2, - /** - * Describes a GL render target. Valid for mpv_render_context_render(). - * Type: mpv_opengl_fbo* - */ - MPV_RENDER_PARAM_OPENGL_FBO = 3, - /** - * Control flipped rendering. Valid for mpv_render_context_render(). - * Type: int* - * If the value is set to 0, render normally. Otherwise, render it flipped, - * which is needed e.g. when rendering to an OpenGL default framebuffer - * (which has a flipped coordinate system). - */ - MPV_RENDER_PARAM_FLIP_Y = 4, - /** - * Control surface depth. Valid for mpv_render_context_render(). - * Type: int* - * This implies the depth of the surface passed to the render function in - * bits per channel. If omitted or set to 0, the renderer will assume 8. - * Typically used to control dithering. - */ - MPV_RENDER_PARAM_DEPTH = 5, - /** - * ICC profile blob. Valid for mpv_render_context_set_parameter(). - * Type: mpv_byte_array* - * Set an ICC profile for use with the "icc-profile-auto" option. (If the - * option is not enabled, the ICC data will not be used.) - */ - MPV_RENDER_PARAM_ICC_PROFILE = 6, - /** - * Ambient light in lux. Valid for mpv_render_context_set_parameter(). - * Type: int* - * This can be used for automatic gamma correction. - */ - MPV_RENDER_PARAM_AMBIENT_LIGHT = 7, - /** - * X11 Display, sometimes used for hwdec. Valid for - * mpv_render_context_create(). The Display must stay valid for the lifetime - * of the mpv_render_context. - * Type: Display* - */ - MPV_RENDER_PARAM_X11_DISPLAY = 8, - /** - * Wayland display, sometimes used for hwdec. Valid for - * mpv_render_context_create(). The wl_display must stay valid for the - * lifetime of the mpv_render_context. - * Type: struct wl_display* - */ - MPV_RENDER_PARAM_WL_DISPLAY = 9, - /** - * Better control about rendering and enabling some advanced features. Valid - * for mpv_render_context_create(). - * - * This conflates multiple requirements the API user promises to abide if - * this option is enabled: - * - * - The API user's render thread, which is calling the mpv_render_*() - * functions, never waits for the core. Otherwise deadlocks can happen. - * See "Threading" section. - * - The callback set with mpv_render_context_set_update_callback() can now - * be called even if there is no new frame. The API user should call the - * mpv_render_context_update() function, and interpret the return value - * for whether a new frame should be rendered. - * - Correct functionality is impossible if the update callback is not set, - * or not set soon enough after mpv_render_context_create() (the core can - * block while waiting for you to call mpv_render_context_update(), and - * if the update callback is not correctly set, it will deadlock, or - * block for too long). - * - * In general, setting this option will enable the following features (and - * possibly more): - * - * - "Direct rendering", which means the player decodes directly to a - * texture, which saves a copy per video frame ("vd-lavc-dr" option - * needs to be enabled, and the rendering backend as well as the - * underlying GPU API/driver needs to have support for it). - * - Rendering screenshots with the GPU API if supported by the backend - * (instead of using a suboptimal software fallback via libswscale). - * - * Type: int*: 0 for disable (default), 1 for enable - */ - MPV_RENDER_PARAM_ADVANCED_CONTROL = 10, - /** - * Return information about the next frame to render. Valid for - * mpv_render_context_get_info(). - * - * Type: mpv_render_frame_info* - * - * It strictly returns information about the _next_ frame. The implication - * is that e.g. mpv_render_context_update()'s return value will have - * MPV_RENDER_UPDATE_FRAME set, and the user is supposed to call - * mpv_render_context_render(). If there is no next frame, then the - * return value will have is_valid set to 0. - */ - MPV_RENDER_PARAM_NEXT_FRAME_INFO = 11, - /** - * Enable or disable video timing. Valid for mpv_render_context_render(). - * - * Type: int*: 0 for disable, 1 for enable (default) - * - * When video is timed to audio, the player attempts to render video a bit - * ahead, and then do a blocking wait until the target display time is - * reached. This blocks mpv_render_context_render() for up to the amount - * specified with the "video-timing-offset" global option. You can set - * this parameter to 0 to disable this kind of waiting. If you do, it's - * recommended to use the target time value in mpv_render_frame_info to - * wait yourself, or to set the "video-timing-offset" to 0 instead. - * - * Disabling this without doing anything in addition will result in A/V sync - * being slightly off. - */ - MPV_RENDER_PARAM_BLOCK_FOR_TARGET_TIME = 12, - /** - * Use to skip rendering in mpv_render_context_render(). - * - * Type: int*: 0 for rendering (default), 1 for skipping - * - * If this is set, you don't need to pass a target surface to the render - * function (and if you do, it's completely ignored). This can still call - * into the lower level APIs (i.e. if you use OpenGL, the OpenGL context - * must be set). - * - * Be aware that the render API will consider this frame as having been - * rendered. All other normal rules also apply, for example about whether - * you have to call mpv_render_context_report_swap(). It also does timing - * in the same way. - */ - MPV_RENDER_PARAM_SKIP_RENDERING = 13, - /** - * DRM display, contains drm display handles. - * Valid for mpv_render_context_create(). - * Type : struct mpv_opengl_drm_params* - */ - MPV_RENDER_PARAM_DRM_DISPLAY = 14, - /** - * DRM osd size, contains osd dimensions. - * Valid for mpv_render_context_create(). - * Type : struct mpv_opengl_drm_osd_size* - */ - MPV_RENDER_PARAM_DRM_OSD_SIZE = 15, -} mpv_render_param_type; - -/** - * Used to pass arbitrary parameters to some mpv_render_* functions. The - * meaning of the data parameter is determined by the type, and each - * MPV_RENDER_PARAM_* documents what type the value must point to. - * - * Each value documents the required data type as the pointer you cast to - * void* and set on mpv_render_param.data. For example, if MPV_RENDER_PARAM_FOO - * documents the type as Something* , then the code should look like this: - * - * Something foo = {...}; - * mpv_render_param param; - * param.type = MPV_RENDER_PARAM_FOO; - * param.data = & foo; - * - * Normally, the data field points to exactly 1 object. If the type is char*, - * it points to a 0-terminated string. - * - * In all cases (unless documented otherwise) the pointers need to remain - * valid during the call only. Unless otherwise documented, the API functions - * will not write to the params array or any data pointed to it. - * - * As a convention, parameter arrays are always terminated by type==0. There - * is no specific order of the parameters required. The order of the 2 fields in - * this struct is guaranteed (even after ABI changes). - */ -typedef struct mpv_render_param { - enum mpv_render_param_type type; - void *data; -} mpv_render_param; - - -/** - * Predefined values for MPV_RENDER_PARAM_API_TYPE. - */ -#define MPV_RENDER_API_TYPE_OPENGL "opengl" - -/** - * Flags used in mpv_render_frame_info.flags. Each value represents a bit in it. - */ -typedef enum mpv_render_frame_info_flag { - /** - * Set if there is actually a next frame. If unset, there is no next frame - * yet, and other flags and fields that require a frame to be queued will - * be unset. - * - * This is set for _any_ kind of frame, even for redraw requests. - * - * Note that when this is unset, it simply means no new frame was - * decoded/queued yet, not necessarily that the end of the video was - * reached. A new frame can be queued after some time. - * - * If the return value of mpv_render_context_render() had the - * MPV_RENDER_UPDATE_FRAME flag set, this flag will usually be set as well, - * unless the frame is rendered, or discarded by other asynchronous events. - */ - MPV_RENDER_FRAME_INFO_PRESENT = 1 << 0, - /** - * If set, the frame is not an actual new video frame, but a redraw request. - * For example if the video is paused, and an option that affects video - * rendering was changed (or any other reason), an update request can be - * issued and this flag will be set. - * - * Typically, redraw frames will not be subject to video timing. - * - * Implies MPV_RENDER_FRAME_INFO_PRESENT. - */ - MPV_RENDER_FRAME_INFO_REDRAW = 1 << 1, - /** - * If set, this is supposed to reproduce the previous frame perfectly. This - * is usually used for certain "video-sync" options ("display-..." modes). - * Typically the renderer will blit the video from a FBO. Unset otherwise. - * - * Implies MPV_RENDER_FRAME_INFO_PRESENT. - */ - MPV_RENDER_FRAME_INFO_REPEAT = 1 << 2, - /** - * If set, the player timing code expects that the user thread blocks on - * vsync (by either delaying the render call, or by making a call to - * mpv_render_context_report_swap() at vsync time). - * - * Implies MPV_RENDER_FRAME_INFO_PRESENT. - */ - MPV_RENDER_FRAME_INFO_BLOCK_VSYNC = 1 << 3, -} mpv_render_frame_info_flag; - -/** - * Information about the next video frame that will be rendered. Can be - * retrieved with MPV_RENDER_PARAM_NEXT_FRAME_INFO. - */ -typedef struct mpv_render_frame_info { - /** - * A bitset of mpv_render_frame_info_flag values (i.e. multiple flags are - * combined with bitwise or). - */ - uint64_t flags; - /** - * Absolute time at which the frame is supposed to be displayed. This is in - * the same unit and base as the time returned by mpv_get_time_us(). For - * frames that are redrawn, or if vsync locked video timing is used (see - * "video-sync" option), then this can be 0. The "video-timing-offset" - * option determines how much "headroom" the render thread gets (but a high - * enough frame rate can reduce it anyway). mpv_render_context_render() will - * normally block until the time is elapsed, unless you pass it - * MPV_RENDER_PARAM_BLOCK_FOR_TARGET_TIME = 0. - */ - int64_t target_time; -} mpv_render_frame_info; - -/** - * Initialize the renderer state. Depending on the backend used, this will - * access the underlying GPU API and initialize its own objects. - * - * You must free the context with mpv_render_context_free(). Not doing so before - * the mpv core is destroyed may result in memory leaks or crashes. - * - * Currently, only at most 1 context can exists per mpv core (it represents the - * main video output). - * - * You should pass the following parameters: - * - MPV_RENDER_PARAM_API_TYPE to select the underlying backend/GPU API. - * - Backend-specific init parameter, like MPV_RENDER_PARAM_OPENGL_INIT_PARAMS. - * - Setting MPV_RENDER_PARAM_ADVANCED_CONTROL and following its rules is - * strongly recommended. - * - If you want to use hwdec, possibly hwdec interop resources. - * - * @param res set to the context (on success) or NULL (on failure). The value - * is never read and always overwritten. - * @param mpv handle used to get the core (the mpv_render_context won't depend - * on this specific handle, only the core referenced by it) - * @param params an array of parameters, terminated by type==0. It's left - * unspecified what happens with unknown parameters. At least - * MPV_RENDER_PARAM_API_TYPE is required, and most backends will - * require another backend-specific parameter. - * @return error code, including but not limited to: - * MPV_ERROR_UNSUPPORTED: the OpenGL version is not supported - * (or required extensions are missing) - * MPV_ERROR_NOT_IMPLEMENTED: an unknown API type was provided, or - * support for the requested API was not - * built in the used libmpv binary. - * MPV_ERROR_INVALID_PARAMETER: at least one of the provided parameters was - * not valid. - */ -int mpv_render_context_create(mpv_render_context **res, mpv_handle *mpv, - mpv_render_param *params); - -/** - * Attempt to change a single parameter. Not all backends and parameter types - * support all kinds of changes. - * - * @param ctx a valid render context - * @param param the parameter type and data that should be set - * @return error code. If a parameter could actually be changed, this returns - * success, otherwise an error code depending on the parameter type - * and situation. - */ -int mpv_render_context_set_parameter(mpv_render_context *ctx, - mpv_render_param param); - -/** - * Retrieve information from the render context. This is NOT a counterpart to - * mpv_render_context_set_parameter(), because you generally can't read - * parameters set with it, and this function is not meant for this purpose. - * Instead, this is for communicating information from the renderer back to the - * user. See mpv_render_param_type; entries which support this function - * explicitly mention it, and for other entries you can assume it will fail. - * - * You pass param with param.type set and param.data pointing to a variable - * of the required data type. The function will then overwrite that variable - * with the returned value (at least on success). - * - * @param ctx a valid render context - * @param param the parameter type and data that should be retrieved - * @return error code. If a parameter could actually be retrieved, this returns - * success, otherwise an error code depending on the parameter type - * and situation. MPV_ERROR_NOT_IMPLEMENTED is used for unknown - * param.type, or if retrieving it is not supported. - */ -int mpv_render_context_get_info(mpv_render_context *ctx, - mpv_render_param param); - -typedef void (*mpv_render_update_fn)(void *cb_ctx); - -/** - * Set the callback that notifies you when a new video frame is available, or - * if the video display configuration somehow changed and requires a redraw. - * Similar to mpv_set_wakeup_callback(), you must not call any mpv API from - * the callback, and all the other listed restrictions apply (such as not - * exiting the callback by throwing exceptions). - * - * This can be called from any thread, except from an update callback. In case - * of the OpenGL backend, no OpenGL state or API is accessed. - * - * Calling this will raise an update callback immediately. - * - * @param callback callback(callback_ctx) is called if the frame should be - * redrawn - * @param callback_ctx opaque argument to the callback - */ -void mpv_render_context_set_update_callback(mpv_render_context *ctx, - mpv_render_update_fn callback, - void *callback_ctx); - -/** - * The API user is supposed to call this when the update callback was invoked - * (like all mpv_render_* functions, this has to happen on the render thread, - * and _not_ from the update callback itself). - * - * This is optional if MPV_RENDER_PARAM_ADVANCED_CONTROL was not set (default). - * Otherwise, it's a hard requirement that this is called after each update - * callback. If multiple update callback happened, and the function could not - * be called sooner, it's OK to call it once after the last callback. - * - * If an update callback happens during or after this function, the function - * must be called again at the soonest possible time. - * - * If MPV_RENDER_PARAM_ADVANCED_CONTROL was set, this will do additional work - * such as allocating textures for the video decoder. - * - * @return a bitset of mpv_render_update_flag values (i.e. multiple flags are - * combined with bitwise or). Typically, this will tell the API user - * what should happen next. E.g. if the MPV_RENDER_UPDATE_FRAME flag is - * set, mpv_render_context_render() should be called. If flags unknown - * to the API user are set, or if the return value is 0, nothing needs - * to be done. - */ -uint64_t mpv_render_context_update(mpv_render_context *ctx); - -/** - * Flags returned by mpv_render_context_update(). Each value represents a bit - * in the function's return value. - */ -typedef enum mpv_render_update_flag { - /** - * A new video frame must be rendered. mpv_render_context_render() must be - * called. - */ - MPV_RENDER_UPDATE_FRAME = 1 << 0, -} mpv_render_context_flag; - -/** - * Render video. - * - * Typically renders the video to a target surface provided via mpv_render_param - * (the details depend on the backend in use). Options like "panscan" are - * applied to determine which part of the video should be visible and how the - * video should be scaled. You can change these options at runtime by using the - * mpv property API. - * - * The renderer will reconfigure itself every time the target surface - * configuration (such as size) is changed. - * - * This function implicitly pulls a video frame from the internal queue and - * renders it. If no new frame is available, the previous frame is redrawn. - * The update callback set with mpv_render_context_set_update_callback() - * notifies you when a new frame was added. The details potentially depend on - * the backends and the provided parameters. - * - * Generally, libmpv will invoke your update callback some time before the video - * frame should be shown, and then lets this function block until the supposed - * display time. This will limit your rendering to video FPS. You can prevent - * this by setting the "video-timing-offset" global option to 0. (This applies - * only to "audio" video sync mode.) - * - * You should pass the following parameters: - * - Backend-specific target object, such as MPV_RENDER_PARAM_OPENGL_FBO. - * - Possibly transformations, such as MPV_RENDER_PARAM_FLIP_Y. - * - * @param ctx a valid render context - * @param params an array of parameters, terminated by type==0. Which parameters - * are required depends on the backend. It's left unspecified what - * happens with unknown parameters. - * @return error code - */ -int mpv_render_context_render(mpv_render_context *ctx, mpv_render_param *params); - -/** - * Tell the renderer that a frame was flipped at the given time. This is - * optional, but can help the player to achieve better timing. - * - * Note that calling this at least once informs libmpv that you will use this - * function. If you use it inconsistently, expect bad video playback. - * - * If this is called while no video is initialized, it is ignored. - * - * @param ctx a valid render context - */ -void mpv_render_context_report_swap(mpv_render_context *ctx); - -/** - * Destroy the mpv renderer state. - * - * If video is still active (e.g. a file playing), video will be disabled - * forcefully. - * - * @param ctx a valid render context. After this function returns, this is not - * a valid pointer anymore. NULL is also allowed and does nothing. - */ -void mpv_render_context_free(mpv_render_context *ctx); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/stremio-shell/deps/libmpv/include/mpv/render_gl.h b/stremio-shell/deps/libmpv/include/mpv/render_gl.h deleted file mode 100644 index 4d771f2..0000000 --- a/stremio-shell/deps/libmpv/include/mpv/render_gl.h +++ /dev/null @@ -1,191 +0,0 @@ -/* Copyright (C) 2018 the mpv developers - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef MPV_CLIENT_API_RENDER_GL_H_ -#define MPV_CLIENT_API_RENDER_GL_H_ - -#include "render.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * OpenGL backend - * -------------- - * - * This header contains definitions for using OpenGL with the render.h API. - * - * OpenGL interop - * -------------- - * - * The OpenGL backend has some special rules, because OpenGL itself uses - * implicit per-thread contexts, which causes additional API problems. - * - * This assumes the OpenGL context lives on a certain thread controlled by the - * API user. All mpv_render_* APIs have to be assumed to implicitly use the - * OpenGL context if you pass a mpv_render_context using the OpenGL backend, - * unless specified otherwise. - * - * The OpenGL context is indirectly accessed through the OpenGL function - * pointers returned by the get_proc_address callback in mpv_opengl_init_params. - * Generally, mpv will not load the system OpenGL library when using this API. - * - * OpenGL state - * ------------ - * - * OpenGL has a large amount of implicit state. All the mpv functions mentioned - * above expect that the OpenGL state is reasonably set to OpenGL standard - * defaults. Likewise, mpv will attempt to leave the OpenGL context with - * standard defaults. The following state is excluded from this: - * - * - the glViewport state - * - the glScissor state (but GL_SCISSOR_TEST is in its default value) - * - glBlendFuncSeparate() state (but GL_BLEND is in its default value) - * - glClearColor() state - * - mpv may overwrite the callback set with glDebugMessageCallback() - * - mpv always disables GL_DITHER at init - * - * Messing with the state could be avoided by creating shared OpenGL contexts, - * but this is avoided for the sake of compatibility and interoperability. - * - * On OpenGL 2.1, mpv will strictly call functions like glGenTextures() to - * create OpenGL objects. You will have to do the same. This ensures that - * objects created by mpv and the API users don't clash. Also, legacy state - * must be either in its defaults, or not interfere with core state. - * - * API use - * ------- - * - * The mpv_render_* API is used. That API supports multiple backends, and this - * section documents specifics for the OpenGL backend. - * - * Use mpv_render_context_create() with MPV_RENDER_PARAM_API_TYPE set to - * MPV_RENDER_API_TYPE_OPENGL, and MPV_RENDER_PARAM_OPENGL_INIT_PARAMS provided. - * - * Call mpv_render_context_render() with MPV_RENDER_PARAM_OPENGL_FBO to render - * the video frame to an FBO. - * - * Hardware decoding - * ----------------- - * - * Hardware decoding via this API is fully supported, but requires some - * additional setup. (At least if direct hardware decoding modes are wanted, - * instead of copying back surface data from GPU to CPU RAM.) - * - * There may be certain requirements on the OpenGL implementation: - * - * - Windows: ANGLE is required (although in theory GL/DX interop could be used) - * - Intel/Linux: EGL is required, and also the native display resource needs - * to be provided (e.g. MPV_RENDER_PARAM_X11_DISPLAY for X11 and - * MPV_RENDER_PARAM_WL_DISPLAY for Wayland) - * - nVidia/Linux: Both GLX and EGL should work (GLX is required if vdpau is - * used, e.g. due to old drivers.) - * - OSX: CGL is required (CGLGetCurrentContext() returning non-NULL) - * - iOS: EAGL is required (EAGLContext.currentContext returning non-nil) - * - * Once these things are setup, hardware decoding can be enabled/disabled at - * any time by setting the "hwdec" property. - */ - -/** - * For initializing the mpv OpenGL state via MPV_RENDER_PARAM_OPENGL_INIT_PARAMS. - */ -typedef struct mpv_opengl_init_params { - /** - * This retrieves OpenGL function pointers, and will use them in subsequent - * operation. - * Usually, GL context APIs do this for you (e.g. with glXGetProcAddressARB - * or wglGetProcAddress), but some APIs do not always return pointers for - * all standard functions (even if present); in this case you have to - * compensate by looking up these functions yourself and returning them - * from this callback. - */ - void *(*get_proc_address)(void *ctx, const char *name); - /** - * Value passed as ctx parameter to get_proc_address(). - */ - void *get_proc_address_ctx; - /** - * This should not be used. It is deprecated and will be removed or ignored - * when the opengl_cb API is removed. - */ - const char *extra_exts; -} mpv_opengl_init_params; - -/** - * For MPV_RENDER_PARAM_OPENGL_FBO. - */ -typedef struct mpv_opengl_fbo { - /** - * Framebuffer object name. This must be either a valid FBO generated by - * glGenFramebuffers() that is complete and color-renderable, or 0. If the - * value is 0, this refers to the OpenGL default framebuffer. - */ - int fbo; - /** - * Valid dimensions. This must refer to the size of the framebuffer. This - * must always be set. - */ - int w, h; - /** - * Underlying texture internal format (e.g. GL_RGBA8), or 0 if unknown. If - * this is the default framebuffer, this can be an equivalent. - */ - int internal_format; -} mpv_opengl_fbo; - -typedef struct mpv_opengl_drm_params { - /** - * DRM fd (int). Set to a negative number if invalid. - */ - int fd; - - /** - * Currently used crtc id - */ - int crtc_id; - - /** - * Currently used connector id - */ - int connector_id; - - /** - * Pointer to a drmModeAtomicReq pointer that is being used for the renderloop. - * This pointer should hold a pointer to the atomic request pointer - * The atomic request pointer is usually changed at every renderloop. - */ - struct _drmModeAtomicReq **atomic_request_ptr; - - /** - * DRM render node. Used for VAAPI interop. - * Set to a negative number if invalid. - */ - int render_fd; -} mpv_opengl_drm_params; - -typedef struct mpv_opengl_drm_osd_size { - /** - * size of the OSD in pixels. - */ - int width, height; -} mpv_opengl_drm_osd_size; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/stremio-shell/deps/libmpv/include/mpv/stream_cb.h b/stremio-shell/deps/libmpv/include/mpv/stream_cb.h deleted file mode 100644 index ec48a3c..0000000 --- a/stremio-shell/deps/libmpv/include/mpv/stream_cb.h +++ /dev/null @@ -1,229 +0,0 @@ -/* Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * Note: the client API is licensed under ISC (see above) to ease - * interoperability with other licenses. But keep in mind that the - * mpv core is still mostly GPLv2+. It's up to lawyers to decide - * whether applications using this API are affected by the GPL. - * One argument against this is that proprietary applications - * using mplayer in slave mode is apparently tolerated, and this - * API is basically equivalent to slave mode. - */ - -#ifndef MPV_CLIENT_API_STREAM_CB_H_ -#define MPV_CLIENT_API_STREAM_CB_H_ - -#include "client.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Warning: this API is not stable yet. - * - * Overview - * -------- - * - * This API can be used to make mpv read from a stream with a custom - * implementation. This interface is inspired by funopen on BSD and - * fopencookie on linux. The stream is backed by user-defined callbacks - * which can implement customized open, read, seek, size and close behaviors. - * - * Usage - * ----- - * - * Register your stream callbacks with the mpv_stream_cb_add_ro() function. You - * have to provide a mpv_stream_cb_open_ro_fn callback to it (open_fn argument). - * - * Once registered, you can `loadfile myprotocol://myfile`. Your open_fn will be - * invoked with the URI and you must fill out the provided mpv_stream_cb_info - * struct. This includes your stream callbacks (like read_fn), and an opaque - * cookie, which will be passed as the first argument to all the remaining - * stream callbacks. - * - * Note that your custom callbacks must not invoke libmpv APIs as that would - * cause a deadlock. - * - * Stream lifetime - * --------------- - * - * A stream remains valid until its close callback has been called. It's up to - * libmpv to call the close callback, and the libmpv user cannot close it - * directly with the stream_cb API. - * - * For example, if you consider your custom stream to become suddenly invalid - * (maybe because the underlying stream died), libmpv will continue using your - * stream. All you can do is returning errors from each callback, until libmpv - * gives up and closes it. - * - * Protocol registration and lifetime - * ---------------------------------- - * - * Protocols remain registered until the mpv instance is terminated. This means - * in particular that it can outlive the mpv_handle that was used to register - * it, but once mpv_terminate_destroy() is called, your registered callbacks - * will not be called again. - * - * Protocol unregistration is finished after the mpv core has been destroyed - * (e.g. after mpv_terminate_destroy() has returned). - * - * If you do not call mpv_terminate_destroy() yourself (e.g. plugin-style code), - * you will have to deal with the registration or even streams outliving your - * code. Here are some possible ways to do this: - * - call mpv_terminate_destroy(), which destroys the core, and will make sure - * all streams are closed once this function returns - * - you refcount all resources your stream "cookies" reference, so that it - * doesn't matter if streams live longer than expected - * - create "cancellation" semantics: after your protocol has been unregistered, - * notify all your streams that are still opened, and make them drop all - * referenced resources - then return errors from the stream callbacks as - * long as the stream is still opened - * - */ - -/** - * Read callback used to implement a custom stream. The semantics of the - * callback match read(2) in blocking mode. Short reads are allowed (you can - * return less bytes than requested, and libmpv will retry reading the rest - * with a nother call). If no data can be immediately read, the callback must - * block until there is new data. A return of 0 will be interpreted as final - * EOF, although libmpv might retry the read, or seek to a different position. - * - * @param cookie opaque cookie identifying the stream, - * returned from mpv_stream_cb_open_fn - * @param buf buffer to read data into - * @param size of the buffer - * @return number of bytes read into the buffer - * @return 0 on EOF - * @return -1 on error - */ -typedef int64_t (*mpv_stream_cb_read_fn)(void *cookie, char *buf, uint64_t nbytes); - -/** - * Seek callback used to implement a custom stream. - * - * Note that mpv will issue a seek to position 0 immediately after opening. This - * is used to test whether the stream is seekable (since seekability might - * depend on the URI contents, not just the protocol). Return - * MPV_ERROR_UNSUPPORTED if seeking is not implemented for this stream. This - * seek also servies to establish the fact that streams start at position 0. - * - * This callback can be NULL, in which it behaves as if always returning - * MPV_ERROR_UNSUPPORTED. - * - * @param cookie opaque cookie identifying the stream, - * returned from mpv_stream_cb_open_fn - * @param offset target absolut stream position - * @return the resulting offset of the stream - * MPV_ERROR_UNSUPPORTED or MPV_ERROR_GENERIC if the seek failed - */ -typedef int64_t (*mpv_stream_cb_seek_fn)(void *cookie, int64_t offset); - -/** - * Size callback used to implement a custom stream. - * - * Return MPV_ERROR_UNSUPPORTED if no size is known. - * - * This callback can be NULL, in which it behaves as if always returning - * MPV_ERROR_UNSUPPORTED. - * - * @param cookie opaque cookie identifying the stream, - * returned from mpv_stream_cb_open_fn - * @return the total size in bytes of the stream - */ -typedef int64_t (*mpv_stream_cb_size_fn)(void *cookie); - -/** - * Close callback used to implement a custom stream. - * - * @param cookie opaque cookie identifying the stream, - * returned from mpv_stream_cb_open_fn - */ -typedef void (*mpv_stream_cb_close_fn)(void *cookie); - -/** - * See mpv_stream_cb_open_ro_fn callback. - */ -typedef struct mpv_stream_cb_info { - /** - * Opaque user-provided value, which will be passed to the other callbacks. - * The close callback will be called to release the cookie. It is not - * interpreted by mpv. It doesn't even need to be a valid pointer. - * - * The user sets this in the mpv_stream_cb_open_ro_fn callback. - */ - void *cookie; - - /** - * Callbacks set by the user in the mpv_stream_cb_open_ro_fn callback. Some - * of them are optional, and can be left unset. - * - * The following callbacks are mandatory: read_fn, close_fn - */ - mpv_stream_cb_read_fn read_fn; - mpv_stream_cb_seek_fn seek_fn; - mpv_stream_cb_size_fn size_fn; - mpv_stream_cb_close_fn close_fn; -} mpv_stream_cb_info; - -/** - * Open callback used to implement a custom read-only (ro) stream. The user - * must set the callback fields in the passed info struct. The cookie field - * also can be set to store state associated to the stream instance. - * - * Note that the info struct is valid only for the duration of this callback. - * You can't change the callbacks or the pointer to the cookie at a later point. - * - * Each stream instance created by the open callback can have different - * callbacks. - * - * The close_fn callback will terminate the stream instance. The pointers to - * your callbacks and cookie will be discarded, and the callbacks will not be - * called again. - * - * @param user_data opaque user data provided via mpv_stream_cb_add() - * @param uri name of the stream to be opened (with protocol prefix) - * @param info fields which the user should fill - * @return 0 on success, MPV_ERROR_LOADING_FAILED if the URI cannot be opened. - */ -typedef int (*mpv_stream_cb_open_ro_fn)(void *user_data, char *uri, - mpv_stream_cb_info *info); - -/** - * Add a custom stream protocol. This will register a protocol handler under - * the given protocol prefix, and invoke the given callbacks if an URI with the - * matching protocol prefix is opened. - * - * The "ro" is for read-only - only read-only streams can be registered with - * this function. - * - * The callback remains registered until the mpv core is registered. - * - * If a custom stream with the same name is already registered, then the - * MPV_ERROR_INVALID_PARAMETER error is returned. - * - * @param protocol protocol prefix, for example "foo" for "foo://" URIs - * @param user_data opaque pointer passed into the mpv_stream_cb_open_fn - * callback. - * @return error code - */ -int mpv_stream_cb_add_ro(mpv_handle *ctx, const char *protocol, void *user_data, - mpv_stream_cb_open_ro_fn open_fn); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/stremio-shell/deps/libmpv/mac/bin/ffmpeg b/stremio-shell/deps/libmpv/mac/bin/ffmpeg deleted file mode 100644 index 6270e732253550cff9032589cd0a2e7c7f29832f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254612 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 Um!5Uj1s9%k{srfsi*F782b@gd7XSbN diff --git a/stremio-shell/deps/libmpv/mpv.def b/stremio-shell/deps/libmpv/mpv.def deleted file mode 100644 index d97ff7a..0000000 --- a/stremio-shell/deps/libmpv/mpv.def +++ /dev/null @@ -1,59 +0,0 @@ -EXPORTS -mpv_client_api_version -mpv_client_name -mpv_command -mpv_command_async -mpv_command_node -mpv_command_node_async -mpv_command_string -mpv_create -mpv_create_client -mpv_create_weak_client -mpv_destroy -mpv_detach_destroy -mpv_error_string -mpv_event_name -mpv_free -mpv_free_node_contents -mpv_get_property -mpv_get_property_async -mpv_get_property_osd_string -mpv_get_property_string -mpv_get_sub_api -mpv_get_time_us -mpv_get_wakeup_pipe -mpv_hook_add -mpv_hook_continue -mpv_initialize -mpv_load_config_file -mpv_observe_property -mpv_opengl_cb_draw -mpv_opengl_cb_init_gl -mpv_opengl_cb_render -mpv_opengl_cb_report_flip -mpv_opengl_cb_set_update_callback -mpv_opengl_cb_uninit_gl -mpv_render_context_create -mpv_render_context_free -mpv_render_context_get_info -mpv_render_context_render -mpv_render_context_report_swap -mpv_render_context_set_parameter -mpv_render_context_set_update_callback -mpv_render_context_update -mpv_request_event -mpv_request_log_messages -mpv_resume -mpv_set_option -mpv_set_option_string -mpv_set_property -mpv_set_property_async -mpv_set_property_string -mpv_set_wakeup_callback -mpv_stream_cb_add_ro -mpv_suspend -mpv_terminate_destroy -mpv_unobserve_property -mpv_wait_async_requests -mpv_wait_event -mpv_wakeup \ No newline at end of file diff --git a/stremio-shell/deps/libmpv/win32-x64/mpv.lib b/stremio-shell/deps/libmpv/win32-x64/mpv.lib deleted file mode 100644 index fa270c4ff3221581725164247ee287ac2a359c56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14354 zcmc&)O>7)R7Jm67i3y1z|NlVEaA zzOJfQuitw$2cE4&vp3H6of@#Ov2v+Y9v>T@8ngMM>TzOxdRpFI>m#BiqFrZ*_FN&_ z`zg`Bdy@9QO(f_$l%RnjMW3Mr9Y9k-5lW_CB^`W;NYFPZL5BtveT`VuARNWY>FQ8J+&)6sVo{frVcbXL(_l%Qi<6n%h_={HHo-yst814__|X+>Y7 z1fATW=o6Hn;dP2`qhz`-Y2+G_pkGjePQ9$?dz7Hj8AX`0QP9|=qAyT_#z7o9n!sQnrUt4H#+hDd{3mcuF z(y9fw!l+$qHYkIgYSXAJgr=}~Hl&&h3zbGyN~rr(ZBS{y*O)bB6elg&XjT=R>?{xr zznrIAmd@qHIMk0?W-bclY=|41FV-fQ zZ8kdSr!8Kbr5v_yGaq(>R@7{TQAZBbV)*5ZH8!PFYiw0E+f{S;S#=qR#>81IQ@X;n z?ZxZ7t;FEXXS?rCZ6OR6y&VZa>b2Wa%y`r?^=75Y%RE<`59VrhDVbtw`R4U@7~Kl(wN5b& z`BvDNuLrZ&gKAV+5>p8!F)dwNibWf*RNM*Z#q5rBz!$BHsTTSmeV)|hLGk!ICpV#)@-wyGwlrC5yiQbjJ41099BIx7ERDWl$FqSHxC^c)eL*+q0^57DQ4 ziSF$qdV4?7cc7sGqR&7a`b3~#K`$L7`UW(3i0EU`15kC4=tt1_VWKZV{YQvC1U&$~ zdz9#B(AgoPyPz${h&}-Q272c>(GQ^M6GUHwcAO;o1hj6L=r-s+=-LR;FQAuC5q%Gu z8O6JSCdY`r0Bu7g^*-nx=&cFVfjFA@3bdn4^bzPj=qe(UpFroP@E#xpg0zBG(rQ{m zPtaOgN9(DNo}>-*6m6tU)K5>-Gqjnu&{o<;+i3^wq+PU|_RwD1NBe02lX8#_(I6eB zBXpF8=olTR6LgY>X@pMED2>rLO;Cx-G)Yr5O{eJ${ehmP=l(C4s}R%l935$;^MpaE z%8dBNkW+z)jA_#RVO?NSamd}m}v`qItziz|6 zLTuDiR@tgFeEE##smbH^v0rYtS>Er~^2@r_TC_W_S<9yku~F5%hWbQi#Nh(vjifeoDZVb#WoEI(Kvp=GnF6U@?%)iLW$mCd(2boQ$v){`Z4TJVx&h16-jW(FXD|QO$`%o8%KiNfypqm*J2wRlKHMl6WzE`nP3|6SUS#P36JSwwl7#p z_-2?SBBG33J{k;yX2k0^z&^~s=)(&qlP;NUPsTpRKG`PFA$t<6Twc5|*XFm&nIz=iV{Us3f|u>nu~ z8cc++gzx(CyGGn47&HUZ-NJi*es#r)-+wpdA&4M~DIV?&k$BY`F-Htcq9~aX%b*b@ zGG)zSK4Q@1;@)w%lRPulMLZPZ6(TiHQDIt<3p zLeZbaqF7V@xnqS`?O?^HxkcA0Pcznduu_BTT{BMmN5^L52?tSo5=F;XO8)O*YyMWC zt&P!=sG%@Qj&`iGP>g`2pmyY~*m@hw%vmMds=!{(*_r0|&5 zs$U_R;WL~3$1%F6Jy;KK56c<01BW6wS&&~Ab98~798d#IhTNrZS}ysm@Ijz%_MxUs zaj%GZ9>Ep^(MV_%99tgJRs+dMl@vrO$A2Gmb~Xnl+YBTp2~!ZQl;Oo~2ikUpW~O%( zOz&Ul42@)8XNQTC{M#kb1-2#>otujH7OxBfFTKTJz)y3u5Pe4-TZTtwd{4#GDyEs1Tjhs!rh+#mtyt z{^}j_V><3q&w86-OZn?Q=tnfu&PB(WGq;ERsHrW}>qsXv>?{7jfqy$e?2m>vo~(fqc7*I^)de&=(B@@`jsR$ z9lwV?gyRXOb1G2~tDNB>90Jw}2g^P0D7vb7S%Z@aW_*-V7$sw592X8N6joGyN>dam z?`u7hLNX433a(ixC%Qgm;KgU*+HLGTJCPTUj(V^jLBy8x6&dp(K6LDq_jMjO5Isk2 z1y?Z7-~d!A+Zp$w6$@~ diff --git a/stremio-shell/deps/libmpv/win32/mpv.lib b/stremio-shell/deps/libmpv/win32/mpv.lib deleted file mode 100644 index afa314d1b8f6afc03f72e671012e4d8f20c38cab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14632 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 diff --git a/stremio-shell/deps/singleapplication/CHANGELOG.md b/stremio-shell/deps/singleapplication/CHANGELOG.md deleted file mode 100644 index 90ef30b..0000000 --- a/stremio-shell/deps/singleapplication/CHANGELOG.md +++ /dev/null @@ -1,141 +0,0 @@ -Changelog -========= - -__3.0.8__ ---------- - -* Bug fix - changed QApplication::instance() to QCoreApplication::instance() - - _Evgeniy Bazhenov_ - -__3.0.7a__ ----------- - -* Fixed compilation error with Mingw32 in MXE thanks to Vitaly Tonkacheyev. -* Removed QMutex used for thread safe behaviour. The implementation now uses - QCoreApplication::instance() to get an instance to SingleApplication for - memory deallocation. - -__3.0.6a__ ----------- - -* Reverted GetUserName API usage on Windows. Fixed bug with missing library. -* Fixed bug in the Calculator example, preventing it's window to be raised - on Windows. - - Special thanks to Charles Gunawan. - -__3.0.5a__ ----------- - -* Fixed a memory leak in the SingleApplicationPrivate destructor. - - _Sergei Moiseev_ - -__3.0.4a__ ----------- - -* Fixed shadow and uninitialised variable warnings. - - _Paul Walmsley_ - -__3.0.3a__ ----------- - -* Removed Microsoft Windows specific code for getting username due to - multiple problems and compiler differences on Windows platforms. On - Windows the shared memory block in User mode now includes the user's - home path (which contains the user's username). - -* Explicitly getting absolute path of the user's home directory as on Unix - a relative path (`~`) may be returned. - -__3.0.2a__ ----------- - -* Fixed bug on Windows when username containing wide characters causes the - library to crash. - - _Le Liu_ - -__3.0.1a__ ----------- - -* Allows the application path and version to be excluded from the server name - hash. The following flags were added for this purpose: - * `SingleApplication::Mode::ExcludeAppVersion` - * `SingleApplication::Mode::ExcludeAppPath` -* Allow a non elevated process to connect to a local server created by an - elevated process run by the same user on Windows -* Fixes a problem with upper case letters in paths on Windows - - _Le Liu_ - -__v3.0a__ ---------- - -* Depricated secondary instances count. -* Added a sendMessage() method to send a message to the primary instance. -* Added a receivedMessage() signal, emitted when a message is received from a - secondary instance. -* The SingleApplication constructor's third parameter is now a bool - specifying if the current instance should be allowed to run as a secondary - instance if there is already a primary instance. -* The SingleApplication constructor accept a fourth parameter specifying if - the SingleApplication block should be User-wide or System-wide. -* SingleApplication no longer relies on `applicationName` and - `organizationName` to be set. It instead concatenates all of the following - data and computes a `SHA256` hash which is used as the key of the - `QSharedMemory` block and the `QLocalServer`. Since at least - `applicationFilePath` is always present there is no need to explicitly set - any of the following prior to initialising `SingleApplication`. - * `QCoreApplication::applicationName` - * `QCoreApplication::applicationVersion` - * `QCoreApplication::applicationFilePath` - * `QCoreApplication::organizationName` - * `QCoreApplication::organizationDomain` - * User name or home directory path if in User mode -* The primary instance is no longer notified when a secondary instance had - been started by default. A `Mode` flag for this feature exists. -* Added `instanceNumber()` which represents a unique identifier for each - secondary instance started. When called from the primary instance will - return `0`. - -__v2.4__ --------- - -* Stability improvements -* Support for secondary instances. -* The library now recovers safely after the primary process has crashed -and the shared memory had not been deleted. - -__v2.3__ --------- - -* Improved pimpl design and inheritance safety. - - _Vladislav Pyatnichenko_ - -__v2.2__ --------- - -* The `QAPPLICATION_CLASS` macro can now be defined in the file including the -Single Application header or with a `DEFINES+=` statement in the project file. - -__v2.1__ --------- - -* A race condition can no longer occur when starting two processes nearly - simultaneously. - - Fix issue [#3](https://github.com/itay-grudev/SingleApplication/issues/3) - -__v2.0__ --------- - -* SingleApplication is now being passed a reference to `argc` instead of a - copy. - - Fix issue [#1](https://github.com/itay-grudev/SingleApplication/issues/1) - -* Improved documentation. diff --git a/stremio-shell/deps/singleapplication/LICENSE b/stremio-shell/deps/singleapplication/LICENSE deleted file mode 100644 index 85b2a14..0000000 --- a/stremio-shell/deps/singleapplication/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Itay Grudev 2015 - 2016 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -Note: Some of the examples include code not distributed under the terms of the -MIT License. diff --git a/stremio-shell/deps/singleapplication/README.md b/stremio-shell/deps/singleapplication/README.md deleted file mode 100644 index e003ab4..0000000 --- a/stremio-shell/deps/singleapplication/README.md +++ /dev/null @@ -1,274 +0,0 @@ -SingleApplication -================= - -This is a replacement of the QtSingleApplication for `Qt5`. - -Keeps the Primary Instance of your Application and kills each subsequent -instances. It can (if enabled) spawn secondary (non-related to the primary) -instances and can send data to the primary instance from secondary instances. - -Usage ------ - -The `SingleApplication` class inherits from whatever `Q[Core|Gui]Application` -class you specify via the `QAPPLICATION_CLASS` macro (`QCoreApplication` is the -default). Further usage is similar to the use of the `Q[Core|Gui]Application` -classes. - -The library sets up a `QLocalServer` and a `QSharedMemory` block. The first -instance of your Application is your Primary Instance. It would check if the -shared memory block exists and if not it will start a `QLocalServer` and listen -for connections. Each subsequent instance of your application would check if the -shared memory block exists and if it does, it will connect to the QLocalServer -to notify the primary instance that a new instance had been started, after which -it would terminate with status code `0`. In the Primary Instance -`SingleApplication` would emit the `instanceStarted()` signal upon detecting -that a new instance had been started. - -The library uses `stdlib` to terminate the program with the `exit()` function. - -You can use the library as if you use any other `QCoreApplication` derived -class: - -```cpp -#include -#include - -int main( int argc, char* argv[] ) -{ - SingleApplication app( argc, argv ); - - return app.exec(); -} -``` - -To include the library files I would recommend that you add it as a git -submodule to your project and include it's contents with a `.pri` file. Here is -how: - -```bash -git submodule add git@github.com:itay-grudev/SingleApplication.git singleapplication -``` - -Then include the `singleapplication.pri` file in your `.pro` project file. Also -don't forget to specify which `QCoreApplication` class your app is using if it -is not `QCoreApplication`. - -```qmake -include(singleapplication/singleapplication.pri) -DEFINES += QAPPLICATION_CLASS=QApplication -``` - -The `Instance Started` signal ------------------------- - -The SingleApplication class implements a `instanceStarted()` signal. You can -bind to that signal to raise your application's window when a new instance had -been started, for example. - -```cpp -// window is a QWindow instance -QObject::connect( - &app, - &SingleApplication::instanceStarted, - &window, - &QWindow::raise -); -``` - -Using `SingleApplication::instance()` is a neat way to get the -`SingleApplication` instance for binding to it's signals anywhere in your -program. - -Secondary Instances -------------------- - -If you want to be able to launch additional Secondary Instances (not related to -your Primary Instance) you have to enable that with the third parameter of the -`SingleApplication` constructor. The default is `false` meaning no Secondary -Instances. Here is an example of how you would start a Secondary Instance send -a message with the command line arguments to the primary instance and then shut -down. - -```cpp -int main(int argc, char *argv[]) -{ - SingleApplication app( argc, argv, true ); - - if( app.isSecondary() ) { - app.sendMessage( app.arguments().join(' ')).toUtf8() ); - app.exit( 0 ); - } - - return app.exec(); -} -``` - -*__Note:__ A secondary instance won't cause the emission of the -`instanceStarted()` signal by default. See `SingleApplication::Mode` for more -details.* - -You can check whether your instance is a primary or secondary with the following -methods: - -```cpp -app.isPrimary(); -// or -app.isSecondary(); -``` - -*__Note:__ If your Primary Instance is terminated a newly launched instance -will replace the Primary one even if the Secondary flag has been set.* - -API ---- - -### Members - -```cpp -SingleApplication::SingleApplication( int &argc, char *argv[], bool allowSecondary = false, Options options = Mode::User, int timeout = 100 ) -``` - -Depending on whether `allowSecondary` is set, this constructor may terminate -your app if there is already a primary instance running. Additional `Options` -can be specified to set whether the SingleApplication block should work -user-wide or system-wide. Additionally the `Mode::SecondaryNotification` may be -used to notify the primary instance whenever a secondary instance had been -started (disabled by default). `timeout` specifies the maximum time in -milliseconds to wait for blocking operations. - -*__Note:__ `argc` and `argv` may be changed as Qt removes arguments that it -recognizes.* - -*__Note:__ `Mode::SecondaryNotification` only works if set on both the primary -and the secondary instance.* - -*__Note:__ Operating system can restrict the shared memory blocks to the same -user, in which case the User/System modes will have no effect and the block will -be user wide.* - ---- - -```cpp -bool SingleApplication::sendMessage( QByteArray message, int timeout = 100 ) -``` - -Sends `message` to the Primary Instance. Uses `timeout` as a the maximum timeout -in milliseconds for blocking functions - ---- - -```cpp -bool SingleApplication::isPrimary() -``` - -Returns if the instance is the primary instance. - ---- - -```cpp -bool SingleApplication::isSecondary() -``` -Returns if the instance is a secondary instance. - ---- - -```cpp -quint32 SingleApplication::instanceId() -``` - -Returns a unique identifier for the current instance - -### Signals - -```cpp -void SingleApplication::instanceStarted() -``` - -Triggered whenever a new instance had been started, except for secondary -instances if the `Mode::SecondaryNotification` flag is not specified. - ---- - -```cpp -void SingleApplication::receivedMessage( quint32 instanceId, QByteArray message ) -``` - -Triggered whenever there is a message received from a secondary instance. - ---- - -### Flags - -```cpp -enum SingleApplication::Mode -``` - -* `Mode::User` - The SingleApplication block should apply user wide. This adds - user specific data to the key used for the shared memory and server name. - This is the default functionality. -* `Mode::System` – The SingleApplication block applies system-wide. -* `Mode::SecondaryNotification` – Whether to trigger `instanceStarted()` even - whenever secondary instances are started. -* `Mode::ExcludeAppPath` – Excludes the application path from the server name - (and memory block) hash. -* `Mode::ExcludeAppVersion` – Excludes the application version from the server - name (and memory block) hash. - -*__Note:__ `Mode::SecondaryNotification` only works if set on both the primary -and the secondary instance.* - -*__Note:__ Operating system can restrict the shared memory blocks to the same -user, in which case the User/System modes will have no effect and the block will -be user wide.* - ---- - -Versioning ----------- - -Each major version introduces either very significant changes or is not -backwards compatible with the previous version. Minor versions only add -additional features, bug fixes or performance improvements and are backwards -compatible with the previous release. See [`CHANGELOG.md`](CHANGELOG.md) for -more details. - -Implementation --------------- - -The library is implemented with a QSharedMemory block which is thread safe and -guarantees a race condition will not occur. It also uses a QLocalSocket to -notify the main process that a new instance had been spawned and thus invoke the -`instanceStarted()` signal. - -To handle an issue on `*nix` systems, where the operating system owns the shared -memory block and if the program crashes the memory remains untouched, the -library binds to the following signals and closes the program with -`error code = 128 + signum` where signum is the number representation of the -signal listed below. Handling the signal is required in order to safely delete -the `QSharedMemory` block. Each of these signals are potentially lethal and will -results in process termination. - -* `SIGHUP` - `1`, Hangup. -* `SIGINT` - `2`, Terminal interrupt signal -* `SIGQUIT` - `3`, Terminal quit signal. -* `SIGILL` - `4`, Illegal instruction. -* `SIGABRT` - `6`, Process abort signal. -* `SIGBUS` - `7`, Access to an undefined portion of a memory object. -* `SIGFPE` - `8`, Erroneous arithmetic operation (such as division by zero). -* `SIGSEGV` - `11`, Invalid memory reference. -* `SIGSYS` - `12`, Bad system call. -* `SIGPIPE` - `13`, Write on a pipe with no one to read it. -* `SIGALRM` - `14`, Alarm clock. -* `SIGTERM` - `15`, Termination signal. -* `SIGXCPU` - `24`, CPU time limit exceeded. -* `SIGXFSZ` - `25`, File size limit exceeded. - -Additionally the library can recover from being killed with uncatchable signals -and will reset the memory block given that there are no other instances running. - -License -------- -This library and it's supporting documentation are released under -`The MIT License (MIT)` with the exception of some of the examples distributed -under the BSD license. diff --git a/stremio-shell/deps/singleapplication/examples/basic/basic.pro b/stremio-shell/deps/singleapplication/examples/basic/basic.pro deleted file mode 100644 index b7af16c..0000000 --- a/stremio-shell/deps/singleapplication/examples/basic/basic.pro +++ /dev/null @@ -1,5 +0,0 @@ -# Single Application implementation -include(../../singleapplication.pri) -DEFINES += QAPPLICATION_CLASS=QCoreApplication - -SOURCES += main.cpp diff --git a/stremio-shell/deps/singleapplication/examples/basic/main.cpp b/stremio-shell/deps/singleapplication/examples/basic/main.cpp deleted file mode 100644 index 4787d1c..0000000 --- a/stremio-shell/deps/singleapplication/examples/basic/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include - -int main(int argc, char *argv[]) -{ - // Allow secondary instances - SingleApplication app( argc, argv ); - - return app.exec(); -} diff --git a/stremio-shell/deps/singleapplication/examples/calculator/button.cpp b/stremio-shell/deps/singleapplication/examples/calculator/button.cpp deleted file mode 100644 index 0d622b1..0000000 --- a/stremio-shell/deps/singleapplication/examples/calculator/button.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -#include "button.h" - -//! [0] -Button::Button(const QString &text, QWidget *parent) - : QToolButton(parent) -{ - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - setText(text); -} -//! [0] - -//! [1] -QSize Button::sizeHint() const -//! [1] //! [2] -{ - QSize size = QToolButton::sizeHint(); - size.rheight() += 20; - size.rwidth() = qMax(size.width(), size.height()); - return size; -} -//! [2] diff --git a/stremio-shell/deps/singleapplication/examples/calculator/button.h b/stremio-shell/deps/singleapplication/examples/calculator/button.h deleted file mode 100644 index b06edc1..0000000 --- a/stremio-shell/deps/singleapplication/examples/calculator/button.h +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef BUTTON_H -#define BUTTON_H - -#include - -//! [0] -class Button : public QToolButton -{ - Q_OBJECT - -public: - explicit Button(const QString &text, QWidget *parent = 0); - - QSize sizeHint() const Q_DECL_OVERRIDE; -}; -//! [0] - -#endif diff --git a/stremio-shell/deps/singleapplication/examples/calculator/calculator.cpp b/stremio-shell/deps/singleapplication/examples/calculator/calculator.cpp deleted file mode 100644 index cbcc29b..0000000 --- a/stremio-shell/deps/singleapplication/examples/calculator/calculator.cpp +++ /dev/null @@ -1,406 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -#include - -#include "button.h" -#include "calculator.h" - -//! [0] -Calculator::Calculator(QWidget *parent) - : QWidget(parent) -{ - sumInMemory = 0.0; - sumSoFar = 0.0; - factorSoFar = 0.0; - waitingForOperand = true; -//! [0] - -//! [1] - display = new QLineEdit("0"); -//! [1] //! [2] - display->setReadOnly(true); - display->setAlignment(Qt::AlignRight); - display->setMaxLength(15); - - QFont font = display->font(); - font.setPointSize(font.pointSize() + 8); - display->setFont(font); -//! [2] - -//! [4] - for (int i = 0; i < NumDigitButtons; ++i) { - digitButtons[i] = createButton(QString::number(i), SLOT(digitClicked())); - } - - Button *pointButton = createButton(tr("."), SLOT(pointClicked())); - Button *changeSignButton = createButton(tr("\302\261"), SLOT(changeSignClicked())); - - Button *backspaceButton = createButton(tr("Backspace"), SLOT(backspaceClicked())); - Button *clearButton = createButton(tr("Clear"), SLOT(clear())); - Button *clearAllButton = createButton(tr("Clear All"), SLOT(clearAll())); - - Button *clearMemoryButton = createButton(tr("MC"), SLOT(clearMemory())); - Button *readMemoryButton = createButton(tr("MR"), SLOT(readMemory())); - Button *setMemoryButton = createButton(tr("MS"), SLOT(setMemory())); - Button *addToMemoryButton = createButton(tr("M+"), SLOT(addToMemory())); - - Button *divisionButton = createButton(tr("\303\267"), SLOT(multiplicativeOperatorClicked())); - Button *timesButton = createButton(tr("\303\227"), SLOT(multiplicativeOperatorClicked())); - Button *minusButton = createButton(tr("-"), SLOT(additiveOperatorClicked())); - Button *plusButton = createButton(tr("+"), SLOT(additiveOperatorClicked())); - - Button *squareRootButton = createButton(tr("Sqrt"), SLOT(unaryOperatorClicked())); - Button *powerButton = createButton(tr("x\302\262"), SLOT(unaryOperatorClicked())); - Button *reciprocalButton = createButton(tr("1/x"), SLOT(unaryOperatorClicked())); - Button *equalButton = createButton(tr("="), SLOT(equalClicked())); -//! [4] - -//! [5] - QGridLayout *mainLayout = new QGridLayout; -//! [5] //! [6] - mainLayout->setSizeConstraint(QLayout::SetFixedSize); - mainLayout->addWidget(display, 0, 0, 1, 6); - mainLayout->addWidget(backspaceButton, 1, 0, 1, 2); - mainLayout->addWidget(clearButton, 1, 2, 1, 2); - mainLayout->addWidget(clearAllButton, 1, 4, 1, 2); - - mainLayout->addWidget(clearMemoryButton, 2, 0); - mainLayout->addWidget(readMemoryButton, 3, 0); - mainLayout->addWidget(setMemoryButton, 4, 0); - mainLayout->addWidget(addToMemoryButton, 5, 0); - - for (int i = 1; i < NumDigitButtons; ++i) { - int row = ((9 - i) / 3) + 2; - int column = ((i - 1) % 3) + 1; - mainLayout->addWidget(digitButtons[i], row, column); - } - - mainLayout->addWidget(digitButtons[0], 5, 1); - mainLayout->addWidget(pointButton, 5, 2); - mainLayout->addWidget(changeSignButton, 5, 3); - - mainLayout->addWidget(divisionButton, 2, 4); - mainLayout->addWidget(timesButton, 3, 4); - mainLayout->addWidget(minusButton, 4, 4); - mainLayout->addWidget(plusButton, 5, 4); - - mainLayout->addWidget(squareRootButton, 2, 5); - mainLayout->addWidget(powerButton, 3, 5); - mainLayout->addWidget(reciprocalButton, 4, 5); - mainLayout->addWidget(equalButton, 5, 5); - setLayout(mainLayout); - - setWindowTitle(tr("Calculator")); -} -//! [6] - -//! [7] -void Calculator::digitClicked() -{ - Button *clickedButton = qobject_cast