From ec4acaa3f05bf99eef3d179f1f58e5820c571ed7 Mon Sep 17 00:00:00 2001 From: sebdelsol Date: Fri, 15 Mar 2024 14:42:57 +0100 Subject: [PATCH] v1.4.12.41 beta 2 --- README.md | 7 +++---- resources/README_template.md | 7 +++---- resources/readme/arrow.png | Bin 0 -> 9131 bytes resources/readme/logo_arrow.png | Bin 9288 -> 0 bytes resources/readme/settings.png | Bin 24210 -> 25481 bytes src/sfvip/ui/infos.py | 31 ++++++++++++++++++------------- src/sfvip/ui/widgets.py | 10 ++++++++-- translations/bulgarian.json | 6 ++++-- translations/english.json | 6 ++++-- translations/french.json | 10 ++++++---- translations/german.json | 6 ++++-- translations/greek.json | 6 ++++-- translations/italian.json | 8 +++++--- translations/loc/texts.py | 11 ++++++++--- translations/polish.json | 6 ++++-- translations/russian.json | 6 ++++-- translations/serbian.json | 6 ++++-- translations/slovenian.json | 6 ++++-- translations/spanish.json | 6 ++++-- translations/turkish.json | 6 ++++-- 20 files changed, 91 insertions(+), 53 deletions(-) create mode 100644 resources/readme/arrow.png delete mode 100644 resources/readme/logo_arrow.png diff --git a/README.md b/README.md index 290e6b4e..48392913 100644 --- a/README.md +++ b/README.md @@ -25,21 +25,20 @@ _On **old systems** you might need to install [**vc redist**](https://learn.micr # Settings Hover your mouse over the ***Sfvip All*** logo: - + To open the settings: -Logo color & pulse meaning: +# Logo Color & pulse | Meaning :--- | :--- Green slow pulse | Everything is fine Red quick pulse | _Sfvip All_ needs your attention # Logs -The logs go **in pairs**: one for each process (***main*** & ***mitmproxy***). +The logs go **in pairs**, one for each process (***main*** & ***mitmproxy***). You'll find them in the app folder: - # Build diff --git a/resources/README_template.md b/resources/README_template.md index 3b1f713c..e34a0fee 100644 --- a/resources/README_template.md +++ b/resources/README_template.md @@ -25,21 +25,20 @@ _On **old systems** you might need to install [**vc redist**](https://learn.micr # Settings Hover your mouse over the ***{name}*** logo: - + To open the settings: -Logo color & pulse meaning: +# Logo Color & pulse | Meaning :--- | :--- Green slow pulse | Everything is fine Red quick pulse | _{name}_ needs your attention # Logs -The logs go **in pairs**: one for each process (***main*** & ***mitmproxy***). +The logs go **in pairs**, one for each process (***main*** & ***mitmproxy***). You'll find them in the app folder: - # Build diff --git a/resources/readme/arrow.png b/resources/readme/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..0f30c78ea895fbe968c4c6d42149c3ea33d5c292 GIT binary patch literal 9131 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 literal 0 HcmV?d00001 diff --git a/resources/readme/logo_arrow.png b/resources/readme/logo_arrow.png deleted file mode 100644 index 8d33aa252d10db2b356860435c60e1224703826f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9288 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 hGXU>zdBDx;&eSoVuMK-i+Gu5DI;N!yM*m4 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 diff --git a/resources/readme/settings.png b/resources/readme/settings.png index ec8fe5edf67809f2ab68143e8b4f823cc8ee5acf..756bae618718785355d1a0b02b8431dd6f9e0023 100644 GIT binary patch literal 25481 zcmcG#1yq~c)+kDg7D|Bv1&TwF7IzZdtyuBm8r%}x3KaKJoKUQIao1wSQ`}t|T#EY( zd+)Q)`S1PDJ^y(3J;q4*@~ye1t!bI_OPGq13^wLVOe7>EY&luUcSuN&mJrw17>^O} zxr|TJ5dWSy%IbiTke+otydEVmJtIXz!ko8K*M?{-z6F{(*s&U$IhdHUy4yJ-pplRS zMcf^YO>N8}R3_#iD|;cDgQhkbDl0P~8Z910c11@Cb4x2(PiJ#APbGCzPa9K!8I6cA zm7qHifxyljVoc?3XKN1zx(m_#fftClez?s>L-hv;#72ll?13PawxSA^goCp=6(1`n zizz!hI~5;*mBWOW$CwYmOvTC0$;rmf%f`XQ!odgR<^^(aQ~mWvgCOT@W&wOBDg75Q z#3vydO9;df$j0X8=EmyA#p>V;V&eb+0Br1>Y@D1d2nZIihdspDoy8tZ`wt9~=3rB2 zD@TZxgFV#)Mq?8P7l;rIg4I7|uygzytv&cJJs~v4=5FlB#=*+|Ak!a!W~P6`Il4I8 z{z2T#l+E1M+|Jw{0!F}c{0-}9=>Ty6TRQw3)PFDk7Xk>~Dk}a>#~ zA;$j^*vu4Y;oxj%j5q@;J7bVJo1;C5hU)K=1xh&BIyfT;Be>)Gg9}APpqxDzVr*|} zE+;8OgAjq$%E}CA!fwH3&I2%JG2!GfX5lmAHe)g7H8p23<1yhkNz7&$r2IoQn*ehDz)F=GMnaC5Q%OpPsAxQva>EjYO?xY@Z) zXs8}e8;C%IV9EHwzl3Nw{<^9CV0E@Gf8GS}A{?KcjpO0{uXUaOu>Q|w4SOquiaBYh z9_-~$t*Rkn7ecMPJUm=Hf8AHHayPftmb5}>2mA*k+yL%>UDElNB~D(RhuH9ky8&gb zzzD1J_$%6|nLGV;Wot$Chlc@;P5%_a^ua#O5z71Xw$*=gl>alO{kh-G(j1|#|AXEB z2?lnsfVdeun~Q-EI{uG-!S-*Ncd&Ogcm5al9gUrh5fR(m87xF&;p|{X^|uXEK^&-z z9UX10O#e7iHdlMIzk=f5Rz~x0>41%0|IaGo;pb)NXE)_w;o;`vV&OF7=4Anx0XSH= z*#Q846NFiD{B!^Rt|A^FI~S1aZ-4!NqoTi#&(zY`9%PQlcWnO`!kBRL7@L{!bFgr6 za+|Q2uydQT0L(4eSxoqiIoLT&cq|aFf7r`^C(M5dKL0-pWBMO0;6EJtgI)Y>B>!G% zX6DXT|6&9GYG;45K=p^k{eMI6KU&=XEWZ9br~F?s#Q%4P#P(2%{26Z8{?|zK=V!@3 zH7WhzoquF&;C~l${--vGNZ&w2viJ|_!-U(|f`iALm&KgloQuWOoSPeA%-sAeyu3Vo zTwMGdJX|LH4;KA^&EfwxeLO^wKh*Fq71}>;A-YI2fd>h809El)DZrBcoeCl)|WUap@=#RHiA%X_nN+p!a*@XQZmV2rdt+U#fi zkpui+VEp`7w<6@|gy`gAs4fIukI0i^$jy)>v{7jM%TZ)|6?-$9zI<)kDfYD4+TKX_ z+E?5kYUsO0`Q)YSrloaWcy~JHpfRQJ1T#oH>%B68@*~6rHB^<605b?8ouyLX69_x- zTDs0NO5&S$M85Yrs;ga|kwGk2Y~A$I#=PCWQxZIqlmMkNtq^?>&r%r+gEhY|l@JVJ z-pU)W5QqTExv8qVWOhvA#7@k05MArAyb_Zo_6Igq^E2wg-E zQzUM#v7MZJeTa|In+ zjph_6nU7-#8FJ*su2Pg(9Ydbo@(2MO0OrY0`|2o8{n~^(ZE`q?yG)uN$*Vo03noI* z$nWv>%wZ-6h?E52^dCWx$ zl)1ghF_Gw5xZ97xhTh$+QXZsSclx>BSR(@kK9ljr->o@2$nmw@Z7qY8L*`_<6DkTK z?)IMSC*u7c%MZYo*tTA=6h2ouk3t7d36adViRtW+NL?*{g`r17u7juBZrc5<1v-^F z@=RXh4t{7Wy!#xrApeeu?(tMf-=ro;aaQt_G-*ACTL_0Ncux$@`Hg;n?E#!;!WJ7s8tPhz^)4+B`^y{6F5qyo)w^!I{hYMU;x8EW zYOJ2?w=#|Cu=7^3J9n3A`l)o@E54ovP+R})0#^GJ#qW@!i=pTtkU37_O$zOM@8!^Y zQl8JYxuX}-ksptE^j{KoOg(i`rH-H;%^DKdgSbalWeHU8|5EKHXtrX!MN*RqF_W&r zh1ygR+1`x%@zVw#x4DGzm3JE0^`sCzOLuB7*=d`+9JZTih~V|xE#8N*9Qz)|>>qw; zNnKhz?Pn-^+6emDwz_sXw8OPEICuNxIGt%})sBMNuzAVPLZ&`55cVN!NTA=gTz;{# z_i|Zve@(XoVXh!%r$uDkwmU1lPX^Pk1r-5CK7qMy9ntAhY$6i^=4X z#$~a_5YkU8uyjS#9_eu--{;_+1@3krZ{u~p(XG8dZL3~#=}b>69n7tQ$NG6f&(8uE zD9g^uJZRkayx{@n_8`=={q8CY%!Gg3W`l)^unK>CN5*EjD&4ejwqurUgO%<8I^n0L<|6(7lwSp(z+ zwQg7%G_hm}%ZZCvWGOUz1;RTXHPfkMqlo(CZ4S0sRs_&qIg>NWmmn8UWODmkxZg9P z-#7G+L`eA(FFeV;$3A6MSJbAJp(KC2o7#TGW2h0c^jT2H&k6r|3{DLdLCte>;G`nO z0#^~wCRw%Hsn2#(wdT%kU4$Gl!j#T$Qqb!Kct@y`Pm7D?e~M7AQaIcm>%;Zmd9Stt zrVREqr8~r}2GH*dc|niB$1C%T4O%{pds`vmY)fu48YL|@?Sz!^Xo6xO`*=S$1N&TQ zVOJTuG4`fq*>fM6dM4gV?7-a(|HC`%m9t7>t8)utm{X5JJGL_VO?-etG<2ugqIE2e zmVwQ&HoDx;EBV^Kwm!}G;6zW^Kivl$<;VZ6E$N_n3Q#Jd=gX85%W!JT&C|o|_shHJh=dY7icfj-E>;lnw9D)sU|M%#dgGc=~oU0LEdGf^RxF<&n z_h0Gy7<)8gg|VHYuK7QSh77L}@q{9!V}IBt-Cd^nPC+p_8B zws<$D)7Fq`>eeZuH+Q$Gzi_@N=sdWiU_$}3+lk*v!V&JDtL-D-N+J&)HBx^;e%EiV zHFS5BBtUW9f*F{8t5xNDs0@u+h|fDlMEE5kA-ARA!%qS>b^zxURf_v{^x_-31&A1W z%UR!Ykp61wver~K>(LXpAsl-GEt)n@1pu&0R@k$|OH|-?Dnt@Q)kaXp&vKp^m_D#y zx^VQ4_V{L>YrbqS#@FZYZn-RjNb+hZ=)}mY#kY2su=2{WNK5wfcl&16X77foD@Ph% zDiXTp!?%YpLYLyB6!1J2NV-iEZCZ*iB<3wI)O=aI2fzN(C1_|p`MEv+N2zhgA=m5t-B_e zy4A~HF`4i@lb7qOZJySDayRe@dPyPEPJ7(akU>?#AlUqUhh07RK%6xJHj9)h&P@w1 z*gk3`l*EwObt5R^!yJa6!m-P+&IYjHO>?To$Qq!6A4Qtu-6}7GW(OdPcd!UF<@@jH z2i|$NTL}R$zx&SU5c@sP!$c@ZfBLSMoIN}R)ed^u3a@Lu2j2jbo#y-+Z*_Glpy~r9 z4l735hCX3;I_y z3*+?7E34k3Ar(H=jK5f0Cp<*`jpi>3k~BDkk=5^27Nk?L<*%y*?UrD4I42F|h6ITN z{S#0(g_x0p25>(lx&=I*SE_fTs9c7fbTLy*aF7%UdcDry+!Z&=duo|z{#zICe5-k7 zh%q$W<6~m6?HuEbW)?ExkG;01l@eu{SLhE%;=56H_tpF2NsHmVrTxG_IE=}`%I~+o z7Hdo8PV^USRzLJ_Pf@v^S^Di}{BG~TV1zfHiQLqBZ#sR=r`-2GDQ&%Xfo4^S9Dl(6 z(m>y~zlC~#G{X&TJIkB5ibx-zJoKyL%|1S-IA5yn1$aL5v1br)%Bb>=W$9<3to~qFfD08+2w%Ju2w=Ko$R&X?*z&sDWVtlZd^Dq|Q9s$UK zvn0~dmA=}TQDbj1*U{O|uys~!4J!CVfp6b=&h51m@hYQ2gN|L)1;tRv7r>1 z@Tw%1KQ)rs@zjDp+p@*$Ype*-;bXnfXb5B#KQXEochwlTrv6Za!UTc8hEvs5^L)Wp zN7=kKS4Hw{D6@ZdB)G9r9{U8xfY9j^Qa0lr(z#&Uql?vJ{c;bI5Y zCvb}C>oOt_jKGm0}XB^5B<&ei&!E>>I{y`?~?{h7B6d#p$=_4=Y!FQY<^Rr zu-9z!p)igYY2`oO4($X(qQ3!NK>Nhu=MG=lzG1L>(@TTI_ROnUUfjyAke0X|eLdX6 zVZS_H0bDfqx1LlT!YB9le{ZEVP5;2&)j#J{>JwKYp16eGScPi(%up8ubM#((z~EnJ z?4e;R!-OnqzQ}MR2<-zTqbm#)&eGkfsgsvt{@xEDmPNv46GO_%r`p_A)jSP4CgdeM z>^}iQO~@-O9tmE=J~c#Y1z2C!k^}npz_{h@^6RVQa;_IKT(d3&nca^(t1)^lmb+xU zEjnHjteW0jmV_+%et(aX(Dw`Psvl#`Ez_8UPX?ItJ_Z)y*>;ClCZYsa_AA@DH{h$j zA@8n<(Rc=|EZ-+-%jqdhI8HMl7XEe0Y?yq#R#s0N==0^;cpW;|bS(^y5-9gsA*3vp zfh!}9piCI*;KkuRl@$QPn(ZsLP_eIWgA~=-e{cfbo`wV{XT*xZdFDEC?v}0&AQIoj zx<1Dz);@#o@k?J#$(_Sa1mL4yeosE4?!uN>h5b5p7Y<-iy`*-!73?e$bL7@MB)@!* z8V+~S#fh_!jCG!MJx*B=n|-~}%Y{wzLHPSis*>cKbWgG*p6KyP_p>DpRbS1~hF4q6 ztH|8SBSjY!nn}A@zXRGc(;VEZ<(;Qn-z(5J4#hpy)5W^V8pL>4@Y?N- zN3Ehczpw>-$1r>!bjVSL)humwWD$3_Fgn}~CE&bGRl%gaaCU4z!7A&EXQI2JOh?;vPvdhSyA4N7LTvnaAchZuab z+s7isZ>;^Qn8sq5-WmG(xaUwTq{sI%#gfo*=F95;AlrP5C9e5IeM(1`5US8o;Y?q- zm(xLzglrxTSe|w6pGfQ~$6kq0RH=VTcSv4?3~g%H3z`4gfjNH}ePu0+mJDf#4mFIA zjTE0+W$%(+f7goD3NViZyCQ9hpq#)JJg!r^W3nY1@P1jOd{4H_3sF@gzM~H5Pr-9n zKle^F>NO&cT?x-TX6oz^z!@L66hSCG!4q}qXetnNyODlyCv=X8?>I}dM;G_DcboTH z&F6V{V~abHPd_%SM$Y-YORF)un4WT5xL-nc;GZI&=eRFYz6QUrzZslREn7Bbu)R!U z0`50Bow1e4k6oJfcu)#W-mbj4?-!AV+{N_x+?`j>K*rbwYNl3r8|nh@mX+I8tF~0D zpoW6@&DSbPhV&v{Z|c{+vWvkZqFqGJtPdE9Z<#2pera%qnQH#Lv_RuS0nah#@x81v zmZxXP*f#LNc-RY@p=& zY<{H(Lq1Z}QS?(C^5$UFH<_T<6a@tplp32*uo2XikOEH_+GJ|bfvat*6+O&ux}u*T;p%4P?F4UKQ2K$5BRhHjMUYM*&J5vo{7Fk-iJE zBgsmWndZf4P|xIhHzX1Ok*;|R4M~DFpRSg<&bxH(8v1ArUxKGx1tB|wx}~Pk__Z$f zfP;8Dn=i@jD+2Ru!8=3(1%^-blq0)}q9=c`?q2H=xGf%?;ovmicFZi@%Us$7!17Ok zO9Hg#A+3k_ZsYRo+50Y7=?=o%V4L}b{E!GMaq?)RyPInfwh)gba^A5S;r>~{{))<0 z!wZ2lScXKa)BF9Qh;)U65~rSpb&~Q9g3~RsZ_*byV8hBuE8-c;60`Z4Swyyf3cT)D z>*2+Vct&S3?@fv>a<0YUUXd6 ziizq-TcEyRvX+E$!1m^O(xyxIJ($qr&Ofj3ea_SV%r?!35}K5SOunocICt^hT(oMF z{bLIx)UMF6J}WdlG*m_dyCs&|N(nwg$5|EyW5!?`JbyPLaWojgLVdHkbq?Fu35d?g zrsOs=Hz_(U`f1YHggmga|J_+LSz9^FM~Q7SiXxvzFGhtf$rm1QEsm6nQIb8p1>W1s3MA z+7>=BOM#y1^m`%99byW^>cI?LX$&{h41>X{oC&ij+k!PMPEHsi1PU-1i8)$G#oNAqBEZ z|C-O*U_IZ>p6P+{Lru#F-Pvfq#;emdn^4tnG9bKp{%hJmke~annAXvn)jENn^+uaDAk4M53tIP6e0LUml<4GT zqFX$)v@TMD?rYnp(pzsk@8_MamCdyS z&06|yFEAYuG;|qvtQpVqcyzK>fn2489!zy3DX3yr}csUn_{cr|NnyLz#NA8>9 zW-K%dTp4T+)-688H|)z|?_tlIEjq~S(D9|U#v@!;Nk0b$ZKOD_@Tz)~R(fWDPWi3SnA)TO?F8T18cPPzo(x&0=g3C?5!U+z!tnbZxZLvmaU3>= zxk{0AR)G#6c|wA*NeIi4>IPTb@Ju7TS&-iXc_JHf2BH`~cU$^evwh>>8vsshGI9b0 zuaLeLXi#x)KPPI~$EKyFv~_@sEb#-c+G}e8rPl`+kuTmqPmF|?7_y0BdQ z=mG2UnT@9KU1%v2Xs}K! zO3#PJFHmHH8)?VCD$sMz7U#Up(l>O6M%%lbA_C}f+a83-~kJL1mpZ^tY zMT)srI2|7c*wYNY(Qg-wOxfuT(Pz&L5cMmES4`8qtg|B6vY8DATOqKTE_Y25X7n~<0bF9e6pTES57@OuNC8;lHKXU(p9 z;s?H-FAWhKAeBJ!x8TvhZ$@PmCp%1RsE@e7gKlVB?eC!5%wI>ip)zHqt|BiHN+O~~ z!_|`eBJA9!@nTaST-G#yG=Uq6HP=-?r*G_@xwELs>X%u(-Kgt+kx9x*WL64N}eWamO(&e{l8eJK9e{ zZ))>otzR|v6X}mN!R{konzH{jllio(MVE)0Icia5G*dO z_4!R~p~uHRCXoC_)LntI3a9Gntr@g(9@Y%oIb05=X&#@=#2dg=5os<_byDj4iU_e>4~Ft| zM5h0S)p|K(+(tM6Yvg0ryt8xG;^e>fxOg$@>lZ_37JW~@f5$cbvb){r2RVtB4{{)G zY}h+!FuNFnCuuJ7o-^E=SgcUFSS*R;hWPq6xJ|#kir`uC6DG7Jful&z+uV2K!LFkn z4R=9?2Gn^Hvwjv!4!Gv_1(rW}0G+|!Ujz<-6epQ|E7-pqGKdw53t>hl6@4-Lg(*Nu zD+^~>>}&r1eSQzN*cNbBx`4XUSXO>q#5T%x?D+?k9)sWPo$2`shjhj+bWc7ni$UhV zCSd9rNHi~w#;{IwY0g!*EKxKyhB#mv8D1b!!wQvBV5xPuT_)=9`J(B)d(P!>b!Ovg z>#Yo$g1!H?$xj-X`K6*$=wJyAJ;{AB2nrRUAk$mBuF=7&y`Ne7tjy2SwteRza`nz+ z6z-W)oXCcoQf!gb>nB2VcayTb;csy{J16&3WZvgI3nm)meXM%lioN3dIlYPDY_-q* z$o7|8aMBzysR6WCvp;n!uugs~HGkvK-Gj9hS zEC!dmn@i2GJIBq$nuERd6j3PsJtvJ-$cnO%&7r_U7q z&I5l^)@%jc7frzWi9))s8_hCg4#>Y%17K<4-7+C)_CiM|3`?g@oL;_jl)ijBZKVWq zO>0F-rwJmOZ7ZViY}19sXN@MNy^1F}X+6ETy(zx)dhnaC`#YXnzl@!S-rQ%LUaP*h z2b6j&Cxi`l$HAgZ*zGcwbk=HV(D8cIQl>@CDz1^9jGYGqyYr?hzn_rWi9$}HosMA8VV(GJhyb@{cJ7(OPyd%%2wfUY5GKHop zK@u_NfCD`(9@jQMjgFJtKaMx26OH#r_Xw7K)BHAWy?+*^@7J8awlde!PJW7MB?@|6 z#S1?0o@}S-IV<@@JW*}_QK%{K8!5tJ8XB?8RFlBdPdUpFCFW)+XVc}(p_@%$5;_UJ z1PNs}2ZP%J)?=`9P97;#L%^kF`-W}<8Rr~+a%HDKuUnrZu{hbbh<<~_NsuEwM%AUL9l6zN(G;ahQmby^GE0f8Iug7{EzO<9RnN0m=h{> zr?FBK`4anm>a+ISs{nQe|Mv|pVb0OlV_ah`A{b_Ld+|9CnV~T8wZmG z5n$FZY}y`YuaPC&T#m%~mtB6StxbPVtSQW(LtDRQOVfZ)X5Q$b`lVNA2ZJiO%@s>U zeXq!W!_(#xdA>N^UR=6JMv}lX%Zpv-Qf%Se=wep&yPZ zK*A%nB*Dcloz>G_M&=JVyqdw19={E{@jc2V;s4|YX%7AW>VEP&CkeVs0 zIz}N16@kjwIG+eGLuVi;fJcf?g3_R)j|W-Lt`zFI2w>97)Wld?Qgv^53v*#g(jb$X zDCsvl;NY&0BzK`_}s-x0CQBXxuCRUk+HmlAol0Nu-6LJQm)Q? zTO|cuZdx&lE`{$!l9}p?pv;dqB|nbX0BYpaAc_0@((tZAOI*B{$IRws!=bRNrv>i4 z8T++}Njb|~kj(TTwYw3~+05m}_sxM9lJ8zUH;%p3S)B2G;}8uKWn`eTcQ@y(#f`Bo zz~ChQX_QM1edL(SE3#giawtK|Q^!aAF6&s`JT=Vrm6B9s_t6^p0~vNrv$gN7jpFwWXOSH8TfTRMt8$`QXL2msy3s^|nOGoU2>F+<9m9fLWT4B9WUf=QOZs9j8QC9yIxM8}O@SEXnm# zJ5SwGrS%j=DIJ>^K!B7WG7texyo#(Cv%X<{wYas!*QeQ4tJFSJGf9$c!mwL@$;CReTkqLcq~wkNojqav z1!{;&G)@ye4e!u%wzb^|i16m;V%=W^EM z?kh9%F>KQCgNVtWxmD3980k(Q@W>~Tk^!GwA480n1Nq6mV!7(YFu^^nQ7f7?@du=o z7?+t1=|dR{U#jZ9=tHr(q;HlDQ%0|iMFn2@;#$+fQeF$kx?s>wrpX3(l{K37zLDYv zq0Ot4%YW01NAG;^59{pg#9yp!X=xD~8@01(9G;GS7{Sw+ z!a0GY-YTlf`Pp$&mtUz_6zyzs+WPRI+*cjlz|d|{gR%SUIQ-X(>(eN-qBn1LuDy+M zDdng8AqH+9mF8q8-GQT!=!I?^;6};*L|w_YG%zO?hMxtVJt!g3o-HN{x0J~@Dw%MW z!l%?5tASYM+qI~D^G4NS<@+WBe*_bnI^tKrvLjd0R-H`giw#()W6sR&a?)C-`O%}As>_%t4%s-aXx2Zl> z3XvErnk4)z2U;!@wJV+0gqTmKYzcE^ucFFvhAX1TV+942H-45EdH-nLNurPv>D@PIZm|rz zS=7rq1NW66=LSK0V0>?DZcboh`zPrk7kwzG`yzEK*ue`#lDnMDlqe4f(X|+{qc_D% zg{gbaq=uu$_HN4OV=Z$-G^NVA23#Cb;~57$7(5I}rM&ZnllN=9_c9j#5pj zn^Nst6Rp?p+g&?mbGw>lD?Mq1JDCDYNqC--JAQxUw&Zi(wMo{L`Fs!RS0BI}6FbWc z-2?rY2AjIhlc+GMXua_yb9iiBbfB23Zv{}KqzF88dX{eU>@n6TxrAlT`>M^SaUhwf zPZ)G`it5@fT>Vs);UCu_{wPJu18M%DttzJ}x!}y3rVmw8Af8o8SEqiQT@L!_v!hW# ztv5A3aj;WbQWA(#NwS!$wg(;Hb&iPV`KIj@*UlyTHGlT6s7PtWmr##2-ATU)`?MnR zAE~w5Q#&ump|57*uq#{~3~4^t8Jd!?3XU)p^lm;G4Wr`B#0RdM$)uUCj7G0vekx)Q z!j!tGWKeb^Ey5#rPOiMt*44&fR^ZCeG2&kAPz}t~n0f_zb3)k2I!{UEO%uR&mTBz| zk`@VB;o|9D`SRmaQ+hIMN ziZ3aRRmTsu--SWSj2f?<9EbW_7lTF1rFUX>{{DnM^sI4mbA{dW8rH1HxO5vox9Ns@s%?dj%zKb9{AzH|O(Fa7 zkc~HD9Di=Yy{LnI2|gJJ;yiqtGo{6yF$4>nts~j!Ig6=N&3k)M`2=&Txo7jO>f}86{L=3& z=YWm6k+pLJ(524)=}|&Fe+)U=b3{b~tjloXtvcvr(?Ps7F-otv(+|Zsq!#|_kH9Qy z^8MBNGBLX9AO}&m4C?(+zrgeK!4|m2kAIC2OnlU`r|xS~ZE@sEwR}kG?>|tmC7eA9 z?~@>&@~3J-lm*8G9G=bY^0@ssf-T7j`zF;mMPl!y$d>&Pb$fm^Om&Y`yoUlkjw9Os zD_v#eH}uz^bp^(mqXQ?zzx8)_WcSJ8Te_a)dY|ojS$|R+^5y9ySATovMc)kg zgm}E-%ckv5p;jB5DQ6t|oEQnfmBNt*wdPPxnMH776{kd=!_>O3ODHTLJ5dcvtf@F( z2D+UBXhEJ6P7#!nkbMEZe~Zi#@liaC=L<9)Hk(WML4Ol)HKbR>xsX`)=EY060bH=U znO?90PVohgAfH%D5gnK|kBjzWhD2cRRF3O4b>*m)(qpI#1c|v|E!pF9byHMjk)&K% zvV0m%d}?pCW^AR(sCvGj>gy+jQ0n+6xmiJGOBsVE)~3=eFql z62cA%`)O?7!fgYnUwH+6tSYZ?{q;d9r3dw0fvA&40>xzip^0A0*?z3ACeSWnkv*Wc zcLBQ(eZxm;)#G5ap`kh8sOds1KYgO*Wu*=+R8oBi7H&Jn3@U~ulZ4!Kv!r*oiQUxNa74|vkCkoc~|o?Q7zh{~F` zM)ch-9#^yD9Vjy4BH>JXq~Xmm>hrAix4w-@lR!wkA`22$Pl<{_V$BVDv+w^(t(Oap9G6ZTXaI~(;$KWRY&oZPL zk3Rn8C-q~64F$<8dag?2Djue83r$`Rfe0sQ{;oz*FO#iUF59pfV2jN2Hd4`-@SLCC zbH=w!4!(!xKajrDV8#s)&V`poQuk(XL(K`%N?)I2?Q1)Yt2v$#VE8Y#X4U08e?)Hj zim%yVF!W>Aedn2sH7e8hvjDF%W2~RK`_bJQ8p0haQqYZ3aw$78Q2Q_WhIjtq3de%j z52Z+8t;O^2@`Go&ZA&LVocn@mGmJ>QpTQN0aAM6GCz5Gr2Of9b@k6}8A4N;e%KffTkQJTs&x&A=JYSgDX!_`^YxNQekqR&hp!q?#xd|?LmNv#znvk zXPExi!N_G-rNiEc+*Ct8bu@i0>+sF=lQLH?IAtl-fL$)HGW?{|u6bo=<8_tES+a(F zj1*`hFllXhU<2!GHbd~wpnyEhbkQr7Q2h%{Bb`T@%n3fhAK=<$S<#phNm1X5}QqIqc+!EoGnAT!_kdPpjqaXmR#K~VgA8{bs z2#vqqZkt2mczWPgj~+V159ygB^W50jK>-5_MRPd z6BMS4#`>eTk>4Kg`&i@pRn_jg21<`@CW3Y!+Rm$)L7!w8i%Sur^(8C?A9U;*H??Uj zZkOvM#z5d%WC7-UOAA0Jc<4GpC_;WJMn08reS2$#_~nQ!oP(H}++Y_hq$ACxyss#@ z8B?>R9W*@`S&_zJT`FIsD?9mXrtE2SjmIkgpB)sP?%>cuotdur3~OKh#N-4;WkD3K z=Tc*YDM8%4Q&QeL7rEjk&oXnK@Aicyw?sj;)98r{mNsB{Tw^?%W3LNqXb*W8=Xb+r zmcDg+dVz%&;>l-3A2_LKDNYZKzb8)X?BzIaZr1~wD0w4~hMK>@4@<9O`K(irZV7(5 z5%BJ~6OT*3GB2^_70iMqK|t3&(^=kXvTy5Gc7rILlLpP3JCd@-)KCCkh1{-Iz7#dH zt6v4L@}kxWf#*kyWgW!^20ol2f~mI~y6uN}m^C;f9-R5ck%}Y)bfOw0GTAywo$SI< zxaB;MVK zRlS;DuM*@GSc$^TxN6>wD!;=*t7GI}eZ0lU^Fuj*=h!);_<10TYN=4dfE;Ki-s7#= zGtmT(SMabwl??fI>=e1=K1S5U_jF~yT|8|%g?WlwrPDQ{w>1!B(rb0-}tq2k$AWrH1_AZTadHHFRdY0DL_v&C(~x( z`Um<2LffqK7v?yht;&q(E+k4Uxg)xjPojdh#+k?EU)xkZ?(%Nt$*Ru5N3rA^{6wZj z=tdroqEG^l(EE6E&tCa6%5>O^yDZZuji~Kk%9pUw27_7A4c}!TDVcVox_fqO0-wD$ z#u?-L)Y&d2lqvAZRvDY{X_^eL{C&z!^2An{-k56rltzPgj-DEQL#SElcN;>pjh|@z zM3|`UAgd-9nm0SrqUNhwagrJVx;jcd6#|c3TD8hy9WR+OvC!=v(}lxQ%S5}T4u~w&1+kaicFA$yme)gdaRviJ;+6(^~_N~8|miJ+ePn&aLn>E zcb@QK0VR~|nN*8kmD_x3x_Vh7#(4Z5fY~`7ekQGh9aSmscdpDJDSBE6@al z`-u^q1-`41grKTxNdhL5=qLUX8MwMYwYRvSv3n!zD1AO`8}F%3&ihV*G^xo1)35I| z&w6du9q=trKX#@dMCp6<81l=W?`PKgH=hNIj<@`s62dCKT@*jU)Hd0J)_BlA-UI}J z@Ccm>NT%_m$sL`5X>Vux=>?*A zW^?fEc~>y!FT9Up0kBC~ToX@;A!L6F&Fsk+E*kU((0t8Y@Tc6{L_7`q8b6(u>bbuf zFcOFc3>R%Z6kkstMQCgLNmKhn1Ez*;SVzBzX}YhB4rlSmOr&B<&zkLpUdQ7wV^iHi zM7^_xR*x+H=!?{DiiD=Llle5@%K+S&73I}ntbj?#Bc%7firJcT)>bCuRud8e&ddC& zv6A-L;=iJKVb+p*f@;(i;^c=?Dt0&iweW9+>d>TDB@WaR zwMh*5+_ERbY|VxN6((pi#v2Lixz#Rw0AE8QDG#A@lX_=IoH>x%U+YLxL?q=f145v$*jF1(oP(krnl{U}2@88*&qtd#|YG@v_I2!y-1KL3qDgExi(82kS@1S8!;iJ~#QuO>nZ7Pv! z>5(SFm{S^)V{cot7!ol|f9T>^S1psJ#b(g=b9ZKI zmt_5fohPxTuH-$g*QRshOP52vB-j?vd=C%^n~4waU+c>STeLW$sXkP06r#$*&U_hg zaM9o@|1bTF#eDK0@jbS&oz zeqgeE{Si?C7IyJ0zB9dvgU#q=^t<|R%4EIApOJ+pN^o(7sW8N(9UV|Uf_g;f4SB1M zHNgs|2~#puo^Q>+fh1Z|kdyN?Xr5gdl&C+7>##h#Z7C?Q_G%Drq#1)(R}U7>F~PrX zoy{A?({qRAYbxohyh)IyF~%EhNQkVu$bZMmmmKBc<}l1jDC#|Bad*Gq_l(q!x(LN- zqpOnm`&Zmgj*sa;wfh#eQ~AAl;D|4YZ-EDKyz%KOP7Z=CRlxYPfo6%3DsjPElvhZY zT*GhG6x%LmMGLQ(l?!z8tW#zA{-3taGODd^Tf+rDq_`A^;!=WBEEEb9ZPDUTD8*fa z2Q6A0T0FP}Z6P=mD8(g6km3{z?hb_;dd@xL-Z9SajJ>k5_MDkJb3X4IO>PQ;j0<3H zBK%yBDDbD3aiuOj!2f-L(RpJ=xZ0c}O%P#T=r&QN^qXilyJ|8(TnSD@59vV9fW~9P zj1dtko!6F+;*WuG20~ordC6ln-brV=Kpx#ZPr<&ZNdsYlIm7+CJvKiMHwJc+EFXoT z+khdGpY?WHic#!a4o+qt9QHvspw1=`qmiK!sZV4+i`q*G0j0xdLX=zF{asEe`M$&X z={;@gJ87sH#=wUO^bMcuv6$%r@ap9?;#3`-l$R(+1I zUA)iFLXz@A_w|b2GvQRGY6N#u#gpe7%zD&q?|RQZ6`_~Lr2Gl0+qTv0pZ4ekZEt)k z0-t!q)iFWxQ3ZUWMf*Z@p?Dh|n64%Gu?9Cn5U=`jkSvfcQ;Vr^%3`V^-yORj-`UOR z4%4S8tHdrtt-`j7>gcPKV0!h_w zsn2Wc;C~&Jh3kO^KEpSwysYZ%!{BAbmuKY z8&<)8nu232IPc-^MFtCwb;nAWRWHBn8y0288kBg`K-cK{%YsAN(RU-u7Y6;}Z0dp@ zjW7wn{AMf-d=@q9MQ2H&ASXN1s)!MMDXsU5i^&5oDx*@_cN6%uedC?tX9lcWC#Gpi zJ;9T!%EBH#%*5Kv{>iH_`a#0%R_;r|00Id)r{75l46GkYX^ps)DZ`={&$@m`V%TmW z-j-hnK!=6C!tgxURj1P=wM2#h_YXOGh;=n8WlCTh|{!|H7Kd7#$>UR(_%Ke?^da7Bi1 zAFW<6GQb+?Z@wv-C~WFs^gSLKQG>I^G+cnCkkG=OIy+T%+hX=^$#z2=zJB*fAk&ig zJglqf*k1U3HfMl|_gvEO+X;aQYxP2r`s^&y;;i&!*7!JQ!V)Z+XG^pf@Tmqeh|YmM zrgIxt=e=zA`{{9zl-uEX&lsBGADYG+rG_J2?)l$T2Wf&U%qzTJyic3teeA;z!W+w zf%whxN6vme+f6`@^mR`DlqAn_BDz`>_!qX<=5tMCAJu>m;7za)fUXj77f;vnJf$m? zB!8oLB-I*QEgvWhw1X|P*!g;=g7 zBGn*qMbLAZ(}I{bN4F)`p@v&5%fV&jN4__b0WLsfzs{p|t&{HfBs)Z?BN|YVLCG7{ z0;_w4`SEp(xsHNS#gw?Tub;#RpNnTmK04G$_sP_l$-HORM-i=FW$W+Wf0%b*&5(M0 z8ov9MUjnd_;osAQiS^N4+3iE3bTSck+xlo|KE^?-6RF=;%YMPgqqLqRa$~gENRntt zFaktAeh=-b-2pGf{Q_#M&$)<>N(jbR&c3h%{m?3o+MeM_l~?zR;SAp#losRTE6H|* z$oU?oy{g8KK1!Il4@WF*8W&r(vwp1s_(Hnf=xZe}=gF0D1)%CEGa7Cib=?X8zAZyo*Z^m|z6jK(2D z`MPuHH_or-ODWwH(h>3ZRN=j3Z9GjCX>^s%^%<-@lUQuCdGcQ4$&|N- znznA+q&nWDlF*PBQ_|c!2zk~YySlf$dR&tk`LM>V^%p)?^a#GvJNAjTD>f(pYu8|f zo*+FFxq>b&b@KhnBzVWPnG7dUgMMA`CDzcM0=CJJxmKuWzo%2{)zpeW0#rXP4i5qS zs+sf1GJ72(oJ^9;R%&oyy9Arb7=SmTB0v{sOy#F3u4es1pIw$b8=4sN32JO%=_|5_ zChO5AxLEPrTp77JDB*vUg@03Rrr>%2R@1+#7$H2y&0*BJ!)Ryb1^5!BmR}gDE>y55 zK=6Vmq}|!UUbPb&cdQB`tjwy!z;Ce)Rf0A8w1M z7x0Qvk@6PF3LWr=Hc}`4>sZpkyF_oj?=~2Rd(%%qyH0M75fHo?sgpUJ1M(6AG0|xdy8b8qhw|4?w>%A zTEyix;Vt@Z;-(~q z>lf>$Yq9{N4*8brWPu%CHie>r8Uf`WTdns+U=w19bwJUJflAmRTxy=dd$P+mZ@@uu zY!<3SLEtQ)ej5TDw*I>;bJ+Fx+_VqUS3 zt&d1F8__gNq;2L?Hh3So@*>~bN?jI|F_iJz%+z0f;gBMR%-tHno8->V-kukkeR#rjJ&vI)&9{_PB9FhK zQN1dy5L5aq8ccDV@rSEB@|&S0$h$Tl1N%BXSTrf)c5;y1TgdfMM3t|?@+~o|*NOOa zT1N(hZ1TWXf;3|YHCllje#~KkDQ2*YW4?4m82c&TY|&*Woj+h@iPcpS5&6eXl~8Rg zkx3owd>lXm{hAYKhcBv)-Q(X;J%~nGLvf4Wk3eUOVp!*4*@myBMx`c)m1c->y?yeJ z&K>QS0z+-s8qw2WRQLVG-GaasJ~NHE(&fwBI{=L#oGD*C5;mBbE2f*8L$ieJ;@+@f zgNpCr#p~B@rCYBBB?CeA#11eq>S5yQxLfdhOzE~=tf;Q1NZw`vm|E~9&Zg!%muT!qZx4Dvq{SNRx!70~AQ z@!Y?c1n5h8P9?ZZvQ4`rd_D9b27*ApBz*}thFn8_kCh!w^Y|KSk1$s#en-FOQnVjM z`*o^EjblHsMH@#LcW5Msv)3b){;eKg&P7q*j&IDai8O6mv=!9}aPru2q$oR3AIBow z@h7sQwse=~>fG3Lo^{A$)|%od_9E>mBvEYrmP)v!|GmT|K0j2%m!4CEGo3wxwq)@x zN;0~X{Ta57#5Q@@FIN11S08wuVtifrr^Z1tK6Z39xB5;!i_pM z;di+Ok{kt9D_?VgjgIz#!lRJ1IJymu&1}Rg>;@v;VSVd6PF}+WY56#z=AT71fR@mX|lw`?4lNFn{sro&~r|&2XkVQpm(I!lq zkTuFBD9SB@o%m4$PVpVuOTM&Htn;!s^KFG#?xS(LpSmUc+#2XhMNVa<-xGk&yydgK zbKb`v+B+JsR?`?fZfKScL? zY_hvdY3$CPcWdKqANY=`@BpOk{u3uu9m@E8{N8htdXq#0Y*PVm<=e zLUfJpz4vU@SD274yXkoqqZq@B;A?d?wGW5lt`m<~{3cdRD8`%iS!NomM%nADyn-#U zdN!%#C$^4$Q9h!_Q){@jO*e&9#v>3EMPe_fKHls1W^NHs+4KGg73S0Kk-CVbu)*Xv zdgehs-lXa0+}#?I1~$(T=b>gy+YPVJe8$Gk$0Gj*{8%t|4CwKI$8%}}{*8A3WxfAp zVfUBy{@-@h5uIvLctnI(d&2p-=ZoaOZ1{u4osxB-&;uq8WPv2YZ%W`V@4+|Iw9c(0 zBPh)5#nTzY&B4ICf&iy7$=ZAEr$GxmXj?I;>pUaiGfhfw9~<(77E3Mp&uoHZs#)EW=+>;={-dD?!!%4|zEwg|)A{n7^FG;MNjjUCC~98!tBi*uiP9j|Ixyl2Jv7LEm}7^J1RO1rCa*@`+v9i2$w16ZsmGj zFf?>sC^BSaZzg>6Pr6nzubml6AklwY@^K2S*gR*tK!`ee*pIcUhG_E@!*#-+ow{k0 zXyiY_!ZkmWS{P>d4c=8+%$Ho83u7Xmte@2blN)ZSJt;NQ<-iLG0VeSS|IiRte12C; zu@kejB?#M2p68E-Z%sxTS@lqP)zY&nip9V+Mu3@C6*0rbL@}c@#alkKdp*(Z4lYUG{0nsehJLe7Q)5H+h+$MEGIF4w z+mDBK$yrM!Qk(H0D8}jUehNTvD$UfW>R)B09CiS9eub~5Fi`yf-8)##SFb!ewxn52 z&-ATpiwXYdN`rDXC$*U{(LG2dng{!#iW$rHP>Be{yk%5)(>dA=8xJhPzx^KnX2pM&`hOQAkG6BG z#}(8~hquZf(-&lzwVUiqqtrg?h#6M?83ew~5R1fEZ)3luBi$PW7op4=QG;8JUAJ3g zA;M#C>}On&={x~&Zn8paHw`Ib)FKpUqFeSe*%y1qTKE-e2V{9L%%Hz?{5NdAveE(= z97fKfFG&66ON_nX?^cfQCvxJ`PatIdWy*-FGT0{AV%ikhp|!PU!TH2aeN_DF1wFNz zL|!h$PTfLwZ*NbVLEc_|>+T^R!tz(P4oGdUu2U^5)606&Kymb{TzKy{3`ww5F;7WE z#H4i!y7t$en%xLzo}#$&B#X{h9`8!&yK`(U!jyIs_RgZtPCMSbTQC;&TVWmdaT)Fy zFOth4S4GBjC818tCo3^_Q?`CH>30Y-qr7d6vhf;Z!k#|`%&qQ?oX8+3PgF&EKizK( zuGJlEWQzLkDPL;0zH*6XRZMkIKcet?Vy?`4+rpAgZ$-t*4{5>QTak0bwugD}0_Q?s zY<54Uc5~~=*2DX#0FA6fSR4SQ5ZwLZBn@j8J{FyG{X~K@_j>{ANvNVVEZ=c7DRNw* z-`6lwXC%bx_E9CvXqe3lj;zXCf%+1xUis}GwNjA1v-Q2Yu{?DG$d9fQiRJLH4LR#9 zfi5A`_uZWU?eVpNOv)V7tc5-!f<=uKLN;l`Tr6O70HhHbEY8B8spJsvk}N- z8i6xHmhWD3@yS9#Bp;(RFeoZVp19H8MV>3)tdb(y!D9Z8XAa!s)smL7^&eJ511SqF z=Y*3VGA1rlF2}gyWd&+PZSUfd0jD++E`~{_=$+ygPpjyei*7meHXx`}Jl$I*Wo_bjP$+|w>U^fFXk!51=((&71KYtv-V z*;a(qUE=hx3K$ws`LKXt@^Fb0LR%_lzOTPQ-PhWkNYM9u`Vt(3dJUyvt&C4`y7{>~ z9Xu05Wp$()&_}T4v&Qb&P*++frJ7p2SEg@!F5>pLX=mjpdA3Yn~02!%vb>6n0TKF0;a|o zT?7tl5gQBsqMg*Jo5}R&Xo2Fd9_@j({+A%_zYNtL0!!HA|B2H)Jy9ND+Pap5DLj{` zJ#c>3L}@*XC<5*AhQFBHdUFIkNZ-Ct{0+l@*MPr4HE}w5j}aO9v_9pF@a@B&Whl$5 K$yLdkhWrotRFBpG delta 23052 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 Style: def _epg_url_tooltip() -> Style: - return _InfoStyle.app(LOC.EPGUrlTip).grey.no_truncate + return _InfoStyle.app(LOC.EPGUrlTip % ("xml", "xml.gz")).grey.no_truncate def _epg_libmpv_tooltip() -> Style: @@ -265,6 +265,14 @@ def _epg_prefer_tooltip() -> Style: return _InfoStyle.tooltip(f"{LOC.EPGPrefer}:{msg}") +def _proxy_tooltip(app_info: AppInfo) -> Style: + return _InfoStyle.app(LOC.ProxyTip % app_info.name).grey.no_truncate + + +def _user_proxy_tooltip() -> Style: + return _InfoStyle.app(LOC.UserProxyTip).grey.no_truncate + + def _player_changelog_tooltip() -> Style: return _InfoStyle.tooltip() @@ -326,6 +334,9 @@ def __init__(self, app_info: AppInfo) -> None: self.separator = tk.Frame(self._frame, bg=_InfoTheme.separator) self._proxies.set_headers(_get_infos_headers(app_info.name)) self._proxies_button.bind("", self.show_proxies) + # tooltips + set_tooltip(_proxy_tooltip(app_info), self._proxies.headers[2]) + set_tooltip(_user_proxy_tooltip(), self._proxies.headers[4]) def show_proxies(self, _) -> None: proxies_shown = self.config.App.show_proxies = not self.config.App.show_proxies @@ -409,19 +420,17 @@ def __init__(self, app_info: AppInfo) -> None: self._app_update = CheckBox( frame, bg=_InfoTheme.bg_rows, **_InfoTheme.checkbox, **_get_auto_update().to_tk ) - separator2 = tk.Frame(frame, bg=_InfoTheme.separator) self._player_version = tk.Label(frame, bg=_InfoTheme.bg_rows, **_get_player_version().to_tk) self._player_update = CheckBox( frame, bg=_InfoTheme.bg_rows, **_InfoTheme.checkbox, **_get_auto_update().to_tk ) self._player_button = Button(frame, **_InfoTheme.button) # type: ignore - separator3 = tk.Frame(frame, bg=_InfoTheme.separator) self._libmpv_version = tk.Label(frame, bg=_InfoTheme.bg_rows, **_get_libmpv_version().to_tk) self._libmpv_update = CheckBox( frame, bg=_InfoTheme.bg_rows, **_InfoTheme.checkbox, **_get_auto_update().to_tk ) self._libmpv_button = Button(frame, **_InfoTheme.button) # type: ignore - separator4 = tk.Frame(frame, bg=_InfoTheme.separator) + separator2 = tk.Frame(frame, bg=_InfoTheme.separator) epg_frame = tk.Frame(frame, bg=_InfoTheme.bg_rows) epg_label = tk.Label(epg_frame, bg=_InfoTheme.bg_rows, **_epg().to_tk) self._epg_url = tk.Entry( @@ -460,7 +469,7 @@ def __init__(self, app_info: AppInfo) -> None: self._epg_prefer_check = CheckBox( epg_prefer_frame, bg=_InfoTheme.bg_rows, **_InfoTheme.checkbox, **_get_epg_prefer_update().to_tk ) - separator5 = tk.Frame(frame, bg=_InfoTheme.separator) + separator3 = tk.Frame(frame, bg=_InfoTheme.separator) # layout pad = _InfoTheme.pad button_pad = _InfoTheme.button_pad @@ -475,21 +484,17 @@ def __init__(self, app_info: AppInfo) -> None: self._app_button.grid(row=row, column=2, padx=button_pad, pady=button_pad, sticky=tk.EW) self._app_button.grid_remove() row += 1 - separator2.grid(row=row, columnspan=3, sticky=tk.EW) - row += 1 - self._player_version.grid(row=row, column=0, padx=pad, pady=pad, sticky=tk.W) + self._player_version.grid(row=row, column=0, padx=pad, pady=0, sticky=tk.W) self._player_update.grid(row=row, column=1, padx=pad, sticky=tk.EW) self._player_button.grid(row=row, column=2, padx=button_pad, pady=button_pad, sticky=tk.EW) self._player_button.grid_remove() row += 1 - separator3.grid(row=row, columnspan=3, sticky=tk.EW) - row += 1 self._libmpv_version.grid(row=row, column=0, padx=pad, pady=pad, sticky=tk.W) self._libmpv_update.grid(row=row, column=1, padx=pad, sticky=tk.EW) self._libmpv_button.grid(row=row, column=2, padx=button_pad, pady=button_pad, sticky=tk.EW) self._libmpv_button.grid_remove() row += 1 - separator4.grid(row=row, columnspan=3, sticky=tk.EW) + separator2.grid(row=row, columnspan=3, sticky=tk.EW) row += 1 epg_frame.grid(row=row, columnspan=3, padx=pad, pady=pad, sticky=tk.NSEW) epg_label.pack(side=tk.LEFT) @@ -506,7 +511,7 @@ def __init__(self, app_info: AppInfo) -> None: epg_prefer_label.pack(side=tk.LEFT) self._epg_prefer_check.pack(side=tk.LEFT) row += 1 - separator5.grid(row=row, columnspan=3, sticky=tk.EW) + separator3.grid(row=row, columnspan=3, sticky=tk.EW) row += 1 super()._layout(row=row) frame.columnconfigure(2, weight=1) diff --git a/src/sfvip/ui/widgets.py b/src/sfvip/ui/widgets.py index 3afed38b..40c354db 100644 --- a/src/sfvip/ui/widgets.py +++ b/src/sfvip/ui/widgets.py @@ -172,7 +172,7 @@ class ListView(tk.Frame): Note: set_headers should be called before set_rows """ - # pylint: disable=too-many-arguments + # pylint: disable=too-many-arguments, too-many-instance-attributes def __init__( self, master: tk.BaseWidget, @@ -200,6 +200,7 @@ def __init__( self._bg_separator = bg_separator self._pad = pad self._widths = [] + self._headers = [] @staticmethod def _clear(what: tk.BaseWidget) -> None: @@ -215,8 +216,13 @@ def set_headers(self, headers: Collection[Style]) -> None: label = tk.Label(self._frame_headers, bg=self._bg_headers, **text.to_tk) label.grid(row=0, column=column, ipadx=pad, ipady=pad, sticky=tk.NSEW) self._widths[column] = max(label.winfo_reqwidth() + pad * 2, self._widths[column]) + self._headers.append(label) self.set_column_widths() + @property + def headers(self) -> list[tk.Label]: + return self._headers + def set_rows(self, rows: Sequence[Collection[Style]]) -> None: self._clear(self._frame_rows) pad = self._pad @@ -225,7 +231,7 @@ def set_rows(self, rows: Sequence[Collection[Style]]) -> None: assert len(row_content) == n_column for column, text in enumerate(row_content): label = tk.Label(self._frame_rows, bg=self._bg_rows, **text.to_tk) - label.grid(row=row * 2, column=column, ipadx=pad, ipady=pad, sticky=tk.NSEW) + label.grid(row=row * 2, column=column, ipadx=pad, ipady=0, sticky=tk.NSEW) self._widths[column] = max(label.winfo_reqwidth() + pad * 2, self._widths[column]) # row separator if row != len(rows) - 1: diff --git a/translations/bulgarian.json b/translations/bulgarian.json index a6f69bfe..094c35ef 100644 --- a/translations/bulgarian.json +++ b/translations/bulgarian.json @@ -56,6 +56,8 @@ "No": "Не", "EPGPreferYes": "Да: Първо търсите в EPG на IPTV доставчика. Използвайте външния EPG само когато той не успее.", "EPGPreferNo": "Не: Търсете първо във външния EPG. Използвайте EPG на доставчика на IPTV само когато той не успее.", - "EPGUrlTip": "Въведете URL адреса на външния EPG, който трябва да завършва с \"xml\" или \"xml.gz\".", - "LibmpvTip": "Libmpv декодира и визуализира аудио и видео. активирайте актуализирането, за да получите последната версия, оптимизирана за вашия компютър." + "EPGUrlTip": "Въведете URL адреса на външния EPG, който трябва да завършва с \"%s\" или \"%s\".", + "LibmpvTip": "Libmpv декодира и визуализира аудио и видео. Активирайте актуализациите, за да получите последната версия, оптимизирана за вашия компютър.", + "ProxyTip": "%s използва локален прокси сървър за прихващане на всички заявки към доставчика на IPTV и инжектиране на категориите 'all' и външния EPG", + "UserProxyTip": "Действително потребителско прокси, ако съществува такова" } \ No newline at end of file diff --git a/translations/english.json b/translations/english.json index f8f92044..76992fce 100644 --- a/translations/english.json +++ b/translations/english.json @@ -56,6 +56,8 @@ "No": "No", "EPGPreferYes": "Yes: Search the IPTV provider EPG first. Use the external EPG only when it fails.", "EPGPreferNo": "No: Search the external EPG first. Use the IPTV provider EPG only when it fails.", - "EPGUrlTip": "Enter the URL of the external EPG, it should end up with 'xml' or 'xml.gz'", - "LibmpvTip": "Libmpv decodes & renders audio and video.Enable the update to get the last version optimized for your computer." + "EPGUrlTip": "Enter the URL of the external EPG, it should end up with '%s' or '%s'", + "LibmpvTip": "Libmpv decodes & renders audio and video. Enable the updates to get the last version optimized for your computer.", + "ProxyTip": "%s uses a local proxy to intercept all requests to the IPTV provider and inject the 'all' categories and the external EPG", + "UserProxyTip": "Actual user proxy if it exists" } \ No newline at end of file diff --git a/translations/french.json b/translations/french.json index 43c2feea..8a6f746b 100644 --- a/translations/french.json +++ b/translations/french.json @@ -54,8 +54,10 @@ "EPGPrefer": "Chercher d'abord chez le fournisseur IPTV", "Yes": "Oui", "No": "Non", - "EPGPreferYes": "Oui : Cherchez d'abord dans l'EPG du fournisseur de télévision par internet. N'utilisez l'EPG externe qu'en cas d'échec.", - "EPGPreferNo": "Non : rechercher d'abord l'EPG externe. Utiliser l'EPG du fournisseur IPTV uniquement en cas d'échec.", - "EPGUrlTip": "Entrez l'URL de l'EPG externe, qui devrait se terminer par 'xml' ou 'xml.gz'.", - "LibmpvTip": "Libmpv décode et rend l'audio et la vidéo. Activez la mise à jour pour obtenir la dernière version optimisée pour votre ordinateur." + "EPGPreferYes": "Oui : Recherchez d'abord dans l'EPG du fournisseur de télévision par internet. N'utilisez l'EPG externe qu'en cas d'échec.", + "EPGPreferNo": "Non : rechercher l'EPG externe en premier. Utiliser l'EPG du fournisseur IPTV uniquement en cas d'échec.", + "EPGUrlTip": "Entrez l'URL de l'EPG externe, qui devrait se terminer par '%s' ou '%s'.", + "LibmpvTip": "Libmpv décode et rend l'audio et la vidéo. Activez les mises à jour pour obtenir la dernière version optimisée pour votre ordinateur.", + "ProxyTip": "%s utilise un proxy local pour intercepter toutes les requêtes adressées au fournisseur IPTV et injecter les catégories 'all' et l'EPG externe.", + "UserProxyTip": "Proxy de l'utilisateur actuel s'il existe" } \ No newline at end of file diff --git a/translations/german.json b/translations/german.json index 5bf9bb01..7e6a5d6f 100644 --- a/translations/german.json +++ b/translations/german.json @@ -56,6 +56,8 @@ "No": "Nein", "EPGPreferYes": "Ja: Suchen Sie zuerst im EPG des IPTV-Anbieters. Verwenden Sie den externen EPG nur, wenn er nicht funktioniert.", "EPGPreferNo": "Nein: Zuerst im externen EPG suchen. Verwenden Sie den EPG des IPTV-Anbieters nur, wenn er nicht funktioniert.", - "EPGUrlTip": "Geben Sie die URL des externen EPGs ein, sie sollte mit 'xml' oder 'xml.gz' enden.", - "LibmpvTip": "Libmpv dekodiert und rendert Audio und Video. Aktivieren Sie das Update, um die letzte für Ihren Computer optimierte Version zu erhalten." + "EPGUrlTip": "Geben Sie die URL des externen EPGs ein, sie sollte mit '%s' oder '%s' enden.", + "LibmpvTip": "Libmpv dekodiert und rendert Audio und Video. Aktivieren Sie die Updates, um die letzte für Ihren Computer optimierte Version zu erhalten.", + "ProxyTip": "%s verwendet einen lokalen Proxy, um alle Anfragen an den IPTV-Anbieter abzufangen und die 'all'-Kategorien und den externen EPG zu injizieren", + "UserProxyTip": "Tatsächlicher Benutzer-Proxy, wenn er existiert" } \ No newline at end of file diff --git a/translations/greek.json b/translations/greek.json index 81d9327c..08aa6bda 100644 --- a/translations/greek.json +++ b/translations/greek.json @@ -56,6 +56,8 @@ "No": "Όχι", "EPGPreferYes": "Ναι: Αναζητήστε πρώτα το EPG του παρόχου IPTV. Χρησιμοποιείτε το εξωτερικό EPG μόνο όταν αυτό αποτυγχάνει.", "EPGPreferNo": "Όχι: Αναζητήστε πρώτα το εξωτερικό EPG. Χρησιμοποιήστε το EPG του παρόχου IPTV μόνο όταν αυτό αποτύχει.", - "EPGUrlTip": "Εισάγετε τη διεύθυνση URL του εξωτερικού EPG, θα πρέπει να καταλήγει σε 'xml' ή 'xml.gz'.", - "LibmpvTip": "Το Libmpv αποκωδικοποιεί & αποδίδει ήχο και βίντεο. ενεργοποιήστε την ενημέρωση για να λάβετε την τελευταία έκδοση βελτιστοποιημένη για τον υπολογιστή σας." + "EPGUrlTip": "Εισάγετε τη διεύθυνση URL του εξωτερικού EPG, θα πρέπει να καταλήγει σε '%s' ή '%s'.", + "LibmpvTip": "Το Libmpv αποκωδικοποιεί και αποδίδει ήχο και βίντεο. Ενεργοποιήστε τις ενημερώσεις για να λάβετε την τελευταία έκδοση βελτιστοποιημένη για τον υπολογιστή σας.", + "ProxyTip": "Το %s χρησιμοποιεί έναν τοπικό μεσάζοντα για να υποκλέψει όλα τα αιτήματα προς τον πάροχο IPTV και να εισάγει τις κατηγορίες 'all' και το εξωτερικό EPG", + "UserProxyTip": "Πραγματικός μεσολάβησης χρήστη, εάν υπάρχει" } \ No newline at end of file diff --git a/translations/italian.json b/translations/italian.json index 21b6af60..8855ae94 100644 --- a/translations/italian.json +++ b/translations/italian.json @@ -54,8 +54,10 @@ "EPGPrefer": "Cercare prima il provider IPTV", "Yes": "Si", "No": "No", - "EPGPreferYes": "Sì: cercate prima l'EPG del provider IPTV. Utilizzare l'EPG esterno solo in caso di errore.", + "EPGPreferYes": "Sì: cerca prima l'EPG del provider IPTV. Utilizzare l'EPG esterno solo in caso di errore.", "EPGPreferNo": "No: Cerca prima l'EPG esterno. Utilizzare l'EPG del provider IPTV solo in caso di errore.", - "EPGUrlTip": "Inserite l'URL dell'EPG esterno, che dovrebbe finire con 'xml' o 'xml.gz'.", - "LibmpvTip": "Libmpv decodifica e rende audio e video. Attivare l'aggiornamento per ottenere l'ultima versione ottimizzata per il proprio computer." + "EPGUrlTip": "Immettere l'URL dell'EPG esterno, che dovrebbe finire con '%s' o '%s'.", + "LibmpvTip": "Libmpv decodifica e rende audio e video. Attivare gli aggiornamenti per ottenere l'ultima versione ottimizzata per il proprio computer.", + "ProxyTip": "%s utilizza un proxy locale per intercettare tutte le richieste al provider IPTV e iniettare le categorie 'all' e l'EPG esterno.", + "UserProxyTip": "Proxy utente effettivo, se esiste" } \ No newline at end of file diff --git a/translations/loc/texts.py b/translations/loc/texts.py index 92151f76..bf1fe75e 100644 --- a/translations/loc/texts.py +++ b/translations/loc/texts.py @@ -66,11 +66,16 @@ class Texts: No: str = "No" EPGPreferYes: str = "Yes: Search the IPTV provider EPG first. Use the external EPG only when it fails." EPGPreferNo: str = "No: Search the external EPG first. Use the IPTV provider EPG only when it fails." - EPGUrlTip: str = "Enter the URL of the external EPG, it should end up with 'xml' or 'xml.gz'" + EPGUrlTip: str = "Enter the URL of the external EPG, it should end up with '%s' or '%s'" LibmpvTip: str = ( - "Libmpv decodes & renders audio and video." - "Enable the update to get the last version optimized for your computer." + "Libmpv decodes & renders audio and video. " + "Enable the updates to get the last version optimized for your computer." ) + ProxyTip: str = ( + "%s uses a local proxy to intercept all requests to the IPTV provider " + "and inject the 'all' categories and the external EPG" + ) + UserProxyTip: str = "Actual user proxy if it exists" def as_dict(self) -> dict[str, str]: return dataclasses.asdict(self) diff --git a/translations/polish.json b/translations/polish.json index 715ca1c2..c972ec6e 100644 --- a/translations/polish.json +++ b/translations/polish.json @@ -56,6 +56,8 @@ "No": "Nie", "EPGPreferYes": "Tak: Najpierw należy przeszukać EPG dostawcy IPTV. Używaj zewnętrznego EPG tylko wtedy, gdy zawiedzie.", "EPGPreferNo": "Nie: Najpierw należy przeszukać zewnętrzne EPG. Użyj EPG dostawcy IPTV tylko w przypadku niepowodzenia.", - "EPGUrlTip": "Wprowadź adres URL zewnętrznego EPG, powinien on kończyć się na \"xml\" lub \"xml.gz\".", - "LibmpvTip": "Libmpv dekoduje i renderuje audio i wideo. Włącz aktualizację, aby uzyskać ostatnią wersję zoptymalizowaną dla twojego komputera." + "EPGUrlTip": "Wprowadź adres URL zewnętrznego EPG, powinien on kończyć się na \"%s\" lub \"%s\".", + "LibmpvTip": "Libmpv dekoduje i renderuje audio i wideo. Włącz aktualizacje, aby uzyskać ostatnią wersję zoptymalizowaną dla twojego komputera.", + "ProxyTip": "%s używa lokalnego proxy do przechwytywania wszystkich żądań do dostawcy IPTV i wstrzykiwania kategorii \"all\" i zewnętrznego EPG.", + "UserProxyTip": "Rzeczywiste proxy użytkownika, jeśli istnieje" } \ No newline at end of file diff --git a/translations/russian.json b/translations/russian.json index 7b79c217..e049deb6 100644 --- a/translations/russian.json +++ b/translations/russian.json @@ -56,6 +56,8 @@ "No": "Нет", "EPGPreferYes": "Да: Сначала ищите EPG провайдера IPTV. Используйте внешний EPG только в случае неудачи.", "EPGPreferNo": "Нет: Поиск внешнего EPG первым. Используйте EPG провайдера IPTV только в случае неудачи.", - "EPGUrlTip": "Введите URL-адрес внешнего EPG, в итоге он должен содержать 'xml' или 'xml.gz'.", - "LibmpvTip": "Libmpv декодирует и рендерит аудио и видео. Включите обновление, чтобы получить последнюю версию, оптимизированную для вашего компьютера." + "EPGUrlTip": "Введите URL-адрес внешнего EPG, в итоге должно получиться '%s' или '%s'.", + "LibmpvTip": "Libmpv декодирует и рендерит аудио и видео. Включите обновления, чтобы получить последнюю версию, оптимизированную для вашего компьютера.", + "ProxyTip": "%s использует локальный прокси для перехвата всех запросов к IPTV-провайдеру и введения категорий 'all' и внешнего EPG.", + "UserProxyTip": "Фактический пользовательский прокси, если он существует" } \ No newline at end of file diff --git a/translations/serbian.json b/translations/serbian.json index c1b772aa..667ebbfa 100644 --- a/translations/serbian.json +++ b/translations/serbian.json @@ -56,6 +56,8 @@ "No": "Не", "EPGPreferYes": "Да: Прво претражите ЕПГ ИПТВ провајдера. Користите екстерни ЕПГ само када не успе.", "EPGPreferNo": "Не: прво претражите екстерни ЕПГ. Користите ЕПГ ИПТВ провајдера само када не успе.", - "EPGUrlTip": "Унесите УРЛ спољног ЕПГ-а, требало би да се заврши са 'кмл' или 'кмл.гз'", - "LibmpvTip": "Либмпв декодира и приказује аудио и видео. Омогућите ажурирање да бисте добили последњу верзију оптимизовану за ваш рачунар." + "EPGUrlTip": "Унесите УРЛ спољног ЕПГ-а, требало би да се заврши са '%s' или '%s'", + "LibmpvTip": "Либмпв декодира и приказује аудио и видео. Омогућите ажурирања да бисте последњу верзију оптимизовали за ваш рачунар.", + "ProxyTip": "%s користи локални прокси да пресретне све захтеве ИПТВ провајдеру и убаци 'све' категорије и екстерни ЕПГ", + "UserProxyTip": "Стварни кориснички прокси ако постоји" } \ No newline at end of file diff --git a/translations/slovenian.json b/translations/slovenian.json index 67120a09..2f3d50a8 100644 --- a/translations/slovenian.json +++ b/translations/slovenian.json @@ -56,6 +56,8 @@ "No": "Ne", "EPGPreferYes": "Da: najprej poiščete EPG ponudnika IPTV. Zunanji program EPG uporabite le, kadar ta ne uspe.", "EPGPreferNo": "Ne: Najprej poiščite zunanji EPG. EPG ponudnika IPTV uporabite le, če je neuspešen.", - "EPGUrlTip": "Vnesite URL zunanjega EPG, ki se mora končati z 'xml' ali 'xml.gz'.", - "LibmpvTip": "Libmpv dekodira in upodablja zvok in video. omogočite posodobitev, da dobite zadnjo različico, optimizirano za vaš računalnik." + "EPGUrlTip": "Vnesite URL zunanjega EPG, ki se mora končati z \"%s\" ali \"%s\".", + "LibmpvTip": "Libmpv dekodira in prikazuje zvok in video. Omogočite posodobitve, da dobite zadnjo različico, optimizirano za vaš računalnik.", + "ProxyTip": "%s uporablja lokalni posrednik za prestrezanje vseh zahtevkov ponudniku IPTV in vnašanje kategorij 'all' ter zunanjega EPG", + "UserProxyTip": "Dejanski uporabniški proxy, če obstaja" } \ No newline at end of file diff --git a/translations/spanish.json b/translations/spanish.json index ba9d7a69..e0748740 100644 --- a/translations/spanish.json +++ b/translations/spanish.json @@ -56,6 +56,8 @@ "No": "No", "EPGPreferYes": "Sí: Busca primero en la EPG del proveedor de IPTV. Utiliza la EPG externa sólo cuando falle.", "EPGPreferNo": "No: Buscar primero en la EPG externa. Utilice la EPG del proveedor de IPTV sólo cuando falle.", - "EPGUrlTip": "Introduce la URL de la EPG externa, debería terminar con 'xml' o 'xml.gz'.", - "LibmpvTip": "Libmpv decodifica y renderiza audio y video.Activa la actualización para obtener la última versión optimizada para tu ordenador." + "EPGUrlTip": "Introduce la URL de la EPG externa, debe terminar con '%s' o '%s'.", + "LibmpvTip": "Libmpv decodifica y renderiza audio y video. Activa las actualizaciones para obtener la última versión optimizada para tu ordenador.", + "ProxyTip": "%s utiliza un proxy local para interceptar todas las peticiones al proveedor de IPTV e inyectar las categorías 'all' y la EPG externa", + "UserProxyTip": "Proxy de usuario real si existe" } \ No newline at end of file diff --git a/translations/turkish.json b/translations/turkish.json index 0c4a62f0..dd4a772d 100644 --- a/translations/turkish.json +++ b/translations/turkish.json @@ -56,6 +56,8 @@ "No": "Hayır", "EPGPreferYes": "Evet: Önce IPTV sağlayıcısı EPG'sini arayın. Harici EPG'yi yalnızca başarısız olduğunda kullanın.", "EPGPreferNo": "Hayır: Önce harici EPG'yi arayın. IPTV sağlayıcısı EPG'sini yalnızca başarısız olduğunda kullanın.", - "EPGUrlTip": "Harici EPG'nin URL'sini girin, 'xml' veya 'xml.gz' ile bitmelidir", - "LibmpvTip": "Libmpv ses ve videonun kodunu çözer ve işler Bilgisayarınız için optimize edilmiş son sürümü almak için güncellemeyi etkinleştirin." + "EPGUrlTip": "Harici EPG'nin URL'sini girin, '%s' veya '%s' ile bitmelidir", + "LibmpvTip": "Libmpv ses ve videonun kodunu çözer ve işler. Bilgisayarınız için optimize edilmiş son sürümü almak için güncellemeleri etkinleştirin.", + "ProxyTip": "%s, IPTV sağlayıcısına yapılan tüm istekleri kesmek ve 'tüm' kategorileri ve harici EPG'yi enjekte etmek için yerel bir proxy kullanır", + "UserProxyTip": "Varsa gerçek kullanıcı proxy'si" } \ No newline at end of file