From 6ad2e204ff4ef6b58dee240f57d73675f6331c7d Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Thu, 6 May 2021 00:27:36 +0000 Subject: [PATCH 01/18] zap2it: Set code download and installation paths --- cross/zap2it/Makefile | 24 ++++++++++++++++++++++++ cross/zap2it/PLIST | 8 ++++++++ cross/zap2it/digests | 3 +++ 3 files changed, 35 insertions(+) create mode 100644 cross/zap2it/Makefile create mode 100644 cross/zap2it/PLIST create mode 100644 cross/zap2it/digests diff --git a/cross/zap2it/Makefile b/cross/zap2it/Makefile new file mode 100644 index 00000000000..1c1531290b1 --- /dev/null +++ b/cross/zap2it/Makefile @@ -0,0 +1,24 @@ +PKG_NAME = zap2it +PKG_VERS = 20210504 +PKG_EXT = tar.gz +PKG_DIST_NAME = v$(PKG_VERS).$(PKG_EXT) +PKG_DIST_SITE = https://github.com/daniel-widrick/zap2it-GuideScraping/archive +PKG_DIST_FILE = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) +PKG_DIR = $(PKG_NAME)-GuideScraping-$(PKG_VERS) + +DEPENDS = + +HOMEPAGE = https://github.com/daniel-widrick/zap2it-GuideScraping +COMMENT = Take TV listings from zap2it and convert them to xmltv for use with applications such as Jellyfin/Emby +LICENSE = none + +INSTALL_TARGET = zap2it_install + +include ../../mk/spksrc.install-resources.mk + +.PHONY: zap2it_install +zap2it_install: + install -m 755 -d $(STAGING_INSTALL_PREFIX)/bin + install -m 755 $(WORK_DIR)/$(PKG_DIR)/zap2it-GuideScrape.py $(STAGING_INSTALL_PREFIX)/bin + install -m 755 -d $(STAGING_INSTALL_PREFIX)/etc + install -m 644 $(WORK_DIR)/$(PKG_DIR)/zap2itconfig.ini.dist $(STAGING_INSTALL_PREFIX)/etc/zap2itconfig.ini diff --git a/cross/zap2it/PLIST b/cross/zap2it/PLIST new file mode 100644 index 00000000000..b1fd3a8416c --- /dev/null +++ b/cross/zap2it/PLIST @@ -0,0 +1,8 @@ +bin:bin/SvtAv1DecApp +bin:bin/SvtAv1EncApp +lib:lib/libSvtAv1Dec.so.0.8.6 +lnk:lib/libSvtAv1Dec.so.0 +lnk:lib/libSvtAv1Dec.so +lib:lib/libSvtAv1Enc.so.0.8.6 +lnk:lib/libSvtAv1Enc.so.0 +lnk:lib/libSvtAv1Enc.so diff --git a/cross/zap2it/digests b/cross/zap2it/digests new file mode 100644 index 00000000000..226c16fba55 --- /dev/null +++ b/cross/zap2it/digests @@ -0,0 +1,3 @@ +zap2it-20210504.tar.gz SHA1 0120140ae9ce3350642a13a0e38b165153f00902 +zap2it-20210504.tar.gz SHA256 f570ee819354deed66fb30a43b31893a2dc59924f0f4d1d11fdb1ea01525e454 +zap2it-20210504.tar.gz MD5 4f388346ba7279aeab9ffdd3cb645a9d From c84e912a31976f1f210c1981f7ff01aab9f42dee Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Thu, 6 May 2021 00:38:26 +0000 Subject: [PATCH 02/18] zap2it: reduce configuration permissions --- cross/zap2it/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cross/zap2it/Makefile b/cross/zap2it/Makefile index 1c1531290b1..169e8becdcc 100644 --- a/cross/zap2it/Makefile +++ b/cross/zap2it/Makefile @@ -20,5 +20,5 @@ include ../../mk/spksrc.install-resources.mk zap2it_install: install -m 755 -d $(STAGING_INSTALL_PREFIX)/bin install -m 755 $(WORK_DIR)/$(PKG_DIR)/zap2it-GuideScrape.py $(STAGING_INSTALL_PREFIX)/bin - install -m 755 -d $(STAGING_INSTALL_PREFIX)/etc - install -m 644 $(WORK_DIR)/$(PKG_DIR)/zap2itconfig.ini.dist $(STAGING_INSTALL_PREFIX)/etc/zap2itconfig.ini + install -m 750 -d $(STAGING_INSTALL_PREFIX)/etc + install -m 640 $(WORK_DIR)/$(PKG_DIR)/zap2itconfig.ini.dist $(STAGING_INSTALL_PREFIX)/etc/zap2itconfig.ini From 0161ee8a5815b35f78295f9eb1e3665187491204 Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Thu, 6 May 2021 11:06:07 +0000 Subject: [PATCH 03/18] zap2it: Initial experimental package --- spk/zap2it/Makefile | 27 ++++++++++++++++ spk/zap2it/PLIST | 0 spk/zap2it/src/service-setup.sh | 39 ++++++++++++++++++++++++ spk/zap2it/src/wizard/install_uifile | 44 +++++++++++++++++++++++++++ spk/zap2it/src/zap2it.png | Bin 0 -> 46977 bytes 5 files changed, 110 insertions(+) create mode 100644 spk/zap2it/Makefile create mode 100644 spk/zap2it/PLIST create mode 100644 spk/zap2it/src/service-setup.sh create mode 100644 spk/zap2it/src/wizard/install_uifile create mode 100644 spk/zap2it/src/zap2it.png diff --git a/spk/zap2it/Makefile b/spk/zap2it/Makefile new file mode 100644 index 00000000000..98706dbd285 --- /dev/null +++ b/spk/zap2it/Makefile @@ -0,0 +1,27 @@ +SPK_NAME = zap2it +SPK_VERS = 20210504 +SPK_REV = 1 +SPK_ICON = src/zap2it.png +DSM_UI_DIR = app + +DEPENDS = cross/$(SPK_NAME) +SPK_DEPENDS = "python3>=3.7.7-15" + +MAINTAINER = th0ma7 +DESCRIPTION = Takes TV listings from zap2it and convert them to XMLTV for use with applications such as Jellyfin / Emby / TVheadEnd +DESCRIPTION_FRE = Prend la programmation télé de zap2it et la convertis en XMLTV pour une utilisation avec des applications telles que Jellyfin / Emby / TVheadEnd +RELOAD_UI = no +DISPLAY_NAME = zap2it +CHANGELOG = "Initial package" + +STARTABLE = no +HOMEPAGE = https://github.com/daniel-widrick/zap2it-GuideScraping +LICENSE = none + +WIZARDS_DIR = src/wizard/ + +# 'auto' reserved value grabs SPK_NAME +SERVICE_USER = auto +SERVICE_SETUP = src/service-setup.sh + +include ../../mk/spksrc.spk.mk diff --git a/spk/zap2it/PLIST b/spk/zap2it/PLIST new file mode 100644 index 00000000000..e69de29bb2d diff --git a/spk/zap2it/src/service-setup.sh b/spk/zap2it/src/service-setup.sh new file mode 100644 index 00000000000..e4b798c17c4 --- /dev/null +++ b/spk/zap2it/src/service-setup.sh @@ -0,0 +1,39 @@ +# Package specific behaviors +# Sourced script by generic installer and start-stop-status scripts + +# Group configuration to manage permissions of recording folders +GROUP=sc-media + +# Default configuration file +CONF=${SYNOPKG_PKGDEST}/etc/zap2itconfig.ini +CACHE=${SYNOPKG_PKGVAR} + +service_postinst () +{ + # Create cache directory if it does not exist + mkdir --mode=0755 ${CACHE} + # For backwards compatibility, set ownership of package system directories + if [ $SYNOPKG_DSM_VERSION_MAJOR == 6 ]; then + echo "Set unix permissions on configuration directory" + set_unix_permissions "${SYNOPKG_PKGDEST}" + echo "Set unix permissions on cache directory" + set_unix_permissions "${SYNOPKG_PKGVAR}" + fi + + # Encrypt password + wizard_password=`echo -n "TVHeadend-Hide-${wizard_password:=admin}" | openssl enc -a` + + # Set configuration according to the wizard + sed -i -e "s/example\$/${wizard_user}/g" ${CONF} + sed -i -e "s/examplePass\$/${wizard_password}/g" ${CONF} + sed -i -e "s/USA\$/${wizard_country}/g" ${CONF} + sed -i -e "s/55555\$/${wizard_zipcode}/g" ${CONF} +} + +service_preupgrade () +{ +} + +service_postupgrade () +{ +} diff --git a/spk/zap2it/src/wizard/install_uifile b/spk/zap2it/src/wizard/install_uifile new file mode 100644 index 00000000000..1a1de64f324 --- /dev/null +++ b/spk/zap2it/src/wizard/install_uifile @@ -0,0 +1,44 @@ +[{ + "step_title": "Set username and password for zap2it", + "items": [{ + "type": "textfield", + "desc": "User account to connect to tvlistings.zap2it.com", + "subitems": [{ + "key": "wizard_user", + "desc": "Username:" + }] + },{ + "type": "password", + "desc": "Password", + "subitems": [{ + "key": "wizard_password", + "desc": "Password:" + }] + },{ + "type": "singleselect", + "desc": "Location", + "subitems": [{ + "key": "wizard_CAD", + "desc": "Canada", + "defaultValue": true + },{ + "key": "wizard_US", + "desc": "United States", + "defaultValue": false, + "validator": { + "fn": "{return arguments[0];}" + } + }] + },{ + "type": "textfield", + "subitems": [{ + "key": "wizard_zip", + "desc": "ZIP or Postal Code" + }] + }] +}, { + "step_title": "Attention! DSM Permissions", + "items": [{ + "desc": "Permissions are managed with the group 'sc-media' in DSM.
The group 'users' is no longer used as of DSM 6.
Package user (= svc-tvheadend on DSM5 and sc-tvheadend on DSM6+) will not appear on most UI settings.
Including the following:
- Application privilege's permission viewer
- FTP's chroot user selector
- File Stations's
- Change owner
- Shared Links Manager -> Enable secure sharing

The only exceptions are:
- Control Panel > Shared Folder > Edit > Permission > System internal user
- ACL editor.
Please read Permission Management for details." + }] +}] diff --git a/spk/zap2it/src/zap2it.png b/spk/zap2it/src/zap2it.png new file mode 100644 index 0000000000000000000000000000000000000000..48218415081c065737ce0c50e4990b202f1e340d GIT binary patch literal 46977 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

