From 14a99c33428433c037e407ead373a965b224aa8f Mon Sep 17 00:00:00 2001 From: Chris Josten Date: Sat, 26 Sep 2020 02:51:37 +0200 Subject: [PATCH] Implemented series and final for touches alpha release --- harbour-sailfin.desktop | 4 +- harbour-sailfin.pro | 5 +- icons/108x108/harbour-sailfin.png | Bin 7433 -> 5214 bytes icons/128x128/harbour-sailfin.png | Bin 9004 -> 6630 bytes icons/172x172/harbour-sailfin.png | Bin 12765 -> 9685 bytes icons/86x86/harbour-sailfin.png | Bin 5835 -> 4127 bytes qml/Constants.qml | 10 + qml/Utils.js | 17 + qml/components/LibraryItemDelegate.qml | 11 +- qml/components/MoreSection.qml | 21 +- qml/components/RemoteImage.qml | 4 +- qml/components/itemdetails/EpisodeDetails.qml | 34 +- qml/components/itemdetails/FilmDetails.qml | 7 - qml/components/itemdetails/PlayToolbar.qml | 1 + qml/components/itemdetails/SeasonDetails.qml | 79 ++- qml/components/itemdetails/SeriesDetails.qml | 48 +- .../itemdetails/UnsupportedDetails.qml | 4 +- qml/cover/CoverPage.qml | 132 +++- qml/icon.png | Bin 0 -> 16623 bytes qml/licenses/lgpl-2.1.html | 616 ++++++++++++++++++ qml/pages/AboutPage.qml | 97 +++ qml/pages/DetailPage.qml | 14 +- qml/pages/MainPage.qml | 48 +- qml/pages/SecondPage.qml | 30 - qml/pages/setup/a | 0 qml/qmldir | 1 + rpm/harbour-sailfin.yaml | 2 +- src/jellyfinapimodel.cpp | 34 +- src/jellyfinapimodel.h | 61 +- translations/harbour-sailfin.ts | 47 +- 30 files changed, 1213 insertions(+), 114 deletions(-) create mode 100644 qml/Constants.qml create mode 100644 qml/icon.png create mode 100644 qml/licenses/lgpl-2.1.html create mode 100644 qml/pages/AboutPage.qml delete mode 100644 qml/pages/SecondPage.qml delete mode 100644 qml/pages/setup/a create mode 100644 qml/qmldir diff --git a/harbour-sailfin.desktop b/harbour-sailfin.desktop index 5a21920..5a7d614 100644 --- a/harbour-sailfin.desktop +++ b/harbour-sailfin.desktop @@ -3,10 +3,10 @@ Type=Application X-Nemo-Application-Type=silica-qt5 Icon=harbour-sailfin Exec=harbour-sailfin -Name=harbour-sailfin +Name=Sailfin # translation example: # your app name in German locale (de) # # Remember to comment out the following line, if you do not want to use # a different app name in German locale (de). -Name[de]=harbour-sailfin +Name[nl] = Sailfin diff --git a/harbour-sailfin.pro b/harbour-sailfin.pro index e635689..64788fb 100644 --- a/harbour-sailfin.pro +++ b/harbour-sailfin.pro @@ -26,6 +26,7 @@ SOURCES += \ src/serverdiscoverymodel.cpp DISTFILES += \ + qml/Constants.qml \ qml/Utils.js \ qml/components/GlassyBackground.qml \ qml/components/LibraryItemDelegate.qml \ @@ -48,12 +49,12 @@ DISTFILES += \ qml/pages/DetailPage.qml \ qml/pages/LegalPage.qml \ qml/pages/MainPage.qml \ - qml/pages/SecondPages.qml \ + qml/pages/AboutPage.qml \ qml/harbour-sailfin.qml \ qml/pages/VideoPage.qml \ qml/pages/setup/AddServerConnectingPage.qml \ qml/pages/setup/LoginDialog.qml \ - qml/pages/setup/a + qml/qmldir SAILFISHAPP_ICONS = 86x86 108x108 128x128 172x172 diff --git a/icons/108x108/harbour-sailfin.png b/icons/108x108/harbour-sailfin.png index ab10628d3741e1893912e2a304931b55c8c43cf7..609c62b75bdcd75dd10f5a2f288af29e44d266af 100644 GIT binary patch literal 5214 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 Y4-yYH&_6GkNdN!<07*qoM6N<$f+nrZtpET3 literal 7433 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 Hu0mjfp95I$ diff --git a/icons/128x128/harbour-sailfin.png b/icons/128x128/harbour-sailfin.png index 54375c53cbe19c8ff70ed0c2b435707a7f8a5db5..89657434a5b572c5d117c8c781be5b4e3e594a3f 100644 GIT binary patch literal 6630 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 A4gdfE diff --git a/icons/172x172/harbour-sailfin.png b/icons/172x172/harbour-sailfin.png index 36eee58569097cff9011308279775e3f40a72175..15874863a0be5c01e23dbea219d4e32d921a305b 100644 GIT binary patch literal 9685 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
    3*BJ-*)G#D0C>ZP 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 diff --git a/icons/86x86/harbour-sailfin.png b/icons/86x86/harbour-sailfin.png index ad316d6f88bf9cbdaed51583ae466d7bf2e4337e..e650b090b696607dacd2624257cd13e1a0184adf 100644 GIT binary patch delta 4123 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 literal 5835 zcmV;+7BuOJP)1Yvx~)jkOaXC1SuY(D3KI(T8d>|zAZaW zV<%0M*virPB~4ylo7a~nZu{CeO>;Q0n>a^b+{AfFHZt#X9QWH52Rk`AS;KMM0mj(Pgpj6efh`xDm4eH0+?(^hTFW8b z-QDua%E|)(?&3JEGcypzSkBLs(%Hsk)=QW4vgOj3vXOazS-}ns4Jox+?Y#i*BZQPM zB(V27++_jF7~>}~*0JgN2Nl(HJG~T(xP>4~}bl?bGUDG|GSb;H^WI2CZ1A|ID(5j=6-8 z;*GI=eSLa^!SH3q*zM`}Gyk%M^t^@k+(0DCo$j}5PxaaK-PQ?hG!`cS!1EmYhY#~L_`)|RQNQmvS7W2NCP7_7_XG6aLc#~5Q9qzo4t zm{jAYeL>l;-t4M8d3D?{H4{+8DI)-2(kr8XdCS(Z+c!14IYK}g!;5G8$`fUp=)Lc2 zn_euOV!)-8E)49*$cQQ!3_b>6!%`>E`QV-%bZGwL^|NM|KPL3x~l$YmVe+qTB_ z;5|2t@*H6)-E)HujVBP60lRfl*x1;^05)WEQY^TX5%To$ z?($d850pp5I5+JJ$_XJT)heR*?r5F(_@0hQj+^^HJ9fot020%y8#@}j#elO^{er>T zY__ivLUu|ySt{HqUr6?&mrk1pC*10I9Aw%Tl&j=I+@Mj$KEAts{LZaw-I+RZO3C@5 z2^|2etu_XAN_jk=|3cv`MZX}hqobqu0l2*oP>Y4zJML2b;Ls^cAT06>4Bk*kDAg!M zrCb*O$gT|&DX5wH!xLUbBo^ZUU}If{znE|qs}BIVGrLI{85!wdjC~>9SS}|ip_Jw< z%Xa^=ZBq5fb0_NpVUY&_InOhLS|uvwviNmt&E7k=G`n)?_l{4gQlC2;Dg)VK$mKt? zELR&Aqb~`zudh!J;G4)8GKvYe$2P5c^o3LPsb1GuRT`ue;5ou74BF^l-L`d{KGhHp9h$JM9a~e)RI`S}{%u0BowS^l9ZnJkAoI zKeoHg!INuG_-sDyF24c*Dh%pqYNoK-a4Ds^!CI}>ZH%$or3^0xu1G2Qw?pq(eBr1J z0Jb$%dq1|PW8%VyQwIQ@^_9LY4OM}BjSEH+!$+k-8!04)m4cfUEMttPl>S{Ih8GL> zcPDzvZPPv_0MwM~!k@i)%lPpgt3Fldj?Im8Ci%Hy2u7nkzz~VXxNrXcnB_bFbF4P? zBC(oqvw|HQ9Q-JNhC&T56s~pBt9bSNKsf*?WHS2s+qaGhGLD@YaOeS`T&Iqt}hhf51r{PdF_0^A)kKMH?N_g zAtiu=>4poLhAd<%_Mb<)t5RWo^oBM^ZJ93W^aO-4SE2`RYp$M=dWncrMhvptoi({ zTkTEN#&Dr+@CGCNnSQ(W?7*1z(uh+ViN)u9tD`Z>IXphWTxJlZ+B^qrcXziOzwB(iolKQEJU)4RlYs#4c@Iy)d7x>ygh#oScO7yfKpms$eYGu;Ch1*zH2x! zj;=Qw{f(7|*(Z5eq_aK4WKhqh{1{_6-9N5<;z*Y{6csrjk$=5&>)Oc!o15HnK{h+Z zB7{IK7wCic>>B;`TNh1-FAf?h15Wpk8BX_)88k{EUR9!tXca;{6pit&Ku9(<6O<#1 z@EpNtZQI9nN+F&r1{ue(Pwww@?r*R6K7H(x>C&iEM;QXcSrV4uvq71#7ihYhtljXRe1vG2r&v6OG~t$F5sz z_ND9VmGT$>PzD5}F;1-z=+6#!RUPjcElmI??4F&i&bziWyE5a-6+^wLB=VIH?y`9T z5&mbdovl7^O(bhFrNW?%?r1T4_q8|7n9Fq0V&oQP!A7Ie16;O^<0pob` z4J{>lwIa5ysb*%+hBe-`)umxV$nxZ42_ZM*B^pI6Q@=!`jG0Td;o(WI`t6?4GLv2tDbpy$ zuckrG*D%Hy-tHaM{r8D0rU`FAk%A`UId;SPI`>^$*Se}o5^G^3hrMFJ<#|2E5_)oq9Bvadmm(s;f7Z8 z%pcATgylTX;taFnuGHKZ0A9N=T=L9`%T;1>2aHmX(GOhL>b!kZqeqbO1+9M-(uRCC z(yuuHAcSmA4>V;svjLgcxf+^H-=MxWb#eQHSywJNLfHL#+s6q3lW|~=Jb$Xr?N9Xd zY<}JTuZXROnQwjk#(_JxG`Z6k91F>3aNW&3V~B>xRg?G)z#G&0K8PCZ1)!mm*Y4zSCj++pm%&) zE5<0vW#a?enx}WRm^}b6=JF{Ye(pq_KNRItwl9rNs=xQbwWXZvTP^NyeQe+0wx()- zw%Aq!F30nHeZES?g1d8F0#+a_@~>VPEX}N!5<&<*y>Fvqz1ipofFY+x^^M;jtDo`( zWj2>j{{26kwus5($UQq+Cmy)5)1i_lvRJudTWPo)W2`n`B`L!TfxC50h2LDN4FkX{ z7lzBTeZ^D4bA+Q$L6LPy81vMH=$GqN;-~huj}ZXTSe$$8+2E0l>K-hyLogOPNn+1>pv{90hruy|5Ys&lp&|`OLA3gL=Z7jLzLdwRUU%%eTa~uPJXVQADl+H@PodZ_N@N&cDIgTCN z*FNqKi?Rt%KzZKkEP4F(^VKY)UZzx+XrjB;ncV1d7k&q8Dpgk zFE`v$wK8T_|k~+c&|-2x7u7AO_inL)b-R%P{{Nz<#)N@GRCYqpTMgD zS1#iy&k@#KSsG9)5?h9T{l`n@A*W}~LSVWLf#;Z9mRK(Lg(9IowjwH5w{`|-Vb38}yh*LVdmZlVBG?#xVzr}>h7_&X}&_k4y zsw8E2IpD^U8<6EPp0(AM2XEQfFbO0wTW|N+^x3|8p1`$Us!6^kuO?iMYl`&L^f2p{a0+$d% z=YTDAU|vqR=7*VWgZd2i)#tZxm!4U1KuLIjB*pRYe(NmPdvOxNN004-HvBbf;hv!xUE~WIWPN#FGK4%>YRvPZP;R$UjUD#P~@@48zdJ~(2 z%eBhc19C6E+iy(i9N64Ai5&CXLi{g8Cl>=s>7n%dIbRS~67E}95_@1(a)EAZtn{VV z35#)Vawenz0HaPN0zjA5sd@AAs1X3nW!muGwmNU7-9pJ70gP& z9iE&~4miCU0NC14;ZY`cbEoPY>#-T4$=O1O#pJhp0`e!`?5?GZfhQchZ&%wmq@UDz z+ptu)jIm!4LgsAVo0sU8G9cxAv2cHXy1xQQtj6BlQRhn6iBU%0yfRV-06L{S)>vT( z|K!zkmeg5<5AAGmG*%kIQvM5V!(!nQLZ+Nf=X06$vL?E-8OY}((?%is=Z2lys}pVw z0KBiI#%0o~<{avH{%pT-awa4PfDM*%-@`ASuAfXE#@Mya?ApJ<;wfY*S7;j+3HKN6 z?d|jC&p8v_Sq$WLl4(Oq-ye?hzd6}g4FEEp(D!d{m`c~bI__4zesS0Y0181y-yL)q zJb|zP0N1zFxbMGV!$daQD-5^q$3On@@3NK8n{KTHT*esw>qJl0Ofolc_vWUF^o_yR zDX-$+-{`W$7%&rz2>x(XCdMg82*J%A^-~A;v^z5QtFAQMCVAA0B^Iz4Im!;Qz|IMih=f3>KZOCB@6gwAmR}xo>qJUPBzcZj zknwa^OV#v8cC4GIG|Wu_N{!ho1(y)=LQPH0Gg+Nw$n3tYr3~iT^ciC~IWVDr?%lzv zU^F(nd?HdxQav{%Mx8QZF4cw)-mugsP~b&^H0&I$?% zELYgJnrARg8cq7(`_|UDw>MS#1dd}%fwRnTyUb?uR|z56zus9S z=d7TRz<@-`&oL8}k52oQHkV&{+3wPLLWw1oOyK}njJn{4no|Fkh6-PGi8czLXmFMZ zZkNyJ`w}5!-rJRw$dY4+l;Jt|qj5@(U9p#pdjm?l+pnDTMHDeg=P0D>tL3tIgGnD~ zHyiz%>P>!)LKe?uTgrcC*$Tlun(V0yf(qmqW2N9y%E*gd!&UPNlVa2;qZXq!)LdB- zY^f{>RvJ_}kEt&goMOPGls<2sm&g_~nE&lklgVUHh@waV%x0Vz zoBL}<>2T6Tsw^EqE*&ZTbV-|MiiD5=V=PDr2{OjKjImLU7_ORU}0Wj0fhLN zC$QUhYs?doi_$xH03a~?_rOZ*s;|X-$l&qHz(dE`+QZAt%?j}H@)ERja&WgWbFmV1 zcC$&}mth0|c0l>1+*|LAJ(y23vu^6S`w#T_Uem^Wdeb9uKY4j*pS8gwA|%hltDH#k zM_4EZ&kRkfH*(?82)Jl)@I`p8gs@a+loa1*625rc3j=CB9Bg?dLREHL`Ex(#tjpY{ zM$OEYAIU!&jfW4CAwTwgwwntZhtXeAMJG^kxu7>6(m~#klMYyzO=r#*LgDC9FdNoZ zKJE(EX^=T7VVdj+@L3No0qpfb)J<};B~{8P+9~nKgW~mzf{havCF8qFse1*Af_NQ{fJVM!0&}Z}1`#g{&Z`Zf8vX`JY?(BU`un&jYL$a&5xdO~o;!ME`u5F4 zd=Za;m!u#`ua)XJS`EDJB0vLgUKxOrOW$S=D) z^sd)w?x5El_Hz*IC-DF!w$tq*Y>ogd9jv1f>^gLz zz`jrz>hQJ9$b#)|ule!AvWQNVuw|o!y@#@%JZjodQ*qzGS@i&>g?lYVj(z726u73` z`yT*pI2~tY&7-#n&z%j{qQyNfEp{S6w`b9ZX`NDjLVNK!;M>JYLHQQ(QzsB4+JU_9 zfasc2kedvScL3dHuGA(3_7c6t3`FPBm9|j(^qUnK77WC5FYGz%J*?X6T~E-H580R){g%th^t2eOJy! zC+Fnjw(;Y&BELsi?bza_4X|3A4PvbfhI51KZ{G}C*O9@;Hn_*6ABo<6ynT`ECTQq2 zUP(}Fk|*_=8hCo~r%60YGk?npm?vPTJNLfsg8m$*Q%*SIT^RtRF8vyanW z!`57ubJE^Hfpb9(pD6Fu5p?tj^r&ez;WF3^C>7#FvE#KYpT(7ynZVB8gw+Ub@+cY; zz}d=LZl=J3p3h}B!k#Couz%kdstq&Rb{IXrZRmz3sbaC6U2F#;AHmLz6)S_fs&3N0HhZ=jldtg0Qi8+v@?LGbi$BNt=WsBaQ9#Z3F=OdysUL;887MVuuA1cEU5D#v7tP|ZwQaWk#r)p>3B1D{U#Hr2c7xD`*W94T0msMCSUkTK41t0V z>LbA_ANaq**0)qA%I=UC^9i&-(kVs={i> z-!H2mB?UQGYr!)ejLZn{9Y8H_-*?Wt{&uF)wORN^$O1 zyro&rD@jTccWJOlEI4;tqd1Nk%Fsk@V|=z!1-1rek5yYl4`AK3?rasl5MlgE@@xJb z{%}JHT~tvz;Px7WglDT?CiD>KrRXGW$XAC#G?vJBmDPTM>V_@j1w(N!HuFdW0(b|B z(@w9_Rr04PuLFIO<-D_kKINja=aZ-KF+tVNF5VfJo^k!h{`W*)Ic8yzmbSX%hw3ox zj9>c9l}(P_dbDLG)m8A@iMx$ALbzxWU<~z@j@|R6NR4$0=`JSFbPN#`AB~Vc>5uK!yje$b`s;QZaR{9L!80sV zm%$#2ppiT5SaQt#f)ZDF8>j^i!gh4Hyz5)nlxwP+L37T@oKzKM+U}pRCt-_KMz>TV za*wgwuTGu?(9frB%WIq-%&wrrt%ihihCt14GvZ%}s zp@}$4z5IUAQH*|$vU*>4*r*Nm@8CoQ-lKYLiPNs`@GO877eegETodXux?Mj$dK^%D zy=p<*zz7>MVUtA}seb-EK$EO0A$W6)mpmUx_3*P2K0JL0d0`^&synsvU2K&`9h|TB zMX$f4F$q=m{CgdL4V@NBRmbn^&l-nVBK&tR<%A$74FZ8Ngb&^RBVnd__nG_>rwnKzcagJ>T|;C?Z#GcHBvEZOf;Yk`~AM{VgyUiJK$D4RchjeU$0 zIa+ow`rwm=9e2IvoO3+U#H`yYkuxGDsctc829|vF1Id84ZUXSM6C^-}?pwj!91lOe z1nOM}_o{evKnj_<7g&5YaXSIGj7bg$kJXyoM!E7^13cPZte7|8()LA4G-Q26HH1Ap za(J6V0M9C(7ar=*cfxw5KV?Bgf>}+PQMAmFTX*)4eZ+4(gxCO0PFXZFL&I9LCxwP= zAG@{6+2IMw$zIz3<1JD9H{o8Yd#iReZO&)vR?JVmtYi23vh$w=J1XKBN-_Nz`vWgH z$Ct1pAdBLqB(Uu(kYx^1(=o9Ud$#fO2L&7b&|RPlZUVMK*y~ut8&Ve5jy~b;50hc# zfd`Z(3+}jR6l+K8WVGqR{DWOTPeR4$)#ep#TOZ>lHm4&`EYqWsR>RU=u?agL7XA65 zXw}tq<|~(d)BUI&A;>YKyu2+2Y8f50jOf4*QWsoo3~z@HYJIqVD2&W!b*Cr`Y|>9g zp5JnLL^{YDY2G7KUwR=b>1K=TXCn1cAIj3Xf1lhORjM#ma{@pQq&_kaF1(vs*f#p( zjBWncMk|GmbIwXUi2UnbXQ6_baPy{KhVIp01N7$T0SSRs8a{KXlnOQ06L)L5sm=@XnR za1}SWW1u`Xi$yTpvO+J>APqd7oPp9VYW!ON`k3qSUeCwwxy`Th_{(GZkMkryvmnn` zDiqI6cY^&62ll(@CXShtolzV#GAosn|AMzG#d@st7WdA*Ih&(nT~e`3Pmr;n7s_S7 zuLUTW7dR(!YG0J%E@-Sory4%}@Y6~KGcF?oq7iRx`?F=mYo9`6L zu(5$mWC%rYBHd|K?`-Bejj!~7x_y5K^np&9P<{ZvgVhsacHW>5ujW!Jzfs(r^p4G` z9NceU?xu;^>t6RW>6}nB=~favczA0WbXIpoOunb8O$fbljW}Phq#)xDReyGoXK}l#H18DGN+6D^=DqgW_9Rd0IS+xcJ4q2Vbn)MCVscUoWFXS zWn6nmF(ITa`}R3N+G?Xf5!#0X^ynk?Qf#+>o9<745x$Iqxo9h=LC7K_wH)W0nd)x$ zC3k(!J_*fHY+41e%{fmTOEsC4zUFH7el+RwTVQ9s)%0Wr_m!>E>c!mgYAQxTVY6w2jKia8dIQmW8dAzA2fW?~DWdsw zh-8$hcZxZ>ir}+G7ifvV-`*!g0fEN;o1Dh~g~+!_F!{H);MsC(@7=|obd->a>{|hx z|9Ci-ZO0Ct>yMDh(`S#R0;Qx1xr}_?v=42Nn;sS-kA9!u+`DR8&u@KQT4%h-%9>-j zC6EOCx4%LLvTM%{K{D^vaUJptBR-QB*OaD;-Rmt&Yrew78F zm|wrPO*NbcO*;9Fd`IhwF5PbUh0d2>DyW8Hx5}uz<#dMm$X~_(S-;*}Np~HvA`!VW z)}h{rVP_6o980{Z-?XR_2>{aoKHFI!!5g7OEL|k)$NW6@<~a*AL_>eA3Y#vgKSX<> z3Cogi&Wne=y*lwm!uqV*(nyGlo^fa?$tbJ$K)e~w?8(A^s=ZKYiH#Sk{Q2?SxXnFB z^4oz=-)({V^I(*i2dhLiLw4Ln?H9K=J7tSY#pu@y*CJ*VoN|E7)h`n;YC+TNE+->D z>Aue0K+=`{?o9v3FlZEup|&!w)*sFi_q!Yt#fX!-bE}H&6B5h~*F^oKB(NEl|t1G6Zpop}3t_#IYGX+r@bq{YgUS;izGMztoQFpji zX_A1=myEUQrf)$jaaXN-BXRV_oo0jWRo}CMLkfq2rPD+hAi+%lXZO4KedcdpHgj-) zPo7DMeJ$QPo@G++j%0Ya~6Y5QeD-ciw z^H^is>-<(V$ZZ_~?x=AUB0laj-Fw9~{A*6!c2XN&_XTDlLk@3hac#e;-{)8# z3Upk)_6(sz^q8L^xv*YlUg2DKJtq-d5L_DYXd4n7n^opeSk*~GR?EL*Xpfn1vGeCs zXHx{%fUu&CpRhd9V7h;rXBiTxkOE3GcxvFTa(9abat8C zI|lfd0*E{~ldb*R3C%{CO-6Md)6WH|KThdG_I|=sNms>-q_my@Q^XVfQ#)cLYC>Bj>5I0X zg*kM8D2n@zScuF;eG_AsZ#~q$ zBiJ}p7IA2Ns|?(G;Q2{Hn*q5=lbF?pr}6jUt~cOdeOkE~!uH35cZk(xk&b-1W+Y<5 zQEe3Qv9>e+J^X%p_DtXvA-oNCh#*3N2G$d=N3;#iTCB@*&0443?zFy#${hi|r zgfNfKi#IkJzz2E!w=H9n+S=Y(Bza*xm*s;u49{2BDds2D2w_?3Hg7ueR{Tc9#V-Zh za1%Q+`b#7NOt=B`7%SKh5E#zCgd&44TL}Sw+m1=rrvX~S^Z+@tO!YnXIWCj8BO?i& zL0+08YHWg$SRb7FU zT~O-C@`J=K+wH#W67GnhBlXSHna@4zmc3?AzvXg9wHb}a++Cb$0M>Jm={-61rm&rx zYkBh18=!Q2E*V-oU%wvhlil!2N+V(9#Ym*xPkWuis-2?Aqh$z0sCAJR*99Kk%5|#l z@ao|7*{PLt`rqJD{d?x9xu3JYih>TZFGQRBV^b^cL zWp972#)6x!!d%l@PKHuRm&cr%9ajmkc<@YMOYG;(-jp%(XVg6Kf?9mF3~_v&`yS?_ z86tg8yN_wchyaO?i*x*F*Y23QY3ED1{Sl1(<{5DX^f_q=hX@Xd#-H=HSRH17Y(_2y zssP`&89X`e_WT+*og!ip`r>zpF7KuONmXZBDvm0YI+qJ0b0p{ona+At$7zVMEgRAx zy@TsJk6`OQkxc6eaB_=(`$w}RNxzmP6&|Wu;ip;Py4WAX;%NXC8X$#RqB4~2WHQ)* zd(93i>R;&0&NgN&`P=(k$dPO?vSFDkMyI=@C!36uA9L?{S`4{9-`vy)k^{T!4+MbE zy9(ub&k~&}?62HL=EVFrNrBO_J$-xtQ*G_#yg86;#A$iph<-CIiN>dm2~TK3Uj}<$ z>JKlMV%)y#-x(2yH}|at_Ft>|6{`qtlamzIn01Wl$<&veM$L*nK3ltYzbY^LBN%uE z#5&>JUbm#rET2Y!P8P&CA0g%;VR*E14>ZqSzORkaHr;?gdf6sG!Ojpj&;;bP*cJ>3x$x2&H)ayd?3YA!N?M&@fcneUK zakl3Kb9gUC8`s|r8Pg*dA}=w4Y034ut;UNvdZK37rGd;_LI57JUj{BJdy7J3k*w~~ z$Pb4;0tl%W|5+yKi1<-p%)^-;v7A6NeWeLy;a=uX$|5bl0PLGKKm60f9jQVSV#D+q6O=V<|dgl5IPPa#1QJmppTI|lHA`|u$!-!A6#Ey zxZ&CGTueGao!KM_0c`$dkelm3kcNkF{NqpisGK#}X}7>*Tp-7JrB?_SAYMkNzv^l~ z)#-V)ywiebW5s&Ar6P8+;noX{Ih#y!xi}=;Z#m%vyI*qD-y&l$xsVB7R4+%yRPKXU zhwBzido?mAfp{t~Oo6F&+?x>;5JNCmzkWUqaP>JoRbj_XY5XQMCPJ_8cbfrIpnYQ^ zVZ%)*g6w~@*x%M1%I1GSbiI?z)|rVRqgoFsengA2An^(>RJ)*tFYZi4c^kub6i^OV zj46R<3W`-0C|vm4XxuB$IKy1$0PZvnEy+TSoin4rOZRXKRklalm87T?!dZPNTaQp+ zElcvP*(SRi^7bbG9|MGlF{Y&*u=6AVhYR4hg%H2Aht` zAa_q%1LwYYUu{`3Rm4jKSQE^oA5-9Tp}E+-{IfhO)}%s3-`fg$^= zD}GCPU4a(_n=H}K*BdIYfHx{rlC|^E;!0XT0=5yxq8v(nNEe#dMXr5ze#T3yF5cgw z?HFiaSxUGXsJBlYfnF%>$fKG!l{vDVg=Z}uQKp_Qj8^DwrSB4zZDVO3fh(>EYEDjT zVHfkLtY3-x@4Im*_LQOI1HZPeH6v9=J!MyZv6hx;LvoGvxZvwajeFg|qE;g2UBFJZHZH!?z|2#wOEL0j-Dl05SC?fJvvO%EJ~vj7q)Lur`9VKEk{!^<(AD~5W#@wy0HN7<9&}$OaCoGux&o+` zw!>YD*Hkn~uMZI6&y50KhkcQ#UG0cEHB>O9*lMW1s`~QUbMHim`B&iWrk(%g!fm7g z1@~w>#k|B%j$&;H&g2t}AK>wqnZklAgq7oV1n@Om+wM8b_x{?&y)w$L`^mn{T zv6`;5D@aol$qrGIgc zN8-8bCN@Z%0smX=l^+X+*%T_(!~%TM`xX9S?GB22Q+iN_bmZ5$80Wb|eg7Mb35Hvu zM?TS5SBlEEu5oX>U+$ERA0G~JHsr;+5Xr_F5z^|zL=nSep&y7;bMxQ>&^y6Lk6e1^ALJX647u*Y@)ba`q3*+=KQ)%}_U@(9Q;Z1ac?fL@(D* zEdh)zO2dN>Nd28;nV=t>i^9|}?72d*-Ipj7O5hfV;E%oU1fYbLjBli@`zO{XxFNmC zWj>^nH{ML=k2rgLajWC*Q6VvZyg?YRJ}&?wXda&1X3WHy9T+v;}2yC`exWu0&ky>KYvt z`av|Hq{Ie>eFi^uw~ZQ2R<$)yh&}V=pt9#v%a)3UG4iVulhmISMx?oaU;+2Y3+Jzb z+s7sNsTR~E^~W;d^_BF&*dS|8am|@3FT%+?e}Y!;J;>q3lm6h&ZXLrDHmXprnzEVm z>>?omkQ__NT+*_!{5XS6^&{L;pEH!v1xNa0&QdS+a*XK> z;am)$zP8^PK^BGyW-57qGbWRjuHCrcI8m%KOLb$p+MhV2Vf_(rd$Rk0M=M|{CK-`Q z;JOPB0clHz5+q%^Kde#Ub(vJ~bNM4)yPV7fDMpSi=j)t6^o68~q-v7wF`I6!EI&{Q zaH;BHSDvW8LWkAOEViZ7HlSna;#qe?*6_9Jo`F>DMh5J{rs7JQB6Z<^_X3bWpAL&P zL*ZQtlCvH=Cl|9dF)KxxXLav4Ul35%G)tY`uOl$)=Uhhjqq<#*Mh>)M`|#l&&q7M= zmhLvgNDaeITH<|U5WLq|3gR}Dl?0-SaW}vI!H@sEd7^xdmn@ZW-TUJ6Mr|}%2n&)R z{3{DKqLYn8y3#=vI(woWOF#7Hdi}2LBT3sO&wlBb19l}zT=(9Mw$E*8h9)&koXJG_ zt<3UhW*}}5=ow15&3Lz(4Xsy^sFhLL6eY*t$I!~qdHxEg?P_PYd;@ptkY!?htjdPjjDkO%OGl?&KoEMEZNP^kVU2KH%Ev>fVq zLM|s60(urL5Z&;UYr4kkMI`}S+q%f?-RchgUru|H`4WZdt#ks-biHE!5s3lZEx%Y#%0Cb+)+a@HTaJ9YX7o$F6%SmxTR)dW zCAgI6nM-A)_a*N?l1QIv=d4g5azQ*7TKRS$6a7B-kSQXaky(w&=!zI^n0RH_j~i5s zGlJP}_`VbPrEBZ2ZznUF5aaPfCTNCAUNAbYOeI;Y?kNSwi7V}TZ&ChZ&DYyslS6Ko zqeEUX#DbFZcVcV!>yz?ZUzKWeX<4$sUy1@RJ<%~Cqv5o6E$4=A?%@L55HdW!GDk^odXvNT@j*(Xabp%*1SMNWg*IH!*sLk_2$qyplO?R>hpDvQy ztW06;m1i>Q1#Z>c8`dOe?O%!rMjoaMG*Q_|;HLc1QL1k6Xi3X&l`2KD76FUoj%s6n z1M$cCt}EOnf>~b5l5rE5=!JvwC^x$47W|7M&2yc-XfIu2NT*RPF>sUM2%+U69qp-nZ5 zS>(Vs0)xz@oCzOphYut|?Zk)-{Ab!=2nl_d@3b8~Sj=sDyK@unE(zC7I~Gw!_|G9MwM+oOVB4N}??IcU_*%oxs8rT`q;P=p0`&=%hf% z*PlR~?GMVv^n3G7Sxmr|@+819E!T@H&=hf@o5baI8CY3BFYr8y!0WN!kH;ER{RRL6tFOzmxL;FcK>lb$4rb#{ z=~RHj0?v>)+S`eFwqyX{XW2XcywS;IjWKTMlzVO>U+h=fKi@q z+MBx5m&d{3+9}-bTT74%V;9^I8U~N2Ao3~}C$-8}+%TOfv*CBr+Pn`M+Ss8f7Srxg znSSIPg7gdXfb8+tG;Kc<1XF#&n!Tlo1OqTD{#RPg&~JqX0Kc^i`Rmp_4%u_Tm;PlP zIZwx-1p^!u(O?cuVdNVE!PbTE7TFvet{2;hS80~=gV^xz3e7{BL?ferc}(bWK9MV? zSdb`EEKlwF43Y#s;{D!Er++sP=)xCslzEgYj7uFne37#l^(fbF>|TEG-su$B2A>sq$pHFf^P=GhG{WM$C9N|!m;;Z z5_~lKg8-QCKM7vKH>i(GsyHG71Yas1mforeUWk*mGDlNTzm|41dPmL;x#3@*%22n1 zkk$pN;gfLp6#9B(ccDq)EhzhhE0y;m2UhPz0nN`{`Julpqjm7xJCnOQ&;;ppL)K@L z(qMQeTPB82Rb3^oOwFi;Rh)dFyQ#Q1roT@kB^r`D^Ka|^aAX(p%OfJD70qJu#2|Xg}B?8+s)AO*uz&|7P)L)4Z0X!?G^{4(>~N_lhN?D%%`5 zUU|7QPKUl7#H5q6GC%GCtGtmZS53VF#tg%G;W$B(8J*!l#d*68qf30?3kwg&SBu9} zZ~PzYStVB~V^v$})L#hDtUR-l1x{=7vC0FMJV)6LO?0;%mi0h5E-^&nM-9sJV~KLb zS|8}5oo#elF`1yW*3=uRjLE1@o@**lkx~LUjM9Joclf45%)1@~S!Y$d*>S+# zIzB8}HLor!xc&)SFoo2eqN&~P-_%Po> zrwtlxspH5A$CGf}z05(9wJ^V8(znH`awJLwa^p*M7nxUhL*#l`C0Eq$rLwAs93 zw|kTuvypxBpCTtn5p73^jaqw=d#`DAcAJ1e%N+)OzB8P&pK*cd&sL*1{-6KOQndlV zloW=Bc{6up=SD^Exk{+R;6fOuM>@ED&|6^z?Z~XdXnS|J-$0o6MPk4+dgO0M9Q@H^ zH^HaiL{Jh7kf%{Pa&s;AN>Fb1GdyUlc;~P0L+8K6x4vP2%Wk330^4uaF6cUxl3hPh zJXS@CS2R)W41J9ZpF4^VeYRU zrVM){8~r=*Xm+3iR@&Lj5~Ggp%yMHf@(W~@z9kOS`^^xnnIQsqRCv@{-MHMBM`*~z zvim%q|2p3nBX;FCdO&PzQF9l6LtaXfrG?=L7JWwF%o07fs8q%;@@D7-G;W8iHu3Rw zoEzsxWoMS!Ob1$XzxQ3lO3R>4@KC|ib5=?0pU&8$dAFEmhu>^Cn8=t2WDA_p;kTmkz4=AEXRd$m1o@Vy;>WY1R<9g_CH@yK$03jl1)$lp z-@t!y)m5o*nHwj#6GpDJrwwTV#hd;!6-+29eO^o54h6~lpluwWnf zT!w(2?~&CX7KdXL$O^(YQpU`}L3w8EAyQG*;<^>Dk$Tg9XrXRE`O@R-+7<5^ z9X9sLHGCLg*W`RTCln>GRVW-KaO8&%7)Z%aliR$zp!r3PEHXPwHgQO`D({6^h+g!i zVTsNVd^zWR1p@rhpbp?#+nizZ!0`{o&cB%=HOY zF^RAWGR8M8T2mL5>yEO(Hw7zCyBBpal$Nx|z%Cd$oO|8QHg+hjBb|HDnr!WVXqJzj z9GK;Zt=Qfh99to`&(x zn5_aK92Y7_PP*Zi=#qsin$i&Z$m-c|EL=KI@Hu>zG;2FL-u0d>?$Y?iDRXP0-v60d zbaC&FNzyOGWM^D~xQ?Q5a{_AtNTWvPRTbE4xknqD@Lz0gA=mH!-0DIS$ShyJJ*9Cy zHxS^#CAA=K_=J}ddlf`s(3+&5f4f+^(J%_I7cjo?Y@QtVXe?c)o;4l3c(G_(YWbX8VbU`pZ*9%sXMt`ooRWq1up{ARUU7@@%^i~O7{ zaULtb?J@vEFwn=ifDhjT42)=lUJ>g!3XutyQUDQ{gz#vI4R~)@MoN#Nb{>w-hIHS* zmBATs1}~a)ddzOeuFxYIVt>+*yc!n#+e}d9Oigq=&5zBkrXDjuR7UpPwE^^a4Y^;l! z>)c)*6l-@0@qLDxM%|ddnUdGG495=8Z&{adc|VG@m> z>)0<#X(2UB?f6%3a?xwIn-COEJ|55B1HB?lmZ9EV?LRhDA?dSPTM=!%#DxU@Q64GL(1GhI|-9n+)@5LD%+VIt5wQF@DO;PO^l!(=}AQjt^hG&lP7`UCcC zSMPO${I!<7`4FXEb^WHX$%LdliwvyqI{vO_HcxnOYABhF5O}eJ1r?5R+#1rY1S`}q zHYQ7L@)d>i#GoCZ8#lEn59q0&(rYR-y5k^%8fAiuEQId4dk4K zrlIqt1>5h-`c}+<$S9g*XfCHu8i+5}mGFl#hTRr;ZppOVQdFr2i!O_nH`Ii>w(7`#boMO+x)fPDtDH z(D`q8;QKc3yKf$_qortv>Fl1f(Oz9u8q|JgQoZk)%TWr7`^qlNn3&(5e|NJPU|T=m zs`9b=`XQ#c4{C%=uuhV)D=ld@J_yOHluv!DBQ3`es3J)zim%>6h^ z*@p9>{76&$>5%%)Mcr0v`fLLDp6DQks`2Oz*Ln>k1=4{fOs2@A(HXgHb?Fx8VaCpdHKo!z3J2_9@`}_J&1#JqB|L zA*np=t#!qk%^>F3z*&116mUJzW^$~077a3eNtwI;Je_?zw1MBTe1oHjmk@zOLs9ccmM};5< zpG39T%XBEI6l@>rl)Ls`h0zKbtc)Lj%u=j>L7I11D{JNm(AGqH~abZOGp`V$P<2v-#-dR{r8`DyHXMg#nIy0~Y`}V0s8K z%Zxe9U0Wk5#+nWF-yYxiH-<-a%JJu zm=$ti#{NJ1%L%4g)nc>f-wa}AlwptA2(Q0{#?xXy`ffxiU){Jc>|USE6F`fRTQKIk zhVT_`rGNCBMuiRk2RsQ?_dMk;`QrzSilO^I?+q?5U?*XQ90VxAh@Tkg%;FMlGYsIR zyf2gAK9JWY{!NzsTN@Imit7}F>lwxO@7nJ*{+Q_}f~4Xtv52;5Kla^x^CtD#hA1n6 z$iW!FIm^bn(>(fa^F6Ce7mCotANIn&7b9uGCEz^Ex~hGr^5U0LEPE+Cp(4t!=Wvi> zRvF8??)qZfDE`W?7E`U?IX;C=ySA+G#TYrFT*6z0@cuP6Bfc8>lO;eO;OkmJD8IJg zt|iS(yW*`7@39J2Z2tT;KE(U4eSPs5W#C=%8Yq=efe!(bs zFfzY$;{3HyE@rEL)h)X?2KZE&uE$;5uzg*ClE#;P1-J6k4G9G_4%n5~E zE>VXfVvtYmYKG)bG4Fht;Up8UZK(FNqe-F^RB@!c=+NeSD%ef&{8gMQZgM4`e}dX? zM74BPU?DpK^=mH;hwDGZ?KB8EH2uq5{cQf6t<}a737Ct*lF z0lZ~zzI^6jEW*tRb%+dnGWLgN_Vy@Bf*D`xwTS>ua<)16mY*Z$lx-*=&TqP5j15TgEUrPP? zG%|z?33W)Tmbs5zXJ}|L%SyU!Fbd@mpQ7+d+ncb)z;EoQY3UeE(vVqB$GUguz&>=qvXlXOBaBKe^Ky8jec@K5a|_BI4Rh)YU^Tfpl{5;!Nb zW!`eKYwcmt1lDhGIXLT!-du77=3og38GI#TsOh2!>8QQ_4c)T}nlAM!hDrs3US z(B-iaoZnUJ?O~7}@bGGBM#IpY(~74z5oOg&_QEdwKXUr{wc5?8D6^&;7s_w*W|reV ze6OaN9zI_AiEt7fr`5TW?`lgk+3X!sh<+!rP4qS4ijkYbtbPLeMH^Bj;~JB?*yXYY zqhf=qg7@l+cYV=sU0Yzv*t$xG{`}=^bCB!wj}B|zyLZ^)yk|A*$NUt%A?-Duqj_Wc zj8lo=Q~`!$68i_Gw}3uz21xIv_SWi~VoEM2$+#p{PId4w>>V=E9n*F$9Z@P&HwP&y ztITXsq!D*1NKUxA`a-lV68b?K-&Dk|<-cqJbHZb~6k(-DW6`q~oStwsgIWt_dR)aliMd#u#?xgx)T!0tjHV%rKE^&@a=h534*a6$Fxf)T zZT~RS_NDE{o_v>>y5U!n510kmHw4YuI$ri`^#SqPkpF*x#t>&#G41FpMU~o6<_OvD$@k+Y{C#Au(;RSa|qtJcK z>e8>$_qg&~&E&3yV?B<)v&{S&*L(^3XD!8fq-*uZt-JLd+yYcHK20Mo<6rcK1Zt{k zQ`()@9)I>*#V&72x{p(Cc#mqy7euY%-SQN3;4kfd+2(e@y=5UBk*M3hIeBA~ueqj> zy6P`k{>yC}ef@tR?Pbn|75lm~^_=s6hchaZ8>~SgoHtyF)e(m;=Z0JdVGV&CuLTWC zYm6oDGnTegZC<${ZxXLCc#F|hG1q@#hY?etsNC}&o=!7}_rc2(sp^1Z+xpHtbrskk z)VOqWWLp_gEc3eQbNi5MK8&})TuWCvA{9}1@_2GTr{;Glq9h9wpMO!{ypu|j>_l9t zsK9iK0)38O?v1Qr3>fS*JD?Ur^p;W3s^K0(GR9sU#RVjCv&SZJ6<^qq1Xh2pju(I1 zKVIF1?nI)xTMi9v;)-QdO7n!GcgTANlqE~2-(gUZ^m7+Mk?dm}g6fg_`y~=tzW9`A?E|Ehu)P rx1{%_N++DOw;gJC+%TXczkvMu{)x)WXEy*d9-#b6<7KJ5Y0&=wR9@;L literal 0 HcmV?d00001 diff --git a/qml/licenses/lgpl-2.1.html b/qml/licenses/lgpl-2.1.html new file mode 100644 index 0000000..dce7fa5 --- /dev/null +++ b/qml/licenses/lgpl-2.1.html @@ -0,0 +1,616 @@ + + + + GNU Lesser General Public License v2.1 - GNU Project - Free Software Foundation (FSF) + + + +

    GNU LESSER GENERAL PUBLIC LICENSE

    +

    +Version 2.1, February 1999 +

    + +
    Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    +51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +Everyone is permitted to copy and distribute verbatim copies
    +of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    + + +

    Preamble

    + +

    + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. +

    +

    + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. +

    +

    + When we speak of free software, we are referring to freedom of use, +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 this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. +

    +

    + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. +

    +

    + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. +

    +

    + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. +

    +

    + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. +

    +

    + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. +

    +

    + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. +

    +

    + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. +

    +

    + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. +

    +

    + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. +

    +

    + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. +

    +

    + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. +

    +

    + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. +

    + +

    TERMS AND CONDITIONS FOR COPYING, +DISTRIBUTION AND MODIFICATION

    + + +

    +0. +This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". +

    +

    + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. +

    +

    + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) +

    +

    + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. +

    +

    + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. +

    +

    +1. +You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. +

    +

    + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. +

    +

    +2. +You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: +

    + +
      +
    • a) + The modified work must itself be a software library.
    • +
    • b) + You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change.
    • + +
    • c) + You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License.
    • + +
    • d) + If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. +

      + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.)

    • +
    + +

    +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Library, and can be +reasonably considered independent and separate works in themselves, then +this License, and its terms, do not apply to those sections when you +distribute them as separate works. But when you distribute the same +sections as part of a whole which is a work based on the Library, the +distribution of the whole must be on the terms of this License, whose +permissions for other licensees extend to the entire whole, and thus to +each and every part regardless of who wrote it. +

    +

    +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise +the right to control the distribution of derivative or collective works +based on the Library. +

    +

    +In addition, mere aggregation of another work not based on the Library with +the Library (or with a work based on the Library) on a volume of a storage +or distribution medium does not bring the other work under the scope of +this License. +

    +

    +3. +You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. +

    +

    + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. +

    +

    + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. +

    +

    +4. +You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. +

    +

    + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. +

    +

    +5. +A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. +

    +

    + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. +

    +

    + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. +

    +

    + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) +

    +

    + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. +

    +

    +6. +As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. +

    +

    + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: +

    + +
      +
    • a) Accompany the work with the complete + corresponding machine-readable source code for the Library + including whatever changes were used in the work (which must be + distributed under Sections 1 and 2 above); and, if the work is an + executable linked with the Library, with the complete + machine-readable "work that uses the Library", as object code + and/or source code, so that the user can modify the Library and + then relink to produce a modified executable containing the + modified Library. (It is understood that the user who changes the + contents of definitions files in the Library will not necessarily + be able to recompile the application to use the modified + definitions.)
    • + +
    • b) Use a suitable shared library mechanism + for linking with the Library. A suitable mechanism is one that + (1) uses at run time a copy of the library already present on the + user's computer system, rather than copying library functions into + the executable, and (2) will operate properly with a modified + version of the library, if the user installs one, as long as the + modified version is interface-compatible with the version that the + work was made with.
    • + +
    • c) Accompany the work with a written offer, + valid for at least three years, to give the same user the + materials specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution.
    • + +
    • d) If distribution of the work is made by + offering access to copy from a designated place, offer equivalent + access to copy the above specified materials from the same + place.
    • + +
    • e) Verify that the user has already received + a copy of these materials or that you have already sent this user + a copy.
    • +
    + +

    + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. +

    +

    + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. +

    +

    +7. You may place library facilities that are a work +based on the Library side-by-side in a single library together with +other library facilities not covered by this License, and distribute +such a combined library, provided that the separate distribution of +the work based on the Library and of the other library facilities is +otherwise permitted, and provided that you do these two things: +

    + +
      +
    • a) Accompany the combined library with a copy + of the same work based on the Library, uncombined with any other + library facilities. This must be distributed under the terms of + the Sections above.
    • + +
    • b) Give prominent notice with the combined + library of the fact that part of it is a work based on the + Library, and explaining where to find the accompanying uncombined + form of the same work.
    • +
    + +

    +8. You may not copy, modify, sublicense, link with, +or distribute the Library except as expressly provided under this +License. Any attempt otherwise to copy, modify, sublicense, link +with, or distribute the Library is void, and will automatically +terminate your rights under this License. However, parties who have +received copies, or rights, from you under this License will not have +their licenses terminated so long as such parties remain in full +compliance. +

    +

    +9. +You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. +

    +

    +10. +Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. +

    +

    +11. +If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. +

    +

    +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. +

    +

    +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. +

    +

    +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. +

    +

    +12. +If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. +

    +

    +13. +The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. +

    +

    +14. +If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. +

    +

    +NO WARRANTY +

    +

    +15. +BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +

    +

    +16. +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +

    + +

    END OF TERMS AND CONDITIONS

    + +

    How to Apply These Terms to Your New +Libraries

    +

    + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). +

    +

    + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. +

    + +
    one line to give the library's name and an idea of what it does.
    +Copyright (C) year  name of author
    +
    +This library is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +This library 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
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with this library; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    + +

    +Also add information on how to contact you by electronic and paper mail. +

    +

    +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: +

    + +
    Yoyodyne, Inc., hereby disclaims all copyright interest in
    +the library `Frob' (a library for tweaking knobs) written
    +by James Random Hacker.
    +
    +signature of Ty Coon, 1 April 1990
    +Ty Coon, President of Vice
    +
    + +

    +That's all there is to it!

    + + + diff --git a/qml/pages/AboutPage.qml b/qml/pages/AboutPage.qml new file mode 100644 index 0000000..f2c2a35 --- /dev/null +++ b/qml/pages/AboutPage.qml @@ -0,0 +1,97 @@ +import QtQuick 2.6 +import Sailfish.Silica 1.0 + +import "../components" + +Page { + id: page + + // The effective value will be restricted by ApplicationWindow.allowedOrientations + allowedOrientations: Orientation.All + + SilicaFlickable { + anchors.fill: parent + contentHeight: content.height + Column { + id: content + width: parent.width + PageHeader { + title: qsTr("About Sailfin") + } + Image { + anchors.horizontalCenter: parent.horizontalCenter + source: Qt.resolvedUrl("../icon.png") + } + + Item { width: 1; height: Theme.paddingLarge } + + Label { + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: Theme.horizontalPageMargin + anchors.rightMargin: Theme.horizontalPageMargin + wrapMode: Text.WordWrap + text: "

    Sailfin version 0.1.0
    " + + "Copyright © Chris Josten 2020

    " + + "

    Sailfin is Free Software licensed under the LGPL-v2.1 or later, at your choice. " + + "Parts of the code of Sailfin are from other libraries. View their licenses here.

    " + textFormat: Text.StyledText + color: Theme.secondaryHighlightColor + linkColor: Theme.primaryColor + onLinkActivated: { + switch(link) { + case "lgpl": + pageStack.push(licensePage) + break; + case "3rdparty": + pageStack.push(Qt.resolvedUrl("LegalPage.qml")) + break; + } + } + } + + } + VerticalScrollDecorator {} + } + + Component { + id: licensePage + + Page { + allowedOrientations: Orientation.All + SilicaFlickable { + anchors.fill: parent + contentHeight: content.height + PullDownMenu { + MenuItem { + text: qsTr("Open externally") + onClicked: Qt.openUrlExternally(Qt.resolvedUrl("../licenses/lgpl-2.1.html")) + } + } + VerticalScrollDecorator {} + Column { + id: content + width: parent.width + PageHeader { + title: qsTr("LGPL 2.1 License") + } + PlainLabel { + id: licenseLabel + + Component.onCompleted: { + var xhr = new XMLHttpRequest; + xhr.open("GET", Qt.resolvedUrl("../licenses/lgpl-2.1.html")); // set Method and File + xhr.onreadystatechange = function () { + if (xhr.readyState === XMLHttpRequest.DONE){ // if request_status == DONE + licenseLabel.text = xhr.responseText; + } + } + xhr.send(); // begin the request + } + } + } + } + + } + } +} diff --git a/qml/pages/DetailPage.qml b/qml/pages/DetailPage.qml index f649e8b..b66167f 100644 --- a/qml/pages/DetailPage.qml +++ b/qml/pages/DetailPage.qml @@ -30,7 +30,7 @@ Page { if (_backdropImages && _backdropImages.length > 0) { var rand = Math.floor(Math.random() * (_backdropImages.length - 0.001)) console.log("Random: ", rand) - backdrop.source = ApiClient.baseUrl + "/Items/" + itemId + "/Images/Backdrop/" + rand + "?tag=" + _backdropImages[rand] + backdrop.source = ApiClient.baseUrl + "/Items/" + itemId + "/Images/Backdrop/" + rand + "?tag=" + _backdropImages[rand] + "&maxHeight" + height } else if (_parentBackdropImages && _parentBackdropImages.length > 0) { console.log(parentId) backdrop.source = ApiClient.baseUrl + "/Items/" + itemData.ParentBackdropItemId + "/Images/Backdrop/0?tag=" + _parentBackdropImages[0] @@ -89,6 +89,12 @@ Page { switch (itemData.Type){ case "Movie": return Qt.resolvedUrl("../components/itemdetails/FilmDetails.qml") + case "Series": + return Qt.resolvedUrl("../components/itemdetails/SeriesDetails.qml") + case "Season": + return Qt.resolvedUrl("../components/itemdetails/SeasonDetails.qml") + case "Episode": + return Qt.resolvedUrl("../components/itemdetails/EpisodeDetails.qml") default: return Qt.resolvedUrl("../components/itemdetails/UnsupportedDetails.qml") } @@ -117,7 +123,10 @@ Page { onStatusChanged: { if (status == PageStatus.Deactivating) { backdrop.clear() - appWindow.itemData = ({}) + //appWindow.itemData = ({}) + } + if (status == PageStatus.Active && itemData) { + appWindow.itemData = itemData } } @@ -128,6 +137,7 @@ Page { //console.log(JSON.stringify(result)) pageRoot.itemData = result pageRoot._loading = false + if (status == PageStatus.Active) appWindow.itemData = result } } diff --git a/qml/pages/MainPage.qml b/qml/pages/MainPage.qml index c04a7f8..7bf2901 100644 --- a/qml/pages/MainPage.qml +++ b/qml/pages/MainPage.qml @@ -4,6 +4,8 @@ import Sailfish.Silica 1.0 import nl.netsoj.chris.Jellyfin 1.0 import "../components" +import "../" +import "../Utils.js" as Utils /** * Main page, which simply shows some content of every library, as well as next items. @@ -21,11 +23,7 @@ Page { PullDownMenu { MenuItem { text: qsTr("About") - onClicked: pageStack.push(Qt.resolvedUrl("LegalPage.qml")) - } - MenuItem { - text: qsTr("Settings") - onClicked: pageStack.push(Qt.resolvedUrl("SecondPage.qml")) + onClicked: pageStack.push(Qt.resolvedUrl("AboutPage.qml")) } } @@ -45,11 +43,12 @@ Page { } MoreSection { - text: "Kijken hervatten" - enabled: false + text: qsTr("Resume watching") + clickable: false } MoreSection { - text: "Volgende" + text: qsTr("Next up") + clickable: false } UserViewModel { @@ -61,29 +60,46 @@ Page { MoreSection { text: model.name busy: userItemModel.status != ApiModel.Ready + property string collectionType: model.collectionType + + onHeaderClicked: pageStack.push(Qt.resolvedUrl("DetailPage.qml"), {"itemId": model.id}) SilicaListView { clip: true - height: count > 0 ? Screen.width / 4 : 0 + height: { + if (count > 0) { + console.log(collectionType) + if (["tvshows", "movies"].indexOf(collectionType) == -1) { + Constants.libraryDelegateHeight + } else { + Constants.libraryDelegatePosterHeight + } + } else { + 0 + } + } Behavior on height { NumberAnimation { duration: 300 } } width: parent.width model: userItemModel orientation: ListView.Horizontal + leftMargin: Theme.horizontalPageMargin + rightMargin: Theme.horizontalPageMargin + spacing: Theme.paddingLarge delegate: LibraryItemDelegate { property string id: model.id title: model.name - poster: model.imageTags["Primary"] ? ApiClient.baseUrl + "/Items/" + model.id + poster: Utils.itemModelImageUrl(ApiClient.baseUrl, model.id, model.imageTags["Primary"], "Primary", {"maxHeight": height}) + /*model.imageTags["Primary"] ? ApiClient.baseUrl + "/Items/" + model.id + "/Images/Primary?maxHeight=" + height + "&tag=" + model.imageTags["Primary"] - : "" - landscape: true + : ""*/ + landscape: ["Series", "Movie"].indexOf(model.type) == -1 onClicked: { pageStack.push(Qt.resolvedUrl("DetailPage.qml"), {"itemId": model.id}) } } - HorizontalScrollDecorator {} UserItemLatestModel { id: userItemModel apiClient: ApiClient @@ -104,6 +120,12 @@ Page { } } + onStatusChanged: { + if (status == PageStatus.Active) { + appWindow.itemData = null + } + } + Connections { target: ApiClient onAuthenticatedChanged: { diff --git a/qml/pages/SecondPage.qml b/qml/pages/SecondPage.qml deleted file mode 100644 index 6dbadf4..0000000 --- a/qml/pages/SecondPage.qml +++ /dev/null @@ -1,30 +0,0 @@ -import QtQuick 2.0 -import Sailfish.Silica 1.0 - -Page { - id: page - - // The effective value will be restricted by ApplicationWindow.allowedOrientations - allowedOrientations: Orientation.All - - SilicaListView { - id: listView - model: 20 - anchors.fill: parent - header: PageHeader { - title: qsTr("Nested Page") - } - delegate: BackgroundItem { - id: delegate - - Label { - x: Theme.horizontalPageMargin - text: qsTr("Item") + " " + index - anchors.verticalCenter: parent.verticalCenter - color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor - } - onClicked: console.log("Clicked " + index) - } - VerticalScrollDecorator {} - } -} diff --git a/qml/pages/setup/a b/qml/pages/setup/a deleted file mode 100644 index e69de29..0000000 diff --git a/qml/qmldir b/qml/qmldir new file mode 100644 index 0000000..616ac20 --- /dev/null +++ b/qml/qmldir @@ -0,0 +1 @@ +singleton Constants 1.0 Constants.qml diff --git a/rpm/harbour-sailfin.yaml b/rpm/harbour-sailfin.yaml index e03b49d..a11a913 100644 --- a/rpm/harbour-sailfin.yaml +++ b/rpm/harbour-sailfin.yaml @@ -6,7 +6,7 @@ Release: 1 # https://github.com/mer-tools/spectacle/blob/master/data/GROUPS Group: Qt/Qt URL: https://chris.netsoj.nl/projects/harbour-sailfin -License: LICENSE +License: LGPL-2.0-or-later # This must be generated before uploading a package to a remote build service. # Usually this line does not need to be modified. Sources: diff --git a/src/jellyfinapimodel.cpp b/src/jellyfinapimodel.cpp index 183b9a2..aaebb65 100644 --- a/src/jellyfinapimodel.cpp +++ b/src/jellyfinapimodel.cpp @@ -1,10 +1,11 @@ #include "jellyfinapimodel.h" namespace Jellyfin { -ApiModel::ApiModel(QString path, QString subfield, QObject *parent) +ApiModel::ApiModel(QString path, QString subfield, bool addUserId, QObject *parent) : QAbstractListModel (parent), m_path(path), - m_subfield(subfield) { + m_subfield(subfield), + m_addUserId(addUserId){ } void ApiModel::reload() { @@ -13,9 +14,11 @@ void ApiModel::reload() { qWarning() << "Please set the apiClient property before (re)loading"; return; } - if (m_path.contains(":user")) { - qDebug() << "Path contains :user, replacing with" << m_apiClient->userId(); - m_path = m_path.replace(":user", m_apiClient->userId()); + if (m_path.contains("{{user}}")) { + m_path = m_path.replace("{{user}}", m_apiClient->userId()); + } + if (m_path.contains("{{show}}") && !m_show.isEmpty()) { + m_path = m_path.replace("{{show}}", m_show); } QUrlQuery query; if (m_limit >= 0) { @@ -24,8 +27,23 @@ void ApiModel::reload() { if (!m_parentId.isEmpty()) { query.addQueryItem("ParentId", m_parentId); } - if (m_sortBy.empty()) { - query.addQueryItem("SortBy", enumListToString(m_sortBy)); + if (!m_sortBy.empty()) { + query.addQueryItem("SortBy", m_sortBy.join(",")); + } + if (!m_imageTypes.empty()) { + query.addQueryItem("ImageTypes", m_imageTypes.join(",")); + } + if (!m_fields.empty()) { + query.addQueryItem("Fields", m_fields.join(",")); + } + if (!m_seasonId.isEmpty()) { + query.addQueryItem("seasonId", m_seasonId); + } + if (m_addUserId) { + query.addQueryItem("userId", m_apiClient->userId()); + } + if (m_recursive) { + query.addQueryItem("Recursive", "true"); } QNetworkReply *rep = m_apiClient->get(m_path, query); connect(rep, &QNetworkReply::finished, this, [this, rep]() { @@ -112,5 +130,7 @@ void registerModels(const char *URI) { qmlRegisterType(URI, 1, 0, "UserViewModel"); qmlRegisterType(URI, 1, 0, "UserItemModel"); qmlRegisterType(URI, 1, 0, "UserItemLatestModel"); + qmlRegisterType(URI, 1, 0, "ShowSeasonsModel"); + qmlRegisterType(URI, 1, 0, "ShowEpisodesModel"); } } diff --git a/src/jellyfinapimodel.h b/src/jellyfinapimodel.h index 1ec0f5e..157cd14 100644 --- a/src/jellyfinapimodel.h +++ b/src/jellyfinapimodel.h @@ -70,12 +70,6 @@ public: }; Q_ENUM(ModelStatus) - enum MediaType { - MediaUnspecified, - Series - }; - Q_DECLARE_FLAGS(MediaTypes, MediaType) - Q_FLAG(MediaTypes) /** * @brief Creates a new basemodel * @param path The path (relative to the baseUrl of JellyfinApiClient) to make the call to. @@ -99,13 +93,21 @@ public: * @endcode * Subfield should be set to "data" in this example. */ - explicit ApiModel(QString path, QString subfield, QObject *parent = nullptr); + explicit ApiModel(QString path, QString subfield, bool passUserId = false, QObject *parent = nullptr); Q_PROPERTY(ApiClient *apiClient MEMBER m_apiClient) Q_PROPERTY(ModelStatus status READ status NOTIFY statusChanged) + + // Query properties Q_PROPERTY(int limit MEMBER m_limit NOTIFY limitChanged) Q_PROPERTY(QString parentId MEMBER m_parentId NOTIFY parentIdChanged) - Q_PROPERTY(QList sortBy MEMBER m_sortBy NOTIFY sortByChanged) - //Q_PROPERTY(MediaTypes includeTypes MEMBER m_includeTypes NOTIFY includeTypesChanged) + Q_PROPERTY(QList sortBy MEMBER m_sortBy NOTIFY sortByChanged) + Q_PROPERTY(QList fields MEMBER m_fields NOTIFY fieldsChanged) + Q_PROPERTY(QString seasonId MEMBER m_seasonId NOTIFY seasonIdChanged) + Q_PROPERTY(QList imageTypes MEMBER m_imageTypes NOTIFY imageTypesChanged) + Q_PROPERTY(bool recursive MEMBER m_recursive) + + // Path properties + Q_PROPERTY(QString show MEMBER m_show NOTIFY showChanged) int rowCount(const QModelIndex &index) const override { if (!index.isValid()) return m_array.size(); @@ -132,8 +134,11 @@ signals: void statusChanged(ModelStatus newStatus); void limitChanged(int newLimit); void parentIdChanged(QString newParentId); - void sortByChanged(SortOrder::SortBy newSortOrder); - void includeTypesChanged(MediaTypes newTypes); + void sortByChanged(QList newSortOrder); + void showChanged(QString newShow); + void seasonIdChanged(QString newSeasonId); + void fieldsChanged(QList newFields); + void imageTypesChanged(QList newImageTypes); public slots: /** @@ -148,11 +153,18 @@ protected: QString m_subfield; QJsonArray m_array; + // Path properties + QString m_show; + // Query properties int m_limit = -1; + bool m_addUserId = false; QString m_parentId; - QList m_sortBy = {}; - MediaTypes m_includeTypes = MediaUnspecified; + QString m_seasonId; + QList m_fields; + QList m_imageTypes; + QList m_sortBy = {}; + bool m_recursive; QHash m_roles; //QHash m_reverseRoles; @@ -168,7 +180,6 @@ private: */ void generateFields(); QString sortByToString(SortOrder::SortBy sortBy); - QString mediaTypeToString(MediaType mediaType); }; /** @@ -177,30 +188,40 @@ private: class PublicUserModel : public ApiModel { public: explicit PublicUserModel (QObject *parent = nullptr) - : ApiModel ("/users/public", "", parent) { } + : ApiModel ("/users/public", "", false, parent) { } }; class UserViewModel : public ApiModel { public: explicit UserViewModel (QObject *parent = nullptr) - : ApiModel ("/Users/:user/Views", "Items", parent) {} + : ApiModel ("/Users/{{user}}/Views", "Items", false, parent) {} }; class UserItemModel : public ApiModel { public: explicit UserItemModel (QObject *parent = nullptr) - : ApiModel ("/Users/:user/Items", "Items", parent) {} + : ApiModel ("/Users/{{user}}/Items", "Items", false, parent) {} }; class UserItemLatestModel : public ApiModel { public: explicit UserItemLatestModel (QObject *parent = nullptr) - : ApiModel ("/Users/:user/Items/Latest", "", parent) {} + : ApiModel ("/Users/{{user}}/Items/Latest", "", false, parent) {} +}; + +class ShowSeasonsModel : public ApiModel { +public: + explicit ShowSeasonsModel (QObject *parent = nullptr) + : ApiModel ("/Shows/{{show}}/Seasons", "Items", true, parent) {} +}; + +class ShowEpisodesModel : public ApiModel { +public: + explicit ShowEpisodesModel (QObject *parent = nullptr) + : ApiModel ("/Shows/{{show}}/Episodes", "Items", true, parent) {} }; void registerModels(const char *URI); -Q_DECLARE_OPERATORS_FOR_FLAGS(ApiModel::MediaTypes) - } #endif //JELLYFIN_API_MODEL diff --git a/translations/harbour-sailfin.ts b/translations/harbour-sailfin.ts index 08fcd9f..7800e44 100644 --- a/translations/harbour-sailfin.ts +++ b/translations/harbour-sailfin.ts @@ -1,6 +1,21 @@ + + AboutPage + + About Sailfin + + + + Open externally + + + + LGPL 2.1 License + + + AddServerConnectingPage @@ -46,7 +61,14 @@ CoverPage - My Cover + Sailfin + + + + + EpisodeDetails + + Released: %1 — Run time: %2 @@ -106,33 +128,42 @@ MainPage - Settings + About - About + Resume watching + + + + Next up - SecondPage + SeasonDetails - Nested Page + No overview available + No overview/summary text of an episode available + + + SeriesDetails - Item + Seasons + Seasons of a (TV) show UnsupportedDetails - Item type unsupported + This is still an alpha version :) - This is still an alpha version :) + Item type (%1) unsupported