>JwW!7dWVM4HyAAw!&s0! zT}EkCH<~y2A72vBT#W{~>Xlq?oTY)H0(fIy6lsKP++bAVNYbDxmS5@HGp6wlYwlO3 z*Q+=jni2r~X*R`qTY?B}3NQ+y67_8iF_dh72B}bdFONf-5VQeu&#T_Xq*tX$a#-P9 zF4s9CO^tDz9FEY{Q`(gK82Bs$s1Yr!uuuJ|B$xuJQgN)-h~rSnbIkee6G7jbJHLdi?{I~VcOO#Yi$v93OFeYubSUWnCMF`W*slY)4OS7PF=3T=V=$L)V z9e}q4ZdQcA+`@ry#pqRFMmQqF;plr(-f!@g3YzxZa0Ll+eym+^aS~PLz_`UYed1-A z#PMgC-AA?7G^!SnNs?x?kjT8xo)4w;h9*@TYbx><54{Hrc=L zj07AR)*4EZ_~S_&{U9^TX_`7y2aIdAl?R+PKOv;{be?BqS0oQB1a9#$=({{ZmT@EA}LkD}?Z z&P!C~&A}RBI3N&Z0pM9oVX>_n(7Yb>{~W1+=iPV~!-iyX@1NHW@*C%MyUkI<^Hb)i zb%1IuM76pKV@%rMP{t%b#*8;;?T@6>88c&bWeth3 z@cr)cxpik9bOCVR`O)2Z6AukWKtF1*qhuZsfZD#+fgE+B*R<{zE#W_HF^t_XYE@WUFgSwYoP|l^HyIQE z$h1i6sR72YT78dm?jI`ZhA@f|_yK(1Yl~CtJW0gnk90HY$XmxZ_8^qD z^fyz_9ESP=wBBCc1iQTdOe+H%T<>p9eW)2Z-Uhz;4eQwiksYHa=0*M7#x0(GUM+(+ zm&wCQlFdBSorp(1?^~H;sZ;_9jkUEZ!deZ^7FZ-Flhno-nI!R#)a%uE&4Do+&p!R# z8?80}SV*}mO=d5C)2LSKsMW%hDf)g|5TXlHY)+73cErKo+XE=}yrO%tzx7LDT2mrh z?$-nzGR?l-w1E|FC2f0qZ8L~{7}QD+!F@BmekRXm8+U6q61qrjDOH0xmP%zXBvw|} zP!H>c27ssbMh9b(-ANMtY`wmA<3$gQFFf~TV6FKq2!}o2-bR!%9X7r^WBHN-uh@j6@Kv<~WHV`xJR^yV1Zlv&eo z#?hhtT$|6zT*2*VX; zYRcNJaiF&-=-ew!RHQ?M*3*~`nKMNw@ZK3AT1)}m?+f)%Y+`F{rGb%gkXOkHumAuc z07*naRLyjQiDsRnu{$_Q=xqH2r7{x3SX*691HcOeN5>3nEs`YuKpe*(yl8>(*{8mH zxwG~sg^+tZ&nrAM$6AM#l`4ot0~D3o8Wh)mzjb5{ZNaZ-lle=VGm`Erebc4aTTu8G zV7ShKf+6}?w}Mmq7uuaOt)QNRG6J z%TDa70rDNdjwtH|v;Mp&FXX!sJ@e0FxUN9XTWlQb&$GcCwSvo>CC*vYY9XXls4U3B zD(Sb_8*dg;{#YDGKk0dXbkP7~6xZ)#=RTvfR%zdfV%cJ?R!0;iSpc_glwInbEzmmE z)4B3uy`JE;*H*x8y}ggNP(|wisKdggo`9kgFm1skyL>2Z40wa_Juvkk`8dxlo~+Gr zW1suZFd&GrSdJm62OIHLju7s_$;M6K?(pXBLbwAkcKm5wRlAB>gcg2J^Sl>1oJWah zodRRvJJhU0wOWHx3Z+uHune^{E5?#Zl8*|Z{usa)E(&0L_NnjgGA90U5_E;<`vv!H zA;fWvYOS6Yk3obnCoW<&D6+*~1Q0(>@T|aw0`ROoGm>D~FF5sSf zUWc!K^>Nf{(H7S-^{p;ihK5!Owex3i;@T37rftz{ni&v+v9r7idt?pw>oZs^C*Wy& zG}QkenHfqb+`8+2Eb5&b`6>7QIo%{RARr~6wT5#H>nx(Midtv81BOZffY|LPVCY*wI!AmvU-S;4}p#qQGyUcJo6wipB~_#qbj1Q*r20o=XsQIu49BU{{JO829vT4NmZYCI$qs?}PdAv}35wKe7%W6WohBnh@9Fot3E z4rcc$rM1+$*t9=mEvi|(qNhFR1}OHkP5kbXnrolsy!%|R%63vvhI1zaA=rS%;HE3qhk>Lp+hxa^)J;5cNT|B*% z672&Vg`lhtl1}@_1SMF@s8*{mCMnEplsRHxO!C1v4ju&J>-E{6-c?<_3t}Q$EaK|m_^;`s|1UFy=#4(mrqsj(y7YK zT^EC~+dqKAdme%(g6`P})R6%cBB^E8R@e^$2&qRVsf{&nF-iRHZ3B!?KlzF)b3cL=IYB{k#HOLyawpL`TMcP`A7q$bjka`&cF zLdJ~U$0O))wj{M6#$r%|6y47|F@$GcTEfaqNos~K0^GIl5$p{Pg5fsFGNhjO_<`+> z+Jo#6vNa}*FG-Zt?W6cjoVg10i07hfXTN(Ul?hq+bYF4Xt00htT`VQjW>|u9* z19$m5HNf$%yROH(-gWQDx*Co~Lhl4ou+_^@TD92uN<34Ndcm)6kkA{Sc`B)o99u?` z%+7PWVaFY~cInn;L?rjoqK0{}HP8thrG(NdE&S}25JoY=uny;nDN)7@aO#M;Co%E+ zM%{XKa1dp>Ke#B2!rfaWR`kJrDJC7+rJYZ|M(-=xpQ%c$bCKDLZ=tKQT~Y6ioXCEU69A?)<`wQb@*||?iDJ$A5G9Q{yuZOVCLAOZg zqIbiNfX2PeInE^Yd*Ay&!6}c$N--&Sg2?apZ3xyZcAbnt7E?PaULC$l`n@!)))bz8 zaT$pbQ~J~huiJ4L*DT$N-o4G#0c3b+Rn<{aE0slu_^5|bR=cqn<;2Wz)@ozTrxFui zF_XY(t$8Pa2fTvWqA>>bFly`WH>`vvqCw_Y=igCk6VY1XeeZh%?!5E5sbq~pEJBE- zf#1LUYJ$ZnmDGWbvEYXTvS{G==`xO;oIXj-U>qo4fjjp;1TDO-=MUO?^DcV5w0f!2 z`lkUH0<~HVCMhOCAZLx%np>o>!gH8B>JkaIH-MP z5J1aYXfiYQ>{-IcKK2Oq>{*^Fa7-oiuA!!YNEo}1$MEXYC8?#bSPJ@+&>J>iOL+Rl zWt_d>PmQEzFiNt5yZ1ec9p2t%V+k4zV2WBJ9VN9=S)b|vacnY2Orfk%8f!jYuU8Mv z6fjzA-c6u4=4`Q;#hf}^;y6hIO118q@;8ix?(2A4{K7fL9d}%lN$P2lW&%>~>R&>4 zxK_VrvFnxTk<poH%9WKX_Y z!qJlp6R(TJaJZy=2#5DR2qiSIMdcjo7`Iq_7~7UD5j+jgFTq-%Uau7xzQb_NN^8w0 zqo{Zf^+{>j1IB1 zolb83TyFJV522EJU2j52D5>Ck9+dVGhEZV|F)g;n8%&bCpRFtO=@br(Pki?qOOEYF zrBn-Efo#z_hk6)6YYnY5q!c5U&|4j!diX_aR?N*eAHw_J|3+x7CRG0~m(X6}`qi&l z>^c!a*vWu?DxqsbOXyD6Qq3fF7*8g;K#;_(yYJ5=GifQK4=T#DFci4cZS=IPCkJ0>r57rRWa zi>iGG6?o6P@58f^Di%seM4h* zxU_OLUccv!kfb)-g*&w47_4Df(ULmvPp!3&D2x%uVbQGd4r9&3QwxkwKK?DAo%=o^ z^StPF zC9~K@&-VdHg!MYCEiQb=IajjAel&`r@>Bw&Ns`ww@D{B#6=qwc)V9b>jhMx5EiecD zT`{b-w`*~ZaqF#D;lm$(2)?h!1Rc4A9`WZ9;ME;=o{YyPsR@k5pbk%(QC}MBp~R7+ z%LpSm7ThNY+_L*#T(NL{m-N&g?26RC;u%y@cl#X?HF{Gk&qo|5g;w8j&cQkRph==T zrw$mOdg438?7l}39r8RMvLLo-tt*r*_SAHJfQdo8`IKGXp7mYtx(9E3<1J%x#7Mb3 zQVG3&ES)u2J~N)c?~)gz?1f|bEF$3axe}f~F?ugGgK_234Y*_Pn>Jlb8|Gm_z&EVv zX``fWX2dWg!g^SUtufEwvCizW&VI-mQwZ=B28>A(?`P)sDXmE<4H5;h#V7(mjhMwE zi$oMEEn0yO?Y5l`ZK|=nT)`(l`4(Jp#lDeBYN7x_?7%p+Ejh-nlQBxw(MoD9M=zl_ zvJ>FhmzHqqwbIBgjlo#dJ8y$Mng|S8k zI|paYJK{JhB;dO+V06|#L_{~G&JkJ2LUhg{iV`T*Y-%+u(2h!Gt;4-dUXh0QILEmD z`pfX44?Tz=&?7SHOGvr9crSD>pcOjoIuS#f(SQ~aW6`gTTtau+|LT#%lP@fz7Riy= z8zo8HzW0r|bm8jENw>Z&Ep4WrM>o%hW{p`!jOT+P3M)(2V2##YWlZvpsR72v|NiS` zX7`@7ScEPlL?_L1Ng6rF)4&$H_k`JOqSA&1-MIOJ@b-7yjRzmR4WnqSno8)&<@+wY zmSAZ_lDe!Tl)Y#o*F^-pdLh8GFE63s@HsF$T(NjPZrk$!M9Vr_@7UWQpa~0b~p+EPy zo3Aek#g4JGSjHzm`4(Jt)qz6ojYK5~u@jR_M3_t=N3QR6^I=Hkok`$G{86 z7jWve;=I%h#*()S_Z@f}Dr#x-IZRt;T#bC*56l`RJkJAz5QSkOIn>MzaJDW$Xq6#$IPDO;3MLguv=3r_PZ z>h_%MwteEdp@iK;wUVr@(zQYBWLZy^?LQni2|dw z_BMd-%&TY@vHKWfVU5e;7RAtUi^DL$!M)U*{kX9(MWs^0CqD5OTz&Pyp}f>WR3y3;s%asemLmWBew9sVBNbKor~>4gp^80u+Wjbt8= zm^DhN5k?WL8D0V8nJ~`Tn~g~hPYf8JeC%5U@Y{tHOUl!QG=E|SqBsF%9;|-LiWR*( z4h*P`DN7w}L)6I}fvc}Rh>w5#5mYL{fGLP-IwW)_nHV|jIuSu8Jm7OoJN+p+eI>)A zSm4OfWz<47kg!ptaCqN?IJj_SORDJlkgqPvqz^Eh)H>%iDycV%VWf3Zj9Pvm0v>(zFy8Tw zy9c@!A$EYMjHw)yO6r}b;(;Y}NypQ9X#~8s;^Uc@mSAna&y8{Ij@xkS?)xB+nv7^` z%E%Ff+y)%lops2vLTV%b4at4D2`+qjI4?+2l!s#bEj*^m^mS z(Gv?e@oKrBC5&Cce%yb_+fdS#w44~)>n8RJdc|+<<6(_y8w4LoVvr;;hBZXzF^!Jh z)y5`|j2##s`}Ws0JAP0|v7~e{v5U-%I8M?6w6gfP#bI~9UM5J_??LEpC~E%fm~q9S z{rJQu-h#!&N>B14mC(BZC`|iMQQ8hc^(d(YF_ua-C}F4ix(GmI1fD#)jMbX%K~gic z@NoD3N3g$g`Q{sI7kgu`tdRZjW!1T-mn{x7v8cP8Zhu+I86JG_HoWa^clLB(A$Cr$gzj)3 z%Bu!DPQ~bj09L#Z!IVnqPLKHfs)wgvT!JxMRfY$y+i@Fi+I<(cDj~L2)utln?6_EC z&KUE0jZ%7uqZq~vAG(uO+<|lMQEQWd#bLB${K~JOudBeq&s(>icwxMn=W)uC0GdRZI!2I zVZ8WC1;@{nH#;}LY^x=ZMwKJ^m1(@2cKQ!i$cy2FC?Wq|t+z8(9^mv1O1Mm=V< z3_TAEbkYpN8e6M;laPp`xS&iJ2D8)7+BZ0x=&=A}7_IFGaHmuXQWhnn4VW2H7GH?A zun?Rfjo;mEj_9};oO8JU{+sZg_uSth6e^d{CCut5uUPDSrL&}7@ar=pp*KGBR8k)~ zx{RcQm-@zCcj9%s?r7N*d&{IM+7UB~H8QBAmQq1U55^?0rkMPCmrClp!Z5sMEWqg4 zT}MQ>Xq~3(4Ug_XlGuif?gtqAeMsYEi@m1~uKRt<-+bT0M?Ugq++T< ze%Gk-tu>rOA%!J4O`Zm`yUJQ~-B^H;neQhdmeN?mV!YAD*ezvrQAK7aVTajl;%;VW zXLdMva5p~v1Mk3&9gARQ5b2qf&>bc9i3mD&U;u&~mVz3ja5H~x#uA=7wuB379*7v8 z^l{H6Z^7Qu!3-3;M=A`o*-nr(4(lkDG7b19p^zkTLFLG@U~lHP8f*Iks=iU}JKy-4 z58w?_Nh+q<6~R~w1{!Q}e3EB8Y_a!y)XBb-_L_O%ft&Gx54;glNH8zMISjKs}*?#2zfZtutvN68eY#VNBn zYfR;|R2qpfg`^1Pg(aMGcO`Mum(8i~z&GdYl>lx~N*5H=4OnAS*L}g6E@KbL8Ddgz zkW=e+KJ6)d=tB?T`0+Ko{IboelZdQNB|#|xDFvjY?BC}1LJ)+Y#=T9QW!w@lO_@AT zvu}h*rA_*N%0j0^_BqXo-0UZ^PQsuGjOmtOR^zHCv@9CaxJ~^ev{d2s9R&aKAyjqg5#SCa^SWeK58z|L+LWW+nKzZnl+ zb$wTm+U(~dnPL%abX4bqRyi#-j7ghi4e#7#FtcQKhvPU5JTK^}b6Q_W6ved#0QU%~ zP>6kzQu`u6L$^g8Rc6aX*kTX()lE9|^180aq|Ua^QL=Xi@a31E$Jbvy0Rlnl0J^k@ zX)2pG@TSjiyTj$J%cYi_aqFO3{eLQ zP+lUc3s_YFgyCtxDQ{lk) z%;SGg3_dJ`sK^3pFA@=)b701%-smFe{3s=Lk!*3$>l!4DY*Or_p%k3M7oK|#e|z$D zM~9BoKD-%~)Q%aq9k>)9xvgD74+ALUa7vCd7<{u}Zy^Pg(pmIEQI)+}Ip=O<=ALdw z&%n4=Td4qeosg1pd*IMA+PX$?=P*ItlUm&U?&3v(`Xn|(Uuqw^v@{df>X>o((kt+h+wO$kB+O)#m9fXIl!~6y02;|2 zLh8)UXop6dENo{FJGZY;U}W(1LWqi#s?AV7@FcRF-Gu(abcT5V!!pEvcjIx&oml`5 z2JrP)PT_Z+I*P=(o)y0e%8=f47vg1R?5ix|Gk3iK`xcf8eJ-PzYtz6WyT6ATbsC*> zum$vjVF2u$0&r(9cE+B7@tfcHDgn4v2qC4EKtYa|)C)yZEu%*bK1H*|X$Hts^*Vm- z$P;)i4EqZuA_1?w2qE>u(wnIiL_QL3hM=PnX$>1 zL9#soqjUBE0hdat3aP({v>XtG6k{uOG;F+LQ4?Sq0%<2PzIEypzV!SvutUV9rC#dk zlGMzM1B*-efx8~Sp2|X@z%tHool#_I4YgiH=A9M_))o}cm^xuDan9XP3}bYBIf(X( ztQSiWlgTlf*)9|6?NZca8Fc3!q-6Xog6HX46~F$(V>lOvL)oW^2wrIkLQRLHW&m0$ zeBW(%;m$22^dwkg5hP&Lb8gdkMj;@S${Sk^jX9aicdxa{wZ#A<_)w~Z^YjrscII>;*C>>RHzi(bX2!i&T!r`E`1+0#x@cB4&JeH3 zgJ$Y~kV3&Zz}aF7*Mbo+yDeiGw|tt%o_dM^TtPy3Mc5aKQW@Q>4LCiaDdY71UMy_! zZ%&@TmtS}eMb_h1etF`OnwfEMX&FCo=l$4GDvxXqk88e7(;92CM$s_0S!)Xj^ky(K zG2?P;og4}n&zyTjgK<@BA=zPvbE)H{$TDN&YGO4Xy^mL_Yxs>PAIC}*6{`w}pvy}W z^-?P-@xfaT>D5N6x-lNZjj&i7Pd{%5ot#??D#V!&hC8_uX_m zM4z8OY%z&RF~3Qyx7^N1LKMOn)3-C&@gZwA_e}Qyj9dcfpb)a}NziRlF}QCjJq=@0 zw#iu=4B#s-zgW10-oV!wb>$N#%T(-OupYB6KPYRTVowL)Bfs?aF&iWD+LChGu z?3~j>0V5Ii09cj<)Jr64HpJX4uzQr9(B^V^^yB5#75wIrC$JjFqpfE_l;%<^Z)||? zD}|5Weh+Tgdth5WyGhtVH^Tvu0b|-Dx}elR$0Z`#H_yn_qW}OP07*naR1`2W^L`>K z2`NEh_-UTfVVZ~p8YeTHCaFKp5m}4hdg@6$d;Z)=B=kl}t>BfH#xkFn8E-svE#7&< zEklPL4I`(Eo@diK=bB~6Qa=g1qVxxsLAZG+UNeEwv;d7+3lN#E#IO%F6^YUSx$FU0+@Sl!6fwd$aZ%IfZc%?;1?T-lX z871xEQ+M2l*X_GxBET|BHtj;!XWpt;h(=-SA$K?c5DeZuEMwdwh-AtbhrD6P+jWYr z7(4DL`|W7+nZ&4>1pn#C<9KdN5_-dZk}7S7Fp5r-3_Nnp>+rVgZW<}zPgD7^X<3`O zosl5mtShEyEf~zMJTNeR^Xp&L0QOMkGA|;5-!=MQ%oa$EBPDQF*(3w_(_=^R=Pw-t zPw+gH7eECIg&xx}xMaA=`ay|~zE@Rr)98sP(Ey3(iL@Z;PGmRZlocIF) zqcKqc&`wcM1su+(Z0CmX(=oB8RSr$_c;Ui%{La%yP&a1M-DV1v)C{1kJ$&MhdvNWZ zeNzDxqmeuDtK^|~AJ)@yH^`7YO6dBVpPA~)EvQ}Y`;Za8lX0HZzD zn#F;D5ukF;7>kh6X>j*+gV&^_$Sh{NIA;9uu@~@_mtLHz^O9Z(dPqs_m~s7{{rL2q z_oL$Z^JhMxb(x#pgb)B>=(>z){}+Inm#wvxfq;>K5(vx1FuZ1P_pCkpX-cu0rt#Fd zv-qteParhO)G;buT7cAph1D<^3!aZp9lj5TcI=+dy$R3TCjL+Xv5XC1T>v8(2pAo+ zN1!qllJ(NC7&PSce9Z2sCJBD)$dfp}wmOy1awtj7z}v3B2@hX={ro{s1u@C8<`{+9 z7#Z*wtOf!`X4VV@g?W*g$Lfrpm0mKlHWNdi**P(&lwKf$&fVrk;Nq}saa=aVBHAWwSCD+_ zwX^uo&pd_5+NpO+=+YvT7xXwk8OuQlpSk-DxN_(2secZ$GQj09`TlO^9zUOtf;*E!{oj>TQ zVz@0f#;iJ50nkW9w0l5cq!JN{V%rbU$eb_Z%t^i&V;CJXzWn@i`1;8cGZnrfwV!qv z+~V49*?$lpdHvn+mD)Cvd6aW{ta3h^aSTR5Sp)>4U4u&LfI!r(Vb!3t7$D4f;OqhE zcV9h&&p-PV5@%=be(GQW(kpf54qz+=0X}v3K3uxA77s|di-K)}e% zetLi+A0D+LV*6B4?Ur1r{75OO0MlqB%IH@+SZ9J*#cAEx>t z7Kw`hfbyWg=%w<0{-7@AVVuJkpL+&hf91qXZ)gok-Es|%8Mhz29G|>nw!F|68(GXl zc8VJeFqfE_1^`ABZfv3KLOUVfQi;&nU7w_YhfL~@#Nz;Td!{m zyD*W+It->g(%*a2>v7-ZSIr;vtWd`ykb@ilbR~Xji}%YS2^Qy=xb1ed?KvznzVPg` z`1a{j+v?h-@*smn+`eN8AH3x-q!1Uy^Gvfxc!tk^Bn+*8V8lpn;#|hg%6RPT5&V~v zUxh9u@VC)(b6_0Yv4DSY+naD;ae4lrX9g4to`XCnFy>)H1>xhY3utbsCArY!CB?B!Tx{eFyG1aM?u#F0;%QM}xNAyZdehj4lhOEG~#~{%odx zB+lT=$NmUUoI3&u0gFX2EpH39@0fAN?kn-O%kF?AF@M-Igkm`o6*vn`w?Aw(Gi=_A zbsQpkTszu)=iGdJ=hg4vPmljO92@`x!KXopXP+^Fu_su>`>(tYJG{#LLC+MUZNZ@; znop(Q3Gl|bZ@cEgR(1-V2gSTCJ z`_xP5xuWSt7>m0v8MM|0mC_-AteGnpb~f`do#Vfq{s#W*%YO#TopPZah|ho!&g8~( zptJ)YzUqD~d*%6qo>5#(F{CIEAqG$#7#KMng@84UVF7HHU47iF;Z*H3e(!}ZU@cke zTH=EcLhzZHlhjH`yz7cPaoy4-7acp?PHO@Mrv)-_elTEUt~0Y^F3tgyH+Ah5`HQ;Q zy&Pwh4|ba6QS4&;!LdKY^D8fGkkA|V*$WVSVTPCn?J`FP{jA*X zUBGZ)K06RFI_4EHTjqjlpk?7Y!^Hm-{qVXSubyEjQ8{fL{=AO67Pwdb}_`(Z+fag}8@4qrMpNHUcQ++@0*>@ctJaE&z zEb1?P=G5QfYp?vx zz(+{E)YB)a8H~#+yYc=*_oAZw`G#5GF(x-P<4n}}QeT)V zNlgIWbl^rjbji(g3Ec+>7rAamaqf+f!C@I=20}#inv`;FAYhbAg#a$Fb#Sh@5`bg`AyMN)6_fmP&`reAYSJaF-9eh#EG6ZDwce2DF>KZ~foKF(Hqwy@)R!{SxY? zULd22CoZWOKuLLc|Dk(vd1d!S#Q^)+!yz1d*KT>Q9U`dgx)BrS0MPcN!}?uuWmS zFGKLFAg)g2+OAsIj}KgRA4<}@=r+9Vv_3i?s|k#SZRDWU&HgTWIJ4vIT<8j6j2MUt z53`ewGZ%H5Ghm)yc^+Rp`Xxj*8lh7nhQKLoQvY)VaLlOa03W>Seq3JJb5Tg=Vdml_ zz;Dp?+v<^K=Rk!pMgjd^o4s$?^I1#Q@c9?M zfD^ToBafFPUK^{VCJ-Jva5L`RcipxHxlse)w40dN<-y&&kR0D6mb8q=cL=-Xe zF>B1wz}U(fClydSsT8YW?V^L6_iD0=&p-bKoT{HH+zY+6#9f2nvlvzPGXa4|4&I8p z_g*{mAXl`_d=$3ENv$_Vvv@=y_Qll3_^J>h84ef)h0N|bYb~rb1>9(EH2&uQzr8n) zcH}zm1ApIltFXPjcaq(tM2WIxIa+N;6DRgaA|;VdqKLGeGc)nb$>e02@r>gmJCoSi zlvv5JLnpFlobie6*p3t@Qf%&fvq`o{N)&gI6qn}G+}Yji*ZumfSgP**@<%Nw00p1` zT;Kt(anE_|Wg-JH8N@@b((-(diAKQKDjsUq~CUy5}tK*_}8b03`h%sPR zcI+qU!+55$Ublia-MbBT+aKf#`%{e$EOoYVDm7k=K0RgZBNwMUg}SnBhr> z?eLil<0;9hcfb}SVr3nyoAtr+;#I^+=abl-pWCr)aTJPXP>&ADI5M|0uc!jzFjPqx^9vl9>4OM(fXX{ zc^3SP0#H4laS%Wl*F4BUjH*{dJzF`8n_j&I=c=n?KRcPQ1?pkKphF5*9{M=`+|tE6 z1{4Qji`(J48I}_28hFuRDIi;_ktV7Dool3f21W{MreF5G8jQBkkW_+v#z~OV<6wa8 zUhf$Xx4&^0o?Cf-Vg|~ytbk-KlZ5{0?)T!VL!W@NL!!{zRhBp23^C>28w0I{pEEk;}MFH*ha<@?HYU$+X3KXLh09z>q^ec$(e zZ{Pq-)X7^Wyiq5$4g$VJgm=rQapS8uW8K@Bu)$9RLK!5>Z6&oL#+3&@jt?## z+_4gR9PG?S&TT&r^=_}x+6N#|mbxYp5eWRo%*=enDlmrX_c5*gHQ)0rIQhj|KI5tp|-rN9e-GBZD#**1Gr{x52+Pu6NRXe)k30rBwtjHC9C*xVfL&h_!-CvopP--3ae zU}(@Fc^8CA!}mQf%q} zviS>kG$@XWEe>kiquhrvTQnMCd??4U)M^YMqL-OD^8oaofKd^ZjgiNEuO^=7S?RSF zr0onp0yfSwc6%|dimu?6*KfxwYsV)h3f?`g_9|vgR-;6pTM6= z4G%EeU@~d@q1#^9+6NJ=K>5L8C?j0u9{GEDPB53x=HlZIE;9<$MT)F<2}tEaJy5`+Ha_T{hJ2OE%p_!?-c=z))1rNO^~tylv&wfufR?q)JzqR zoH&B@%G)S84l3I09AG41f4+tbN?Y(Y0I$s0DO^|taB>=J`UGA$^$mRd;Qx)hvkXC-M~?m40e1S5l(NNz{4kwpr(Vg7MBRKj@l8dN)d3dP{pj$ z5CEhEPRU@WP)4`lL%G2o(cf>+Pn z2}!AMAC;eRJ98B~$!KPVQr5cZ2#6nFSlo4TB)}MQyQ9A6tyHVkpl_N5=Egi4IcUq4{+G$jn+?AD`ogLlD)$=WMoNB zZwG6%A#VcqOsM#q`0k0jv0OgUvAU%=p^|!Eu7*9i&i-(f7dVB)rzUrs#e;NA!Lo+ zf&c@!_7d!{QJjH1*oPY!RKRT_ti)m90e#w<%RQIeWi;1)elm+wYk zoZff}ubsUMM)c6iQishJ2Wd##D5GmZZM40nv>>9}-CW`HNP+Qxy!@{U1P}VYccNOU zgpSiep)qPIVJ3<-_QMX_oeP0*YU@orcIrNOriLuxS%(O-YBD6XBEi981*J9;x>Zuk z!_7W@EWVG+sS>2bMR#-&PgauD2f--(vDJwDuvQ;aI7Sju<1Y67hFtO0#_d z6A$>Up3z!AZBI@IL6~If&ZM)(-Xs#CtT*xS$-A*qdAFwq5e3C4PJpC7kgs81uBVi; zKvGXYl-kK@IC`zgJbW06Ir*4U3x8_{^`^mp*m%G2mIkuQo;kE^5> z0CP@|$gQaN4d|2%RBn7FHLGkAI_=J#*?bnSp1lLccorV6fksE$=i=X^!9Y_@RRZ_#?jg=!fz4;UpIEDyjW*czOATKvE0! zY}Ym=v@Oug5_B=X7xrDW5p^IS*;}EdT6d+i^Eq~U#0)vb#s+Xk?Zp6_K^K4sJ~Q97xVUF^p!;g+ zQr)jT|HVqV9Fz!Jx$prv_LI6}dqEDUIBiKzM886+Cgee+k{ftir_a zalpnL3oZ#Iv=zhWF-rWVFp*o?@`r1@zH&F--FPA@7L3iM#mptEwT@0b^~4snhOcX2 zrL6T`3<58Ff{1P#_IBBQ^2>Pj>}{c>?#33gJn$u>m5+!m#wj{vWqd&b99N0>=DCH% z@>l?4a7oSMTKf-`tp#C{_0wi3tT72jU7uPlz}FdM8~s7)$9{9;Wjww79T?F=*}RGf zbK4}TT^=k7omox$1`Q;mI9R9sE4?%+;vcefDSJ%c+WxVuZR0Kozw zKn4iz5M+?x!QI{683Msw2cI+lUH817y?Vd)s;>IVcGs>VNjUz!@JUcALZdtASE?3PDOW2mZoBXToV z!>n)Q;eE%~+|6#)u_epGM?EJ@%{DY|XP~%scX6I1AHdj#g>9(VG!gGIFX3m3rL5k^ zI5N?rz*p#~an?m;tpZ_<0>4299X_)Vo-H2jtl=M}>m7sEV7vPI`_ET5NT02DzzHDf z9CFKKBLG(`4L8RJ#jpBK{fU{>NF@ic01!rbN}A{M$=eHXB6pc?P{fK(|LUl{)26Tk zQu0fke4(UBm2>3}TznK9#`H5IgH_uBvI@kVU465cM&8F_75}kny;BrRw!-S#2T0*% z%7mU8yKuuU1YMF+y5ZnVyvklkkjF?F4I4wW4H@E<>j|M?5_;9~{~Cnn-k zahAGS3X0JM+n>s2n}mogCaQucR&_ThgI@JWN$y>%lma;k9E#XE17+=zNpplHo!jPBm-|4XIxGx@Mp*w9u>;8>g{~*!V(T_U2oKPE7i+B za^4LV^x9-%&8a=Ghr77JkWUC2-lOWVs}lq~1h?0Dt`}I|Fq9ErNwn{9!zIEs-v}Oy z=b#XIpFBUxJDk#<@WhV+Y8WjS3BI$tF9y~3pPSujAJ^sS@Mx}{l`Q|$W%6YOVSo9t zKu6$O_8h+*iSNx?cO6vz#&}Kmia+nkN*(mvWYq9@r`JzWi8mAA742J*V3g~djQe$d zVSzxkq%+DcMuHyC%vd_oeo6{4{B)$p8k0hOIhThGfa!9PJA1(7O%d&BhrOIY|D_Rm z;cdI=q3l<`#j_#tV+d|_W6`RC`yUE+f4i0NtYnVbGTUeOo09WDyuy5{C8HEo4-=^& zl^`!qN9djblJ#f8+<7BfZg{-q)l2`8J}LSqLT{O09axDKLS595c_K*<+Ki5~goK5Pbl8opV;K;^Y(aoDErp5fh4Uz(?##augw@iW zcUNPEKdaFme7H4`$BJ<-HqFcDo73MDz9ee`^7hsWl&UcjoH1|2_7J)V}8Q zE8B6p{2WKk!}XQq9RX@7IMW)zxln016U8i!zcHplO+HFPzKHWYzTas;%xDg0M9FBD zP*5z(+119n1%qq9!(d>ZdWCXRc+d`cG=<+7i>`yeI?# z!CB1SnMJ;;d>$>ix))7`awV!qJDkGS4WFox-TL-Q+hz#4maX?Sqmo)MES=&1HhRmz z=Q2JIsjA+sY{OFyllUhiNP9yI{YTXbUPMKW3>-q9Q8&#NU!~L(J{1))1E+teg1Q4c zCGl~w5pHJ8iu90@E^WYxr*pFhFnT>m`A81tQE38~L;MDm0S_*R9k?8{_$d#4b9)(- zi(pIg7Red5Oi0|aerNPG1A*zM$*@=|GU@Awcd7E@A;0y;+}+*Wx}i>~p}gq*rSs8W z4X-HKuhoZhNoI_`U0faUe-7T|1?;RO=HUxu9w_RhC67oPx@X}byOl{RtG91xADnI7 zpY2(H4m@=zcbP18SbYgxOH*O>BWyU)tbD1tiO)~AK5s*Fxun8}^~}!ZdJ$rP02cic z#SNXc?JZ#{V3(4Fw*X#LA{KYno?7cx1Run1q0N3!tMPQYxPRj#H;r@Of ziqI}+lSvRk#Gur|ZJfz_%wG)Auh>udl;{hazIAq5DumxCQgiT<@8* zbyusTL9%4?SR2#uP7zL>*J%cRKsswuOFIYHjN`0|BO=d3KsJF#;*$tGS@rFval z*HL}8Q}eYH5pBha8#NqFt`MxT6hhNjUoNHw9kv^~GU%T3a$dD1LFy=!rR<|dJUGJb z8~R|XAH&c2fQHu#FlfHU_+6-3ie700BL+2!N%Fva4Npd3MpST!=Tc{7G^zr?BEO`5 z5wgCz&a?Z+)SQu?jnu_5_N~v{Wk>*HlHt+sEHmirk*TF7FOW*Tmf;u97VaI`o$1~ z&DGMBCZP(DQ6>2upDZQ9o+*WdJa8P_1lX0%oQyODc#A1M8JbwYPNIRes<}oDVHhITA3;$#~nSD(|2x z@8NQ*+}?gSjx1-jLAFPQ!U~pN0nLhhr~tVWiTxL<3VZV5 zc`_kOzA>}UV}xwefouzEQakAWv-K^H-sroca^k~@rcL5yg04lQ@3J2utDpmxMgztI z7*AWx{S}*XuS43F?^O9lYi%b>%9UP#qj^{2DsoHg1oh|D3DBYMbzL{5Jls>W>HR*} zD2mWXnjgUkf4UYt8S`JpP~An*kkb(t#VPs4`WlFm7(iZKVG0 zl8HTk0guT$y}(Pl?oq)lqH?v#mXx+-=do+6c~Y2!#E;r&wS)BGOAp1Zom~`9z3lo3 zqe~Dj3$FNuw|oCe3tq7sFJccgm9{&)#4VgRcv#@6J%mrF4LcV<`&J<4;SuabGi!tlRRsqHhl^$^<=)MYZ(Nm zOF|b1n={r?=eR#(ugmu_XpR3cc}jJDcTZ>4v8YpxIT6zKaHJbgf!Hh%1c~a#14G3V zi@lsN=zuUp z3gFh0RJ#$1(bAU4sMCtM>28^Q%68sL!&CS5J`N9R;$v(1hRNBRRNr$`qtynqs;s)_ ze(j5fP(x<>DWTybJsB6xzSR_T7D{g&W2%Bi{XDTEb?*T4sUhbVzF`fwr<+^?F*D7> zzYxlE^?PUqr5H{F+e_L8Dp2_iVDSvjdSw=u(-QB9HUpB02fic9(I^WIl5fZ|z zB5|30`gG%qCa^c8X8oAx^=CI(=8NBdeu5&OI}@s5AChWQlKfmIbHx!_Mz_FmEtolH`bKmoMpGYNt=77t)kx}-^=B=(zN((OX3VA`b6{`?5usqIo2j>9U<&_%RAu!18$F&k}t8 zx)`?=O+=r742wp?PSv@Fgfmk1HTVTERogZAP;XPy^h7Xxf?xp}z3+d~!2x^*5WSsZ zdo!gRb*~w90Np3`b#?x9XmHd2xUTs!4j0ITivRJ`arwShiAHO2vX6bv!K#HKliJo@kOKsZ!5@uFfA#s@TL&25r-P`A~IIkiDRRm<>#Xb;G# z`%!lq{xBO3k>ndIiD{nMPXw7UQSp4&?%Z$B%GAPYsYT3uZp8-=-lYi(ZyK13e|Ku2 z;FE0IQbM=!p%9^{6c0tCAHz#ftEQtF?!Q3W;iy>Sc8#Igm*Fp!uR)>;OXhDuWZozQ`=lp#X%rKy#5;2S*|YKhY_>1|7>n zpdr>lt_|&Q7))JPxc366P-5nKv`a!6Z?#_NO>x)@CB{Wy`h0Go3Mnp@catJv)?XLo zgGX(}rXdvGRR_i^jJ|4xatk#^nV+(0oBQ`T71{!zs-f90}E}U#m2pIl;EXF)T4``rMFD<$o=R<1E2E?{^XUX z*95Eg!)COf8y+6M)h5wci}#+zaCS9Y_CE)J+i$y%jtrBV8h*iAS*D)xAh3D>7!Gw3 zL$Oh=%6-aOnp$+8AOBFhfM}R-EK;;ePIbOB zZR;dP7&_u;2^XE(s8F6@K#G>yY0>%6&Xfa6lSczIO9N;9V#;N{-$@#2G2vbQh`Fad z-Spau^&H5pr46XSrdcq8{fND7@H%$h-&**+_+oUpWdO?&LS0?*6w|b~IP&oh(o2RwryTV7dR z9eK?hi5AB}UtS0qIGL%hPCRT7B)!ElGL$lSM609Gtm5R4ehJks&jvbK{h9eHu&`g; zw}`i{P5)Ij9(OkQU*J36wQ_m8zVzdF zFGkxfQtaJq^-d&AEJs;wv*A|Ngdn;F;$)Z&;Jd|zE5EtpQPHN6^II`cUS-jr7aOh4AFoM@I| z8$!t#`~vVx+h+NLXz`ui_D>crj-K1H@Gq6~45UP{=KO1320D;|RYzzKT0(T&+8Z2; zuNGrF*NJd`8DB|Uvq~Bh^!FUcrxeh!`&#-`84rfY<1$rOSI`(%T zh^c~Twg(-4-UH~fM#-s&H1RJX8*S&kSu7JDvZEV3XNCQ9o1BAA*BkoVm4L(hSnm;r z9DrXx5!K^@xcDlDYZwmG^O1e8CbfdHi=x$g z;yjq4xQPKq2_sUV+9cWr zjf`XPQpijz$3$}F5V{q9w0kX4Y3XWmhISqmZI8zNLip|ut82G<)!{b3AG-db%72a3 zhdQJc$MgQ!LX!!BN3^ds=e(9s1hZLr@HIqA@kC@_>PT$f=<>+x2XAanh@ zDV+|3c|jxuIc6{&k4P{IaMqCC8ltssu~%KA16N6C*b$TUXxxmVAH;J5n;#Z#!VMe4 zq8HhV#ElCRm|>m1>V8r*+fyH;2jCIszJcUOxu1jRThj#ZpP_H>wfX$pT%dUW@? ztGTA8T%f5&1aVJ^?ue^0tXpPoh0zcz6>p^rd@FkrZ6K^}=2pn`*Hh`^w_mbh_?LJ* zPCs8`xoQo?khCw}{hUBxo1F%G^>#KzJwSM`-A`7$dImMR6RGugJpN4{+eaVhBYK!{ zOvK9QDR!eFYdgz2ivf-Al}x6yZe=1W0%3 z$nq<=TF)H3u*Xem#29e`GQzF3)eJ)C+4ALX~5#lZ5mhl613A zjM$`q3VvsLq6`Y{FZgX*oDVhnfDXJUD5cXQLxdHELeYnnioBRK(d%W^U~%cy8_K_$ zt;2YKE-XzDT&I14?>_a8YjWZpS1c}7G{9q+rtEE?%g-fAKT7q-2_BP3nOMslWxi~s z)WNr3l70!wkQST)-7jimio=+l$mY^%SPJ^ig~Sd`(Bvx!FB`^>$^-9cmX{sxYYW#< z)`Nz8nC)Kuh0~rES{?=lzI_A#lCx84Scq*T1Xi}y4k`Foc4zx^Yj>zGYOPo$PDJKA z9L1Kq@^c8~eq_v|B;hMy#wj5cQ+)HsNx^;1Dj)#m*w3z4S7%#WgG)KtQB7-B%ZwOKB0GP7@KhORW!7XCR)xPr)fm{vS-KJ0mZnsvon?@$P=$gc=?=&#mY8E{h%^Z=rS)TA z9?)E@-{Qo=lRr>(p;VncVOt@-R8aG&$qDoNnwki?GJzt)mP5cu{<(HZ%}`N$99hv$ zY2<9BO}~FSN&v3`Fob?JBa#3?WBFDoQc_P)W5g*|NVo)&UTim9`!0d$h833;DPNpz zc1`VuGj8W~3B2+2oC6}?SKsdlJZsfPxYDN@YH1YUe|mlRX391(-tD=b5N3T6D3HJb zZUn60{h~+Y#bN$llQ1&B22z#)MGqQsL8~gV40hOz(d3mcwe|Dr8!Z@Otp&eMY7;yW zC{7VrYki51dJQ{nZh}WfC4ORN*@|zK8AIFu!qbv2_7uBdn_x=}{yHy@jrCy=ycO>7 z^eTY8C&L#&E?7dQLi|3xhU}SMR>dq++LN`xKKY_8vI>!W;8KpZfNYKj^t%OYikzrM zu&3yj#u*+FMZ;VW((DeCSDYfv7C8^a2b{HBN52jOY_gAK~LHaCa!U4CygzTLj%uSJuxE8KW(f}!C~ zZ;WP<1eBxI$F+EsKH-%fB4Dtu|E%S5KiFa0k98~xnhPk&LP%^VWO*}TjiSR`7ZHk1 zr?I%%d8`Svm%R}OJ}(44aZC6~S@rqjfB^s5n`^aaVXCDER`Bde;2sHyHpfJ-=SISl zH^pq=_8^fdfX^l!KglKQAPY0p$7)t4eR5|3piEG^dm=bJ!Y5g&?v&h;Laz`if*Ohk zVz^Hm{Rs1cR$)2qms4j$yU_t~kcTNB=$@2@d}K?0eTK8n&TjuFWi6zZS|+CGi7tsx z9C6yfi7-5IWZUyrMddM8?QK3GP-t>h18u}+RDGRJh(5)boS~aaV2l_vq(#l}$c+#C zT{z$5dn#%%x!)$efvfBobU#Q-w;hr>wi^=Q7Az&rFB~r?RhqmK7iB>}SBOc0*MQT> z#JIvM6ImVmlB_K^c{BM2J#}^(#>1YLgpgt<^A8UXjeJEc;v;>5G;=}q$y&(8z+q4> zqBUn=`*kGT1W8jby?mP;Kj~~~K_OD*_b_2aE_3xyTtd*13q=+jJ`^BX!K;WSW9F4v z9#q=@*J}x|i9YxvgwxrlzynNAB4er~(B;aoZ6D;$W!Qt*Z9_H!a~}yyy3>iN&Rct! zx5rX+x_(ZPR;A};>4R59|6M=uShY*0RpNd{##l3!?|iPex%?NHsK)o`h*mMT@GHTR z4v!IsZh8HY(a7$2sohK#Aad_CTK zjo%(0Kl|?pG5j7)36jONN(pSFe9hpTA|b8nr7AQRvT@y?pk?|@n@=AS?d3d>rx{Yh z^8j2aF^Rc@anuT_9+Bu>?}1%)?y#QSLybH{>#5`6zm(LdRXU>&tl#7=747!-%7{?y z6mqVYap`1br3%rl%5t*b&tWjF@s70qlX|1Zq@6I^iy0f{h*nF_duTU5ne9d$OIKz5V{4He0HKp7RFb4{S~Y z5D5^-$EhTQWD7|Aa4ytI7|O>5!&13sniK~8^Yqfs^5y}O8OA+I#=Rv|fcS++!T9-M zYe7%%0{mMGOS&E2z}a7mTq7uoL$JJo-9oU^(S7vY{%KO_OMo^wHSuQ}fL~r-kw{ZY z#QiZr?+xK~pod7~&&*2`FYmw^87mnp{zNhIB5`eR{o^;zc*3?x>{zq{^4C-EA>t3D zbA!F8GRkkyA>7>+NR(E0B(*(}wFT-3Ndk1B5D-Qy#W(FQEd8DRmn{9-%Jh{;_wV3Z zjYLW%CbZF_Ye9t|vT0&7Xl@PeOr9bQwz0Fr1!t@@Zw5#heyAT|2dd!~RwmS+aJOY4 zRFk8xy$EzQ+Ha|WupE#DqmSdnUzk2HCz7u^UWtrgC$WnWZZRq?T1fW-&6x*;Paz== zqXZ@0BC9?(xs>ndOJS;_XD}l+66nO_c%c?YkB^r%e)b_^5=NKh2WIvBuF71_6?CV0 zA<=eSDccfhT`9H(O)Dd2<<-1HHJ%=(tWZJpY+#CPB7i)DOkC|twJz|U5%J|L4C|f0 zb?f_*?q=8H+_ozHn4CPDfe?t#b>7=lJ52a#E>o5ckX?LWHvJ6Y>Wa}5iXGvmq2_n4q10n)vm4nf{O* z!@{>$TVdi)!;`kcaGg>lYA|a4_p%k z1{~j7;wSq{+6544z?mQZjsBRkA~;x?rxh9?0-t&^UKG~IYmGl{@8RAKKQSSzJfZ=^ z(9Kx4j_DqEe&BXOQw}Gy5OqXk2ip1qz`y!L1SKqd)X2-cOzcH-yh<+(y z)@)id*F`KXop3hdjfV_*ZsbJ)_-GM}G70Rg*#dg z?zE|0Ect)e2r^=Egu?FWRTv2UrAhJqK{O3fR7f6J=u7yQ{Aum`NONr0|Lw3Au+_PS zOK@p!vj?|QQYX!4PoG-a;h9MOxGxfkXv*pi`nR_)Gy_rS-F4!Q%@oGr6K%Q*41(Y;KB&cnrsWGwRaW>;t7o?zyw@66Qeo+z zXnU1B;w^GO6Tu9=Om5&gn6^T_dKpf~*lfVX!KoJ@2$U{8G@hrU@*+AkGO_mw9&AZ` zf*0=XsL6h!?5=TSk|XctML0w9AVr8bdwiu86YsG4j|loI_YGhEvW#^EhDSDD(~^p6iB76Fn2VU*YELXEx&QmJHdmWA9%BG4vwjI?G17D}qo(gmr{1UY6jej&s#7<_>N;pJ8q|6O-B@$XelgF)XAicf1+sfvoOA_ z5Dpy~FmWIozlRf$i*i9NL&G?2oCd!fm{NP|f(e>yKw5nNhH4XQ8VtNa0^St%-+0>j z;Panbg6)!bkm<@k4723)dv^o4C>0q%l8*y8uE!nplqE zr))lG0TR> zGuy)q_7}hty*;^R`Q~iVA34^66hm)UqvBig2iMYh3t$diZRR%IG4F_ zqKiFb#@j@xdF*);^u;Jf*z`Y~fv%oj+YH&w@Cqc=>PaIukj2mo-UGccLXm*=K%f`! z1A0gdFd3~@msXCLZ%C-F#Ckdz)xZT&scg);`@7P|P(C_hbPmJ{Bm;zh5$KzAy~cR$ zC|lT3o6Nm@oFTVp()S}}Ou1G60S6CoeUMXOvV_kdKQ7O*iZUz_;fp^*gGT}&!Vtjf zrNW>1TB;;NBZC`?^%LtW;uhWjzgiHw03aS+5YHd^141&&a;ODPHw(Tif&pO1|1d|%AMmkAR1Or=a(qA@ wIzF|EXhZ(m*T3=42Sg{u&aMBK#bW#7mv-3u*SF|J1^|DQ Date: Thu, 6 May 2021 11:08:21 +0000 Subject: [PATCH 04/18] zap2it: Update PLIST --- cross/zap2it/PLIST | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/cross/zap2it/PLIST b/cross/zap2it/PLIST index b1fd3a8416c..ccdf24056fe 100644 --- a/cross/zap2it/PLIST +++ b/cross/zap2it/PLIST @@ -1,8 +1,2 @@ -bin:bin/SvtAv1DecApp -bin:bin/SvtAv1EncApp -lib:lib/libSvtAv1Dec.so.0.8.6 -lnk:lib/libSvtAv1Dec.so.0 -lnk:lib/libSvtAv1Dec.so -lib:lib/libSvtAv1Enc.so.0.8.6 -lnk:lib/libSvtAv1Enc.so.0 -lnk:lib/libSvtAv1Enc.so +bin:bin/zap2it-GuideScrape.py +rsc:etc/zap2itconfig.ini From ff775d6fe95b896487e25f91a85027e1cea72eab Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Mon, 10 May 2021 23:41:08 +0000 Subject: [PATCH 05/18] zap2it: Update license to MIT --- cross/zap2it/Makefile | 2 +- spk/zap2it/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cross/zap2it/Makefile b/cross/zap2it/Makefile index 169e8becdcc..90fe951a44c 100644 --- a/cross/zap2it/Makefile +++ b/cross/zap2it/Makefile @@ -10,7 +10,7 @@ DEPENDS = HOMEPAGE = https://github.com/daniel-widrick/zap2it-GuideScraping COMMENT = Take TV listings from zap2it and convert them to xmltv for use with applications such as Jellyfin/Emby -LICENSE = none +LICENSE = MIT INSTALL_TARGET = zap2it_install diff --git a/spk/zap2it/Makefile b/spk/zap2it/Makefile index 98706dbd285..095c94fac8f 100644 --- a/spk/zap2it/Makefile +++ b/spk/zap2it/Makefile @@ -16,7 +16,7 @@ CHANGELOG = "Initial package" STARTABLE = no HOMEPAGE = https://github.com/daniel-widrick/zap2it-GuideScraping -LICENSE = none +LICENSE = MIT WIZARDS_DIR = src/wizard/ From 2f0e5775e17359235c41646d348254f7efc2b359 Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Tue, 11 May 2021 00:47:24 +0000 Subject: [PATCH 06/18] zap2it: Fix install and setting-up configuration file --- spk/zap2it/Makefile | 2 +- spk/zap2it/src/service-setup.sh | 14 +++++--- spk/zap2it/src/wizard/install_uifile | 52 +++++++++++++++------------- 3 files changed, 37 insertions(+), 31 deletions(-) diff --git a/spk/zap2it/Makefile b/spk/zap2it/Makefile index 095c94fac8f..efaf719eb89 100644 --- a/spk/zap2it/Makefile +++ b/spk/zap2it/Makefile @@ -11,7 +11,7 @@ MAINTAINER = th0ma7 DESCRIPTION = Takes TV listings from zap2it and convert them to XMLTV for use with applications such as Jellyfin / Emby / TVheadEnd DESCRIPTION_FRE = Prend la programmation télé de zap2it et la convertis en XMLTV pour une utilisation avec des applications telles que Jellyfin / Emby / TVheadEnd RELOAD_UI = no -DISPLAY_NAME = zap2it +DISPLAY_NAME = zap2it XMLTV Scrapper CHANGELOG = "Initial package" STARTABLE = no diff --git a/spk/zap2it/src/service-setup.sh b/spk/zap2it/src/service-setup.sh index e4b798c17c4..6812bf003dc 100644 --- a/spk/zap2it/src/service-setup.sh +++ b/spk/zap2it/src/service-setup.sh @@ -21,13 +21,17 @@ service_postinst () fi # Encrypt password - wizard_password=`echo -n "TVHeadend-Hide-${wizard_password:=admin}" | openssl enc -a` + zap2it_password=$(echo -n "TVHeadend-Hide-${zap2it_password}" | openssl enc -a) + [ "${zap2it_CAN}" = "true" ] && zap2it_country=CAN || zap2it_country=USA + # Remove spaces from CAD postal code + zap2it_code=$(echo ${zap2it_code} | sed 's/ //g') # Set configuration according to the wizard - sed -i -e "s/example\$/${wizard_user}/g" ${CONF} - sed -i -e "s/examplePass\$/${wizard_password}/g" ${CONF} - sed -i -e "s/USA\$/${wizard_country}/g" ${CONF} - sed -i -e "s/55555\$/${wizard_zipcode}/g" ${CONF} + sed -i "/^Username: /s/ .*/ ${zap2it_user}/" ${CONF} + sed -i "/^Password: /s/ .*/ ${zap2it_password}/" ${CONF} + sed -i "/^country: /s/ .*/ ${zap2it_country}/" ${CONF} + sed -i "/^zipCode: /s/ .*/ ${zap2it_code}/" ${CONF} + sed -i "/^historicalGuideDays: /s/ .*/ ${zap2it_days}/" ${CONF} } service_preupgrade () diff --git a/spk/zap2it/src/wizard/install_uifile b/spk/zap2it/src/wizard/install_uifile index 1a1de64f324..17383bda26c 100644 --- a/spk/zap2it/src/wizard/install_uifile +++ b/spk/zap2it/src/wizard/install_uifile @@ -1,44 +1,46 @@ [{ - "step_title": "Set username and password for zap2it", + "step_title": "Set country and region", "items": [{ - "type": "textfield", - "desc": "User account to connect to tvlistings.zap2it.com", - "subitems": [{ - "key": "wizard_user", - "desc": "Username:" - }] - },{ - "type": "password", - "desc": "Password", - "subitems": [{ - "key": "wizard_password", - "desc": "Password:" - }] - },{ "type": "singleselect", "desc": "Location", "subitems": [{ - "key": "wizard_CAD", + "key": "zap2it_CAN", "desc": "Canada", "defaultValue": true },{ - "key": "wizard_US", + "key": "zap2it_US", "desc": "United States", - "defaultValue": false, - "validator": { - "fn": "{return arguments[0];}" - } + "defaultValue": false }] },{ "type": "textfield", "subitems": [{ - "key": "wizard_zip", - "desc": "ZIP or Postal Code" + "key": "zap2it_code", + "desc": "Postal or ZIP code" + }] + },{ + "type": "textfield", + "subitems": [{ + "key": "zap2it_days", + "desc": "TV Guide Numbers of days (max. 14)", + "defaultValue": 14 }] }] }, { - "step_title": "Attention! DSM Permissions", + "step_title": "Set username and password", "items": [{ - "desc": "Permissions are managed with the group 'sc-media' in DSM.
The group 'users' is no longer used as of DSM 6.
Package user (= svc-tvheadend on DSM5 and sc-tvheadend on DSM6+) will not appear on most UI settings.
Including the following:
- Application privilege's permission viewer
- FTP's chroot user selector
- File Stations's
- Change owner
- Shared Links Manager -> Enable secure sharing

The only exceptions are:
- Control Panel > Shared Folder > Edit > Permission > System internal user
- ACL editor.
Please read Permission Management for details." + "type": "textfield", + "desc": "User account to connect to tvlistings.zap2it.com", + "subitems": [{ + "key": "zap2it_user", + "desc": "Username" + }] + },{ + "type": "password", + "desc": "Password", + "subitems": [{ + "key": "zap2it_password", + "desc": "Password" + }] }] }] From 65b0f45b525824126a2910bf9e3c4a080d4e23f1 Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Thu, 13 May 2021 00:17:40 +0000 Subject: [PATCH 07/18] zap2it: Add regex and type validatio for user input --- spk/zap2it/src/wizard/install_uifile | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/spk/zap2it/src/wizard/install_uifile b/spk/zap2it/src/wizard/install_uifile index 17383bda26c..7c7908daf7f 100644 --- a/spk/zap2it/src/wizard/install_uifile +++ b/spk/zap2it/src/wizard/install_uifile @@ -16,14 +16,26 @@ "type": "textfield", "subitems": [{ "key": "zap2it_code", - "desc": "Postal or ZIP code" + "desc": "Postal or ZIP code", + "validator": { + "vtype": "alphanum", + "regex": { + "expr": "/^[0-9]{5}$|^[A-Z][0-9][A-Z][ ]?[0-9][A-Z][0-9]$/i" + } + } }] },{ "type": "textfield", "subitems": [{ "key": "zap2it_days", "desc": "TV Guide Numbers of days (max. 14)", - "defaultValue": 14 + "defaultValue": "14", + "validator": { + "vtype": "alphanum", + "regex": { + "expr": "/^[1-9]$|^1[0-4]$/i" + } + } }] }] }, { @@ -33,7 +45,11 @@ "desc": "User account to connect to tvlistings.zap2it.com", "subitems": [{ "key": "zap2it_user", - "desc": "Username" + "desc": "Username", + "emptyText": "abc@xyz.com", + "validator": { + "vtype": "email" + } }] },{ "type": "password", From 23cd22a3dfebdb1f1b49876d2091637506f4a29a Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Thu, 13 May 2021 00:23:25 +0000 Subject: [PATCH 08/18] zap2it: Add href URL to tvlistings.zap2it.com --- spk/zap2it/src/wizard/install_uifile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spk/zap2it/src/wizard/install_uifile b/spk/zap2it/src/wizard/install_uifile index 7c7908daf7f..89ec54adfd8 100644 --- a/spk/zap2it/src/wizard/install_uifile +++ b/spk/zap2it/src/wizard/install_uifile @@ -42,7 +42,7 @@ "step_title": "Set username and password", "items": [{ "type": "textfield", - "desc": "User account to connect to tvlistings.zap2it.com", + "desc": "User account to connect to tvlistings.zap2it.com", "subitems": [{ "key": "zap2it_user", "desc": "Username", From 1c44d74c8b95206186916b24db2e4b8ca49b9e5b Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Thu, 13 May 2021 00:38:38 +0000 Subject: [PATCH 09/18] zap2it: Adjust password field and add description to zip code --- spk/zap2it/src/wizard/install_uifile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spk/zap2it/src/wizard/install_uifile b/spk/zap2it/src/wizard/install_uifile index 89ec54adfd8..11868166dd1 100644 --- a/spk/zap2it/src/wizard/install_uifile +++ b/spk/zap2it/src/wizard/install_uifile @@ -17,6 +17,7 @@ "subitems": [{ "key": "zap2it_code", "desc": "Postal or ZIP code", + "emptyText": "90210 or J9J1Z1", "validator": { "vtype": "alphanum", "regex": { @@ -53,7 +54,7 @@ }] },{ "type": "password", - "desc": "Password", + "desc": " ", "subitems": [{ "key": "zap2it_password", "desc": "Password" From 19a3b787643f6b66d14316b2db3cefc228582c6a Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Sat, 15 May 2021 10:37:07 +0000 Subject: [PATCH 10/18] zap2it: Manage installation of synocron job --- spk/zap2it/Makefile | 6 ++++++ spk/zap2it/src/service-setup.sh | 5 +++++ spk/zap2it/src/zap2it.synocron | 10 ++++++++++ 3 files changed, 21 insertions(+) create mode 100644 spk/zap2it/src/zap2it.synocron diff --git a/spk/zap2it/Makefile b/spk/zap2it/Makefile index efaf719eb89..19be224d553 100644 --- a/spk/zap2it/Makefile +++ b/spk/zap2it/Makefile @@ -24,4 +24,10 @@ WIZARDS_DIR = src/wizard/ SERVICE_USER = auto SERVICE_SETUP = src/service-setup.sh +POST_STRIP_TARGET = zap2it_extra_install + include ../../mk/spksrc.spk.mk + +.PHONY: zap2it_extra_install +zap2it_extra_install: + install -m 644 src/zap2it.synocron $(STAGING_DIR)/etc/zap2it.synocron diff --git a/spk/zap2it/src/service-setup.sh b/spk/zap2it/src/service-setup.sh index 6812bf003dc..b6640f027b1 100644 --- a/spk/zap2it/src/service-setup.sh +++ b/spk/zap2it/src/service-setup.sh @@ -5,6 +5,7 @@ GROUP=sc-media # Default configuration file +SYNOCRON=/usr/local/etc/synocron.d/ CONF=${SYNOPKG_PKGDEST}/etc/zap2itconfig.ini CACHE=${SYNOPKG_PKGVAR} @@ -32,6 +33,10 @@ service_postinst () sed -i "/^country: /s/ .*/ ${zap2it_country}/" ${CONF} sed -i "/^zipCode: /s/ .*/ ${zap2it_code}/" ${CONF} sed -i "/^historicalGuideDays: /s/ .*/ ${zap2it_days}/" ${CONF} + + # Install the synocron + cp ${SYNOPKG_PKGDEST}/etc/zap2it.synocron ${SYNOCRON}/zap2it.conf + sudo synoservice --restart synocrond } service_preupgrade () diff --git a/spk/zap2it/src/zap2it.synocron b/spk/zap2it/src/zap2it.synocron new file mode 100644 index 00000000000..904318cf58e --- /dev/null +++ b/spk/zap2it/src/zap2it.synocron @@ -0,0 +1,10 @@ +[ + { + "cmd" : "/var/packages/zap2it/target/bin/zap2it-GuideScrape.py -i /var/packages/zap2it/target/etc/zap2itconfig.ini -o /var/packages/zap2it/target/var/xmlguide.xmltv", + "crontab" : "* */8 * * *", + "name" : "zap2it", + "package_username" : "sc-zap2it", + "period" : "crontab", + "user" : "package" + } +] From ced405419c685e619108d2348fb94d5d76a6263c Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Sat, 15 May 2021 10:51:05 +0000 Subject: [PATCH 11/18] zap2it: Add python3 header to script --- cross/zap2it/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/cross/zap2it/Makefile b/cross/zap2it/Makefile index 90fe951a44c..cdf993a7862 100644 --- a/cross/zap2it/Makefile +++ b/cross/zap2it/Makefile @@ -20,5 +20,6 @@ include ../../mk/spksrc.install-resources.mk zap2it_install: install -m 755 -d $(STAGING_INSTALL_PREFIX)/bin install -m 755 $(WORK_DIR)/$(PKG_DIR)/zap2it-GuideScrape.py $(STAGING_INSTALL_PREFIX)/bin + @sed -i '1 i\#!/usr/bin/env python3' $(STAGING_INSTALL_PREFIX)/bin/zap2it-GuideScrape.py install -m 750 -d $(STAGING_INSTALL_PREFIX)/etc install -m 640 $(WORK_DIR)/$(PKG_DIR)/zap2itconfig.ini.dist $(STAGING_INSTALL_PREFIX)/etc/zap2itconfig.ini From 8cdc15fc5af940cc847008be5a22fa2adc737165 Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Sat, 15 May 2021 11:20:09 +0000 Subject: [PATCH 12/18] zap2it: Adjust cron and backup installer variables --- spk/zap2it/Makefile | 2 +- spk/zap2it/src/service-setup.sh | 20 ++++++++++++++++++-- spk/zap2it/src/zap2it.synocron | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/spk/zap2it/Makefile b/spk/zap2it/Makefile index 19be224d553..69768e4000d 100644 --- a/spk/zap2it/Makefile +++ b/spk/zap2it/Makefile @@ -30,4 +30,4 @@ include ../../mk/spksrc.spk.mk .PHONY: zap2it_extra_install zap2it_extra_install: - install -m 644 src/zap2it.synocron $(STAGING_DIR)/etc/zap2it.synocron + install -m 600 src/zap2it.synocron $(STAGING_DIR)/etc/zap2it.synocron diff --git a/spk/zap2it/src/service-setup.sh b/spk/zap2it/src/service-setup.sh index b6640f027b1..d9a473fdde0 100644 --- a/spk/zap2it/src/service-setup.sh +++ b/spk/zap2it/src/service-setup.sh @@ -1,13 +1,15 @@ # Package specific behaviors # Sourced script by generic installer and start-stop-status scripts -# Group configuration to manage permissions of recording folders +# Group to access XMLTV files GROUP=sc-media # Default configuration file SYNOCRON=/usr/local/etc/synocron.d/ CONF=${SYNOPKG_PKGDEST}/etc/zap2itconfig.ini CACHE=${SYNOPKG_PKGVAR} +SPKETC="/var/packages/${SYNOPKG_PKGNAME}/etc" +INSTALLER_VARIABLES="${SPKETC}/installer-variables" service_postinst () { @@ -34,9 +36,23 @@ service_postinst () sed -i "/^zipCode: /s/ .*/ ${zap2it_code}/" ${CONF} sed -i "/^historicalGuideDays: /s/ .*/ ${zap2it_days}/" ${CONF} + # Backup installer variables + echo "zap2it_user=${zap2it_user}" >> ${INSTALLER_VARIABLES} + echo "zap2it_password=${zap2it_password}" >> ${INSTALLER_VARIABLES} + echo "zap2it_country=${zap2it_country}" >> ${INSTALLER_VARIABLES} + echo "zap2it_code=${zap2it_code}" >> ${INSTALLER_VARIABLES} + echo "zap2it_days=${zap2it_days}" >> ${INSTALLER_VARIABLES} + # Install the synocron cp ${SYNOPKG_PKGDEST}/etc/zap2it.synocron ${SYNOCRON}/zap2it.conf - sudo synoservice --restart synocrond + synoservice --restart synocrond +} + +service_postuninst () +{ + # Remove synocron + rm -f ${SYNOCRON}/zap2it.conf + synoservice --restart synocrond } service_preupgrade () diff --git a/spk/zap2it/src/zap2it.synocron b/spk/zap2it/src/zap2it.synocron index 904318cf58e..369ebc5c5b4 100644 --- a/spk/zap2it/src/zap2it.synocron +++ b/spk/zap2it/src/zap2it.synocron @@ -1,7 +1,7 @@ [ { "cmd" : "/var/packages/zap2it/target/bin/zap2it-GuideScrape.py -i /var/packages/zap2it/target/etc/zap2itconfig.ini -o /var/packages/zap2it/target/var/xmlguide.xmltv", - "crontab" : "* */8 * * *", + "crontab" : "0 */8 * * *", "name" : "zap2it", "package_username" : "sc-zap2it", "period" : "crontab", From ad6aea152f2334e538711536b882213c5a92a974 Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Sat, 15 May 2021 13:17:31 +0000 Subject: [PATCH 13/18] zap2it: Add upgrade methods --- spk/zap2it/src/service-setup.sh | 55 +++++++++++------ spk/zap2it/src/wizard/upgrade_uifile.sh | 79 +++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 18 deletions(-) create mode 100644 spk/zap2it/src/wizard/upgrade_uifile.sh diff --git a/spk/zap2it/src/service-setup.sh b/spk/zap2it/src/service-setup.sh index d9a473fdde0..a444b1be4a2 100644 --- a/spk/zap2it/src/service-setup.sh +++ b/spk/zap2it/src/service-setup.sh @@ -10,21 +10,11 @@ CONF=${SYNOPKG_PKGDEST}/etc/zap2itconfig.ini CACHE=${SYNOPKG_PKGVAR} SPKETC="/var/packages/${SYNOPKG_PKGNAME}/etc" INSTALLER_VARIABLES="${SPKETC}/installer-variables" +ZAP2IT_BACKUP=/tmp/zap2it -service_postinst () +write_zap2it_config() { - # Create cache directory if it does not exist - mkdir --mode=0755 ${CACHE} - # For backwards compatibility, set ownership of package system directories - if [ $SYNOPKG_DSM_VERSION_MAJOR == 6 ]; then - echo "Set unix permissions on configuration directory" - set_unix_permissions "${SYNOPKG_PKGDEST}" - echo "Set unix permissions on cache directory" - set_unix_permissions "${SYNOPKG_PKGVAR}" - fi - - # Encrypt password - zap2it_password=$(echo -n "TVHeadend-Hide-${zap2it_password}" | openssl enc -a) + # Set default country [ "${zap2it_CAN}" = "true" ] && zap2it_country=CAN || zap2it_country=USA # Remove spaces from CAD postal code zap2it_code=$(echo ${zap2it_code} | sed 's/ //g') @@ -36,12 +26,31 @@ service_postinst () sed -i "/^zipCode: /s/ .*/ ${zap2it_code}/" ${CONF} sed -i "/^historicalGuideDays: /s/ .*/ ${zap2it_days}/" ${CONF} + # Encrypt password + zap2it_password=$(echo -n "TVHeadend-Hide-${zap2it_password}" | openssl enc -a) # Backup installer variables - echo "zap2it_user=${zap2it_user}" >> ${INSTALLER_VARIABLES} - echo "zap2it_password=${zap2it_password}" >> ${INSTALLER_VARIABLES} - echo "zap2it_country=${zap2it_country}" >> ${INSTALLER_VARIABLES} - echo "zap2it_code=${zap2it_code}" >> ${INSTALLER_VARIABLES} - echo "zap2it_days=${zap2it_days}" >> ${INSTALLER_VARIABLES} + sed -i -n -e '/^USER=/!p' -e "\$aUSER=\"${zap2it_user}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^PASSWD=/!p' -e "\$aPASSWD=\"${zap2it_password}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^CAN=/!p' -e "\$aCAN=\"${zap2it_CAN}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^US=/!p' -e "\$aUS=\"${zap2it_US}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^CODE=/!p' -e "\$aCODE=\"${zap2it_code}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^DAYS=/!p' -e "\$aDAYS=\"${zap2it_days}\"" ${INSTALLER_VARIABLES} +} + +service_postinst () +{ + # Create cache directory if it does not exist + mkdir --mode=0755 ${CACHE} + # For backwards compatibility, set ownership of package system directories + if [ $SYNOPKG_DSM_VERSION_MAJOR == 6 ]; then + echo "Set unix permissions on configuration directory" + set_unix_permissions "${SYNOPKG_PKGDEST}" + echo "Set unix permissions on cache directory" + set_unix_permissions "${SYNOPKG_PKGVAR}" + fi + + # Adjust configuration files + write_zap2it_config # Install the synocron cp ${SYNOPKG_PKGDEST}/etc/zap2it.synocron ${SYNOCRON}/zap2it.conf @@ -57,8 +66,18 @@ service_postuninst () service_preupgrade () { + # Create a backup copy + mkdir -p ${ZAP2IT_BACKUP} + rsync -avh ${SYNOPKG_PKGDEST}/var ${ZAP2IT_BACKUP} } service_postupgrade () { + # Adjust configuration files + write_zap2it_config + + # Recover backup + rsync -avh --ignore-existing --remove-source-files ${ZAP2IT_BACKUP}/var/ ${SYNOPKG_PKGDEST}/var + # Remove backup directory + rm -fr ${ZAP2IT_BACKUP} } diff --git a/spk/zap2it/src/wizard/upgrade_uifile.sh b/spk/zap2it/src/wizard/upgrade_uifile.sh new file mode 100644 index 00000000000..9176f55e092 --- /dev/null +++ b/spk/zap2it/src/wizard/upgrade_uifile.sh @@ -0,0 +1,79 @@ +#!/bin/sh + +SPKETC="/var/packages/${SYNOPKG_PKGNAME}/etc" +INSTALLER_VARIABLES="${SPKETC}/installer-variables" + +# Reload wizard variables stored by postinst +if [ -r "${INSTALLER_VARIABLES}" ]; then + . "${INSTALLER_VARIABLES}" +fi + +cat < $SYNOPKG_TEMP_LOGFILE +[{ + "step_title": "Set country and region", + "items": [{ + "type": "singleselect", + "desc": "Location", + "subitems": [{ + "key": "zap2it_CAN", + "desc": "Canada", + "defaultValue": "${CAN}" + },{ + "key": "zap2it_US", + "desc": "United States", + "defaultValue": "${US}" + }] + },{ + "type": "textfield", + "subitems": [{ + "key": "zap2it_code", + "desc": "Postal or ZIP code", + "emptyText": "90210 or J9J1Z1", + "defaultValue": "${CODE}", + "validator": { + "vtype": "alphanum", + "regex": { + "expr": "/^[0-9]{5}$|^[A-Z][0-9][A-Z][ ]?[0-9][A-Z][0-9]$/i" + } + } + }] + },{ + "type": "textfield", + "subitems": [{ + "key": "zap2it_days", + "desc": "TV Guide Numbers of days (max. 14)", + "defaultValue": "${DAYS}", + "validator": { + "vtype": "alphanum", + "regex": { + "expr": "/^[1-9]$|^1[0-4]$/i" + } + } + }] + }] +}, { + "step_title": "Set username and password", + "items": [{ + "type": "textfield", + "desc": "User account to connect to tvlistings.zap2it.com", + "subitems": [{ + "key": "zap2it_user", + "desc": "Username", + "emptyText": "abc@xyz.com", + "defaultValue": "${USER}", + "validator": { + "vtype": "email" + } + }] + },{ + "type": "password", + "desc": " ", + "subitems": [{ + "key": "zap2it_password", + "desc": "Password" + "defaultValue": "${PASSWD}", + }] + }] +}] +EOF +exit 0 From 1bac67ceac9710132b880901f9ec8d35a43e09bc Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Wed, 19 May 2021 00:10:46 +0000 Subject: [PATCH 14/18] zap2it: Fix upgrade process and allow re-using previous passwd --- spk/zap2it/src/service-setup.sh | 55 +++++++++++++++---------- spk/zap2it/src/wizard/upgrade_uifile.sh | 15 +++---- 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/spk/zap2it/src/service-setup.sh b/spk/zap2it/src/service-setup.sh index a444b1be4a2..50e666ffd74 100644 --- a/spk/zap2it/src/service-setup.sh +++ b/spk/zap2it/src/service-setup.sh @@ -5,42 +5,54 @@ GROUP=sc-media # Default configuration file -SYNOCRON=/usr/local/etc/synocron.d/ -CONF=${SYNOPKG_PKGDEST}/etc/zap2itconfig.ini -CACHE=${SYNOPKG_PKGVAR} SPKETC="/var/packages/${SYNOPKG_PKGNAME}/etc" +SYNOCRON=/usr/local/etc/synocron.d/ INSTALLER_VARIABLES="${SPKETC}/installer-variables" +# +ZAP2IT_CONF=${SYNOPKG_PKGDEST}/etc/zap2itconfig.ini +ZAP2IT_CACHE=${SYNOPKG_PKGVAR} ZAP2IT_BACKUP=/tmp/zap2it write_zap2it_config() { + echo "Call write_zap2it_config()" + # Set default country [ "${zap2it_CAN}" = "true" ] && zap2it_country=CAN || zap2it_country=USA # Remove spaces from CAD postal code zap2it_code=$(echo ${zap2it_code} | sed 's/ //g') + # Keep previous passwd if left blank at upgrade time + echo "Keep previous passwd if left blank at upgrade time" + if [ "${ZAP2IT_PASSWD}" -a ! "${zap2it_password}" ]; then + zap2it_password=$(echo "${ZAP2IT_PASSWD}" | openssl enc -d -aes-256-cbc -pass pass:zap2it -a) + fi + # Set configuration according to the wizard - sed -i "/^Username: /s/ .*/ ${zap2it_user}/" ${CONF} - sed -i "/^Password: /s/ .*/ ${zap2it_password}/" ${CONF} - sed -i "/^country: /s/ .*/ ${zap2it_country}/" ${CONF} - sed -i "/^zipCode: /s/ .*/ ${zap2it_code}/" ${CONF} - sed -i "/^historicalGuideDays: /s/ .*/ ${zap2it_days}/" ${CONF} + echo "Set configuration according to the wizard" + sed -i "/^Username: /s/ .*/ ${zap2it_user}/" ${ZAP2IT_CONF} + sed -i "/^Password: /s/ .*/ ${zap2it_password}/" ${ZAP2IT_CONF} + sed -i "/^country: /s/ .*/ ${zap2it_country}/" ${ZAP2IT_CONF} + sed -i "/^zipCode: /s/ .*/ ${zap2it_code}/" ${ZAP2IT_CONF} + sed -i "/^historicalGuideDays: /s/ .*/ ${zap2it_days}/" ${ZAP2IT_CONF} # Encrypt password - zap2it_password=$(echo -n "TVHeadend-Hide-${zap2it_password}" | openssl enc -a) + echo "Encrypt password" + ZAP2IT_PASSWD=$(echo -n "${zap2it_password}" | openssl enc -aes-256-cbc -pass pass:zap2it -a) # Backup installer variables - sed -i -n -e '/^USER=/!p' -e "\$aUSER=\"${zap2it_user}\"" ${INSTALLER_VARIABLES} - sed -i -n -e '/^PASSWD=/!p' -e "\$aPASSWD=\"${zap2it_password}\"" ${INSTALLER_VARIABLES} - sed -i -n -e '/^CAN=/!p' -e "\$aCAN=\"${zap2it_CAN}\"" ${INSTALLER_VARIABLES} - sed -i -n -e '/^US=/!p' -e "\$aUS=\"${zap2it_US}\"" ${INSTALLER_VARIABLES} - sed -i -n -e '/^CODE=/!p' -e "\$aCODE=\"${zap2it_code}\"" ${INSTALLER_VARIABLES} - sed -i -n -e '/^DAYS=/!p' -e "\$aDAYS=\"${zap2it_days}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^ZAP2IT_USER=/!p' -e "\$aZAP2IT_USER=\"${zap2it_user}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^ZAP2IT_PASSWD=/!p' -e "\$aZAP2IT_PASSWD=\"${ZAP2IT_PASSWD}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^ZAP2IT_CAN=/!p' -e "\$aZAP2IT_CAN=\"${zap2it_CAN}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^ZAP2IT_US=/!p' -e "\$aZAP2IT_US=\"${zap2it_US}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^ZAP2IT_CODE=/!p' -e "\$aZAP2IT_CODE=\"${zap2it_code}\"" ${INSTALLER_VARIABLES} + sed -i -n -e '/^ZAP2IT_DAYS=/!p' -e "\$aZAP2IT_DAYS=\"${zap2it_days}\"" ${INSTALLER_VARIABLES} } service_postinst () { # Create cache directory if it does not exist - mkdir --mode=0755 ${CACHE} + echo "Create cache directory if it does not exist (${ZAP2IT_CACHE})" + mkdir -p --mode=0755 ${ZAP2IT_CACHE} # For backwards compatibility, set ownership of package system directories if [ $SYNOPKG_DSM_VERSION_MAJOR == 6 ]; then echo "Set unix permissions on configuration directory" @@ -53,6 +65,7 @@ service_postinst () write_zap2it_config # Install the synocron + echo "Install synocron (${SYNOCRON}/zap2it.conf)" cp ${SYNOPKG_PKGDEST}/etc/zap2it.synocron ${SYNOCRON}/zap2it.conf synoservice --restart synocrond } @@ -60,6 +73,7 @@ service_postinst () service_postuninst () { # Remove synocron + echo "Remove synocron" rm -f ${SYNOCRON}/zap2it.conf synoservice --restart synocrond } @@ -67,17 +81,16 @@ service_postuninst () service_preupgrade () { # Create a backup copy + echo "Create a backup copy" mkdir -p ${ZAP2IT_BACKUP} - rsync -avh ${SYNOPKG_PKGDEST}/var ${ZAP2IT_BACKUP} + rsync -ah ${SYNOPKG_PKGDEST}/var ${ZAP2IT_BACKUP} } service_postupgrade () { - # Adjust configuration files - write_zap2it_config - # Recover backup - rsync -avh --ignore-existing --remove-source-files ${ZAP2IT_BACKUP}/var/ ${SYNOPKG_PKGDEST}/var + echo "Recover backup" + rsync -ah --ignore-existing --remove-source-files ${ZAP2IT_BACKUP}/var/ ${SYNOPKG_PKGDEST}/var # Remove backup directory rm -fr ${ZAP2IT_BACKUP} } diff --git a/spk/zap2it/src/wizard/upgrade_uifile.sh b/spk/zap2it/src/wizard/upgrade_uifile.sh index 9176f55e092..ff7cd95f8b7 100644 --- a/spk/zap2it/src/wizard/upgrade_uifile.sh +++ b/spk/zap2it/src/wizard/upgrade_uifile.sh @@ -17,11 +17,11 @@ cat < $SYNOPKG_TEMP_LOGFILE "subitems": [{ "key": "zap2it_CAN", "desc": "Canada", - "defaultValue": "${CAN}" + "defaultValue": "${ZAP2IT_CAN}" },{ "key": "zap2it_US", "desc": "United States", - "defaultValue": "${US}" + "defaultValue": "${ZAP2IT_US}" }] },{ "type": "textfield", @@ -29,7 +29,7 @@ cat < $SYNOPKG_TEMP_LOGFILE "key": "zap2it_code", "desc": "Postal or ZIP code", "emptyText": "90210 or J9J1Z1", - "defaultValue": "${CODE}", + "defaultValue": "${ZAP2IT_CODE}", "validator": { "vtype": "alphanum", "regex": { @@ -42,7 +42,7 @@ cat < $SYNOPKG_TEMP_LOGFILE "subitems": [{ "key": "zap2it_days", "desc": "TV Guide Numbers of days (max. 14)", - "defaultValue": "${DAYS}", + "defaultValue": "${ZAP2IT_DAYS}", "validator": { "vtype": "alphanum", "regex": { @@ -60,7 +60,7 @@ cat < $SYNOPKG_TEMP_LOGFILE "key": "zap2it_user", "desc": "Username", "emptyText": "abc@xyz.com", - "defaultValue": "${USER}", + "defaultValue": "${ZAP2IT_USER}", "validator": { "vtype": "email" } @@ -70,8 +70,9 @@ cat < $SYNOPKG_TEMP_LOGFILE "desc": " ", "subitems": [{ "key": "zap2it_password", - "desc": "Password" - "defaultValue": "${PASSWD}", + "desc": "Password", + "emptyText": "(leave blank to keep existing password)", + "defaultValue": "" }] }] }] From 8b7e81d4fb422f02e0be7c799947300421a2f128 Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Wed, 19 May 2021 00:24:21 +0000 Subject: [PATCH 15/18] zap2it: Run cron twice a day is more than sufficient --- spk/zap2it/src/zap2it.synocron | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spk/zap2it/src/zap2it.synocron b/spk/zap2it/src/zap2it.synocron index 369ebc5c5b4..81e6482451a 100644 --- a/spk/zap2it/src/zap2it.synocron +++ b/spk/zap2it/src/zap2it.synocron @@ -1,7 +1,7 @@ [ { "cmd" : "/var/packages/zap2it/target/bin/zap2it-GuideScrape.py -i /var/packages/zap2it/target/etc/zap2itconfig.ini -o /var/packages/zap2it/target/var/xmlguide.xmltv", - "crontab" : "0 */8 * * *", + "crontab" : "0 */12 * * *", "name" : "zap2it", "package_username" : "sc-zap2it", "period" : "crontab", From 2729c9f0846e3eb798fb1496830c7e466232fb72 Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Sun, 23 May 2021 09:59:03 +0000 Subject: [PATCH 16/18] zap2it: Remove obsolete RELOAD_UI --- spk/zap2it/Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/spk/zap2it/Makefile b/spk/zap2it/Makefile index 69768e4000d..d57b1e6140a 100644 --- a/spk/zap2it/Makefile +++ b/spk/zap2it/Makefile @@ -10,7 +10,6 @@ SPK_DEPENDS = "python3>=3.7.7-15" MAINTAINER = th0ma7 DESCRIPTION = Takes TV listings from zap2it and convert them to XMLTV for use with applications such as Jellyfin / Emby / TVheadEnd DESCRIPTION_FRE = Prend la programmation télé de zap2it et la convertis en XMLTV pour une utilisation avec des applications telles que Jellyfin / Emby / TVheadEnd -RELOAD_UI = no DISPLAY_NAME = zap2it XMLTV Scrapper CHANGELOG = "Initial package" From 59f7f7fcb9467bf9c9c907c2b6a8d9841b41a2ce Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Sun, 23 May 2021 10:03:04 +0000 Subject: [PATCH 17/18] zap2it: Update to latest fixes --- cross/zap2it/Makefile | 2 +- cross/zap2it/digests | 6 +++--- spk/zap2it/Makefile | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cross/zap2it/Makefile b/cross/zap2it/Makefile index cdf993a7862..8ab1da703b1 100644 --- a/cross/zap2it/Makefile +++ b/cross/zap2it/Makefile @@ -1,5 +1,5 @@ PKG_NAME = zap2it -PKG_VERS = 20210504 +PKG_VERS = 20210519 PKG_EXT = tar.gz PKG_DIST_NAME = v$(PKG_VERS).$(PKG_EXT) PKG_DIST_SITE = https://github.com/daniel-widrick/zap2it-GuideScraping/archive diff --git a/cross/zap2it/digests b/cross/zap2it/digests index 226c16fba55..ac76a87c75d 100644 --- a/cross/zap2it/digests +++ b/cross/zap2it/digests @@ -1,3 +1,3 @@ -zap2it-20210504.tar.gz SHA1 0120140ae9ce3350642a13a0e38b165153f00902 -zap2it-20210504.tar.gz SHA256 f570ee819354deed66fb30a43b31893a2dc59924f0f4d1d11fdb1ea01525e454 -zap2it-20210504.tar.gz MD5 4f388346ba7279aeab9ffdd3cb645a9d +zap2it-20210519.tar.gz SHA1 4ccdac6d462ad4f9f94ae70e2a3caba9f4dd23e2 +zap2it-20210519.tar.gz SHA256 545156f31e7cdcc7d332c5e98dbcf854b2fd37269dcdd4afa5401dfa181332f0 +zap2it-20210519.tar.gz MD5 0973df894f626964149a2e33d7667e0d diff --git a/spk/zap2it/Makefile b/spk/zap2it/Makefile index d57b1e6140a..7da4468fb0d 100644 --- a/spk/zap2it/Makefile +++ b/spk/zap2it/Makefile @@ -1,5 +1,5 @@ SPK_NAME = zap2it -SPK_VERS = 20210504 +SPK_VERS = 20210519 SPK_REV = 1 SPK_ICON = src/zap2it.png DSM_UI_DIR = app From b10d96f608b6b6ae81ef8b8ef852999090ae21de Mon Sep 17 00:00:00 2001 From: Vincent Fortier Date: Thu, 27 May 2021 10:53:48 +0000 Subject: [PATCH 18/18] zap2it: test for the creation of cache directory instead of -p arg --- spk/zap2it/src/service-setup.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spk/zap2it/src/service-setup.sh b/spk/zap2it/src/service-setup.sh index 50e666ffd74..7cc49184cee 100644 --- a/spk/zap2it/src/service-setup.sh +++ b/spk/zap2it/src/service-setup.sh @@ -52,7 +52,12 @@ service_postinst () { # Create cache directory if it does not exist echo "Create cache directory if it does not exist (${ZAP2IT_CACHE})" - mkdir -p --mode=0755 ${ZAP2IT_CACHE} + if [ ! -d ${ZAP2IT_CACHE} ]; then + mkdir --mode=0755 ${ZAP2IT_CACHE} && echo "cache directory created" || "error creating cache directory" + else + echo "cache directory already exists" + fi + # For backwards compatibility, set ownership of package system directories if [ $SYNOPKG_DSM_VERSION_MAJOR == 6 ]; then echo "Set unix permissions on configuration directory"