From 7bf2d2e6fafe4272f3b741f4cdd8935447e72fda Mon Sep 17 00:00:00 2001 From: zefie Date: Sat, 8 Oct 2022 17:37:36 -0400 Subject: [PATCH] implement wtv-favorites with huge help from @JarHead4 --- .../ServiceVault/wtv-admin/admin.js | 2 +- .../ServiceVault/wtv-admin/regenfavs.js | 98 +++ .../wtv-favorite/ROMCache/FarRightTop.gif | Bin 0 -> 132 bytes .../ROMCache/FarRightTopWithNextTab.gif | Bin 0 -> 826 bytes .../wtv-favorite/ROMCache/FavoritesBanner.gif | Bin 0 -> 1198 bytes .../ROMCache/FoldersCoverBorder.gif | Bin 0 -> 58 bytes .../wtv-favorite/ROMCache/LeftBottom.gif | Bin 0 -> 372 bytes .../wtv-favorite/ROMCache/LeftMiddle.gif | Bin 0 -> 1086 bytes .../ROMCache/LeftMiddleTabOnly.gif | Bin 0 -> 1064 bytes .../wtv-favorite/ROMCache/LeftTop.gif | Bin 0 -> 1117 bytes .../ROMCache/LeftTopWithPreviousTab.gif | Bin 0 -> 1339 bytes .../wtv-favorite/ROMCache/MiddleTop.gif | Bin 0 -> 1027 bytes .../wtv-favorite/ROMCache/RightBottom.gif | Bin 0 -> 210 bytes .../wtv-favorite/ROMCache/RightMiddle.gif | Bin 0 -> 961 bytes .../ROMCache/RightMiddleEdgeOnly.gif | Bin 0 -> 211 bytes .../wtv-favorite/ROMCache/RightTop.gif | Bin 0 -> 1006 bytes .../ROMCache/RightTopEdgeOnly.gif | Bin 0 -> 257 bytes .../wtv-favorite/ROMCache/RightTopMost.gif | Bin 0 -> 257 bytes .../wtv-favorite/ROMCache/WebTVLogoJewel.gif | Bin 0 -> 7459 bytes .../wtv-favorite/ROMCache/fkey.gif | Bin 0 -> 991 bytes .../ServiceVault/wtv-favorite/add.js | 45 ++ .../ServiceVault/wtv-favorite/canned/90s.gif | Bin 0 -> 2482 bytes .../wtv-favorite/canned/Music.gif | Bin 0 -> 1193 bytes .../wtv-favorite/canned/RetroSite.gif | Bin 0 -> 2427 bytes .../wtv-favorite/canned/Thumbs.db | Bin 0 -> 16896 bytes .../wtv-favorite/canned/funlover.gif | Bin 0 -> 2193 bytes .../wtv-favorite/canned/halen.gif | Bin 0 -> 1660 bytes .../wtv-favorite/canned/images/amazon.gif | Bin 0 -> 1711 bytes .../canned/images/barnesandnoble.gif | Bin 0 -> 1957 bytes .../canned/images/chicago_tribune.gif | Bin 0 -> 1595 bytes .../wtv-favorite/canned/images/ctt-wtv.gif | Bin 0 -> 3331 bytes .../wtv-favorite/canned/images/discovery.gif | Bin 0 -> 2233 bytes .../wtv-favorite/canned/images/e_online.gif | Bin 0 -> 1572 bytes .../wtv-favorite/canned/images/la_times.gif | Bin 0 -> 1039 bytes .../wtv-favorite/canned/images/msnbc.gif | Bin 0 -> 1698 bytes .../wtv-favorite/canned/images/ny_times.gif | Bin 0 -> 1330 bytes .../wtv-favorite/canned/images/pbs_online.gif | Bin 0 -> 1967 bytes .../wtv-favorite/canned/images/premiere.gif | Bin 0 -> 1152 bytes .../wtv-favorite/canned/images/roget.gif | Bin 0 -> 760 bytes .../wtv-favorite/canned/images/soap-wtv.gif | Bin 0 -> 2051 bytes .../canned/images/trivialpursuit.gif | Bin 0 -> 2510 bytes .../wtv-favorite/canned/images/webster.gif | Bin 0 -> 1036 bytes .../wtv-favorite/canned/magnavox.gif | Bin 0 -> 548 bytes .../wtv-favorite/canned/mattman69.gif | Bin 0 -> 3183 bytes .../wtv-favorite/canned/midnightchannel.gif | Bin 0 -> 2450 bytes .../wtv-favorite/canned/mitsubishi.gif | Bin 0 -> 429 bytes .../ServiceVault/wtv-favorite/canned/news.gif | Bin 0 -> 2010 bytes .../wtv-favorite/canned/oldavista.gif | Bin 0 -> 2333 bytes .../wtv-favorite/canned/oldnet.gif | Bin 0 -> 2374 bytes .../wtv-favorite/canned/samsung.gif | Bin 0 -> 1415 bytes .../wtv-favorite/canned/simulator.gif | Bin 0 -> 1495 bytes .../ServiceVault/wtv-favorite/canned/sony.gif | Bin 0 -> 709 bytes .../wtv-favorite/canned/sony_pictures.gif | Bin 0 -> 2321 bytes .../canned/sony_pictures_store.gif | Bin 0 -> 1791 bytes .../wtv-favorite/commit-add-folder.js | 36 + .../wtv-favorite/commit-arrange-favorites.js | 14 + .../wtv-favorite/commit-discard-favorites.js | 84 +++ .../wtv-favorite/commit-discard-folders.js | 76 +++ .../wtv-favorite/commit-move-favorites.js | 43 ++ .../wtv-favorite/commit-rename-favorites.js | 94 +++ .../wtv-favorite/commit-samples-page.js | 42 ++ .../commit-shortcuts-favorites.js | 9 + .../wtv-favorite/favorite-index.js | 18 + .../ServiceVault/wtv-favorite/favorite.js | 619 ++++++++++++++++++ .../wtv-favorite/get-thumbnail.js | 13 + .../wtv-favorite/images/checkmark.gif | Bin 0 -> 353 bytes .../ServiceVault/wtv-favorite/images/fkey.gif | Bin 0 -> 991 bytes .../ServiceVault/wtv-favorite/list-folders.js | 16 + .../wtv-favorite/serve-add-folder-page.js | 123 ++++ .../wtv-favorite/serve-arrange-favorites.js | 233 +++++++ .../wtv-favorite/serve-browser.js | 237 +++++++ .../serve-choose-shortcut-favorites.js | 404 ++++++++++++ .../wtv-favorite/serve-discard-favorites.js | 228 +++++++ .../wtv-favorite/serve-discard-folders.js | 202 ++++++ .../wtv-favorite/serve-move-favorites.js | 239 +++++++ .../wtv-favorite/serve-organize-favorites.js | 220 +++++++ .../wtv-favorite/serve-rename-favorites.js | 218 ++++++ .../wtv-favorite/serve-samples-page.js | 271 ++++++++ .../wtv-favorite/serve-shortcuts-favorites.js | 204 ++++++ .../ServiceVault/wtv-favorite/sony.html | 247 +++++++ .../wtv-head-waiter/login-stage-two.js | 4 +- .../ServiceVault/wtv-home/home.js | 1 + zefie_wtvp_minisrv/WTVClientSessionData.js | 3 + zefie_wtvp_minisrv/WTVFavorites.js | 387 +++++++++++ zefie_wtvp_minisrv/app.js | 2 +- zefie_wtvp_minisrv/config.json | 57 ++ zefie_wtvp_minisrv/user_config.example.json | 21 +- zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj | 96 +++ 88 files changed, 4601 insertions(+), 5 deletions(-) create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTop.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTopWithNextTab.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FavoritesBanner.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FoldersCoverBorder.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftBottom.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddle.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddleTabOnly.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTop.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTopWithPreviousTab.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/MiddleTop.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightBottom.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddle.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddleEdgeOnly.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTop.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopEdgeOnly.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopMost.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/WebTVLogoJewel.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/fkey.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/add.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/90s.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Music.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/RetroSite.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Thumbs.db create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/funlover.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/halen.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/amazon.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/barnesandnoble.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/chicago_tribune.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/ctt-wtv.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/discovery.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/e_online.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/la_times.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/msnbc.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/ny_times.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/pbs_online.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/premiere.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/roget.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/soap-wtv.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/trivialpursuit.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/webster.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/magnavox.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mattman69.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/midnightchannel.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mitsubishi.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/news.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldavista.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldnet.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/samsung.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/simulator.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures_store.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-add-folder.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-arrange-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-folders.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-move-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-rename-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-samples-page.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-shortcuts-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite-index.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/get-thumbnail.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/checkmark.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/fkey.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/list-folders.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-add-folder-page.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-arrange-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-browser.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-choose-shortcut-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-folders.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-move-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-organize-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-rename-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-samples-page.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-shortcuts-favorites.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-favorite/sony.html create mode 100644 zefie_wtvp_minisrv/WTVFavorites.js diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js index 599547c2..4df04c97 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js @@ -67,7 +67,7 @@ if (auth === true) { - +Restore Favs for User diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js new file mode 100644 index 00000000..d361efe9 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js @@ -0,0 +1,98 @@ +var minisrv_service_file = true; + +var WTVAdmin = require("./WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, ssid_sessions[socket.ssid], service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + if (request_headers.query.username) { + var user_info = wtva.getAccountInfo(request_headers.query.username.toLowerCase()); // username search + if (user_info) { + var userAccount = wtva.getAccountBySSID(user_info.ssid); + userAccount.switchUserID(user_info.user_id, false, false); + if (request_headers.query.folder) { + if (userAccount.favstore.favstoreExists()) { + if (userAccount.favstore.folderExists(request_headers.query.folder)) { + userAccount.favstore.deleteFolder(request_headers.query.folder); + } + userAccount.favstore.createTemplateFolder(request_headers.query.folder); + } + } + } + } + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/regenfavs +wtv-noback-all: wtv-admin:/regenfavs`; + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
+
+

${minisrv_config.config.service_name} Admin Tricks

+
+ + + + +` + data += `
+

Restore a default favorites folder for a User

+
+   +


` + if (request_headers.query.username) { + if (user_info && !request_headers.query.folder) { + if (userAccount.favstore.favstoreExists()) { + data += `
+ + +
+
`; + } else { + data += `${user_info.username} has not initialized their favorites.

`; + } + } else { + data += `Successfully regenerated folder ${request_headers.query.folder} for user "${user_info.username}"

`; + } + } + data += ` +
+
+ + +

+Go Back +

+ + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTop.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0b028dc4843bff58521f53fbb5cc6d7b8d96ab7 GIT binary patch literal 132 zcmZ?wbhEHbG-A+VSj52a|NsBc&`^DSeQj-RNl8ft7|;PRKx!D611)yl`Dbv-bM;<} z*JpSCPtfQ~$()z5YF*CjeFZw_OLFg5tb1Sc{=Y+ff`^V&|A{4+G%~E_UszG%)he{^ e#+tIzZ>#n{*ihl4H~ajHEmddpcHiY>um%9hCO10( literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTopWithNextTab.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTopWithNextTab.gif new file mode 100644 index 0000000000000000000000000000000000000000..2f216513c0ff82a1323ed765faa1a20b517f0e81 GIT binary patch literal 826 zcmZ?wbhEHbG-A+Vc*el+|NsBc&`^JWe_vl;A0HntFE39|Pj`2BH#av|S63Go7iVW@ zCnqOIM@I(-2YY*aJ3BjDTU#3&8*6K8D=RBYOG^t23v+XGGcz+&Q&STY6JujzBO@b2 zLqh`t1ATpcJv}{LU0rQ$Z7nS=4Gj%-b#*m0HC0tr6%`dFB_%~gML9V+Sy@>b85wD5 zX(=fwNi!!&NlA%0*CY~~C0xQKOr0boB*aVRiN-aE8rg}&){Df}i8urc+Xo2?3kyZp z3hCPj2ng_oRq%$Db8~ZZn7Fel=`#!+paXI$C@vV-|2HT#HMg|3HHq`FGxqfM^-t(+ zpWG(S%FHJwKYPyHdGqH?S){^J`Bw%X7$_yKv!B6StVsjr+Hxc_sDk-?$|ts=mkFZvESvm-wak zx*J)p`}X7bC2;}euPG-OE}gpPPkHZ(kTtZ&bx z&)>>5r1sgq5wwM z3v(PhBqWs{yY;MaD?71(@wGS$@A)t{-9^q1dN!u+EEC=OuyOlxtN9%h_G&7>i`km3 zxpeon59^NXR&+hPSum_^!WKDRWj>pe@&^uCY;&6;DEWTfQtpM4YXSol(vzpyCHzri zKDPSOc@5JU0hi`v$G4eiTu}JD^|hz4)`Sgze_dc>cc{Ftx25qwd+DLGqK6zDoI7rv zJkR-Rg2RC}0i8v&PbWAwGO#P!q+I`}JL%`=7nkjsj_%w0`}@2Tr|0|c-}m?TkI%2~ KpVt;(um%7%we}1E literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FavoritesBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FavoritesBanner.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba0e4f810c1399df8e78a8ce96b36073005823ce GIT binary patch literal 1198 zcmV;f1X24(Nk%w1VKM-`0KxzOLvMK^J3%{SZ6!iUC`wWvGB`6>VJ%NrA^8LW000C4 zEC2ui05Sl)06+u&NV?qqY79v03j?%KfCq+C2!~}p#`lGUqd|?b&!8Q6!BMT(l7l?8%G#~(yk3-Q zo|IjCEhz&S6Alsq1qB2kf&?9EkCPmX9wd`xmy(kfivx0@qN8#ioM50%Y(@@2Llu=Y z5^<^~Vk)%|F1i7vqXwr>E{nv)#vQT8$9^Weog=xO(iT)qEhD%JTa>Sb*+3(&orQ;N z(+U`@=t318owsOa(O{8B8No-R8Nj~%_!Nq0@Crb%puvL$p-l?JgV`P*ND3I3=cNNb zfBGB>;t>8Mo+)VoCO!%BZw(!f3?J1yK<5UAa}AJvI(Y`zG&wQ?w4hX@$;63PegbvW zDMS$%5vmj-SfFD{T{TL=Y?0x_1P?QCHmiZMYdnfm&&`^}rfIcJATzv@=*EG#H6c|M zfQP7_paTL5Ejl}-QVOtPVOF{&j*5YDD(Ud^@s^FoH*sUKqcB3MJwg&7O^%?KE#NOS z<2BBMxEZ5oPd()T)61*Z(O>Ra4t!+pY)FkhoO0p%#b*Xu$pqR#T!Ew@zk3iYO*;bJ z<|y(qC-WF`Z{N31SUiGUY(QBY!#2GRJ9bqh=O30QqHa&zX1T@Z)G`OiK~EA4 zZ~m3TFG(X11Dy@irM90JJ|w5zfnEs`(p#X6ro<#cv=ATx-EDwPd@_8a zz*#m}#npc#l6KF71g3`rAWXDKfios-r(Jaq@OIsGpW&zyk2u_9BaBE+6N>~*O#@yW z3XHelIM@)Cjx`Jrr3VL_Mah>4?ZL%T16O_|*^!8dRMuIwr1MCJ3s~|2nQTd8g?|WE z5(QQ;3Dp37LZO)?cb|;800tjYxndO$P$4J;ilBH21*>h;!CGA+vL1JMNmgEE4;dO~ zrUcrhM-h^Q1F5PDfxx5^#$Z6>G!#xbm88B6N}z!838sZjLR z3yhX}V4I`5x~|dGMBa{+o0%{QQLY7v?t#~Ikn)ROL5+m4$g;}rC7}gA{&=w`(IS;# zO4@2G?j8sKu`z_;LN}A7BryDtS+9XqWfeZr%LSvBk_wB?U-Yu62qmK;Di5IUfhrG* zY}jhc-xVWkHMI72az40XDWFY*y5n+Smr_9jLHixO0A7ZHxHWBf=9jQw0TJ+C!1Z+I zwntd+VG*@;3%Fpw+Wj}^iz@az_tY38WOzbUygBoA-nP+kz&a7NLu4U$2Mw2+F^*OQ z;fO>bTrk+YnO9RmS$QWB8-vhoCjC`Yv?Klf`knVQeRgjB%|CNg3dj-DpkU5;CG!Y8! M{`>I9??3_oI|{@NqW}N^ literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FoldersCoverBorder.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FoldersCoverBorder.gif new file mode 100644 index 0000000000000000000000000000000000000000..b43d9b092b34bb89c3183e2b80be68ad1c9bdd78 GIT binary patch literal 58 zcmZ?wbhEHbWMyDtSj52a|Ns9e5C{s23ewcnWPkx35Cf!!ftgLhQ1OdCBZD;;0FrJB A>i_@% literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftBottom.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftBottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..10d41b5859b7700536bc9613ed704c8481a85e68 GIT binary patch literal 372 zcmZ?wbh9u|e8Ql`aD;*3|NsA?p`rf%{?5+MCMG8O`uf`1+G=WQs;a6oGBT2qlH%gx zqN1Y0!ovLg{M_8!3?u>_kb00^46HvMC|jLfG$&)#x}4Yh3Utnw*mjVbznh( zhmKUc&HciYIac$}rEq$!janc2lK=GEs{Q)96+U{wN1tt}>UG|H|HF@yy6bNr{Ia`_ z|Lo`g4IawDjje5#?42ykOpJZ~6DCfYJZ0*%=`&`|nmuRky!i`e@GR!!U}Igea@FcJ zYuBycuyNDoEnBy3-?4Morn>fh`?dETIK1!Bk>d@=PMj`3b>@7*xeJ#wFI~A_(Hwo_ z&edCYAEaG-_{8_|(-*GKU%qj8{q}>|`;T9&?|=Q_^!eu>jo*L&{9`<#UZAkIiS41H k&xt%m=Mp~oN!=QPGDo}a=q2r0R`_^JpWOUb1_o;`0M$vHpa1{> literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddle.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddle.gif new file mode 100644 index 0000000000000000000000000000000000000000..2de8a99b0b0d576256b5a70721db6bfbfbc90f1f GIT binary patch literal 1086 zcmZ?wbh9u|e8Ql`@Qi`s|NsA?p`rf%{=UAxUS3|Fo}L~a9`5e$Zf5R+g5Q78Vxf=H_N*W~Qd5CMG7v#>PfQMuvul1_lQD z`uci$db+y0IyySq+S*!LTAG@g8X6kv>gsB0YO1QLDk>_<%F0SgN{Wh#3JMDH^73+W zaJ-vNK3IZIAQ>IRvK4a#r*>mR3o4;V;LS{}WLzBLht2&w-TiRA{+|;SW z#>^`syKDEJz5DhbIC$vrk)y|sA5&1)(oxqk+kDY@?fOgCdi1%N#AW5ww68yW^!Uls zZX(4+L8{x0FlRZ_7AvF!{uEgOg7`9DH*8sN*L)s}llB%g)cg zl=DTP=*hCxa|8oD4hS%>xV*ft=tIOKX4P}e0{STyj9XV3KZVbPB&XG$biMJ=iSyhF`D-r%RXlfI{HK#JVdAcB`(^ECJWybt9pBBNki&hy z{qS)i#Xakt?o41j`r-N0uzugVEjjx+r59w&FIWEFSGf22!W9YSyDKxzt5g)3;&wW( z)jNMW+%$+o`1R&P`@LW1?fbuC=RwiFx~CUH@6~hYEfSAs-u0ZHO;TpsgO*O6GUw*2 zidPP?$OpW5s5mdQl(+G*N5ZXkxpihNLK0z@`#Jej9HhHMUL9Z-z8~qFWFZmbz|^bx zjiE(I*~;QPr$7nElEv*79~@i+tfVr}ak7*gxH?JX(gbEc$Br5Er#$I#U|^F!)1lgG zc}JmT`o=dJ-dsE!6ArTL&*@B>Wq#tqe674?PKVgIIW8Pvm${Ou-nHR`Kofhl(WB{{ z4V({Vs4~e2FtW=mDR?ncXHA0>8(#s_P2Nd?Vo~}E8M{`_)n5^C$e?zemUgM$xvbUp j8}F@Jt+VsptJTVT|7q#iB=BYH%s(o(`i)W}1A{dHQgc|+ literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddleTabOnly.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddleTabOnly.gif new file mode 100644 index 0000000000000000000000000000000000000000..77a09d19ddb4dc075404f08d24e9c3dad97c9edf GIT binary patch literal 1064 zcmZ?wbhEHbe8Ql`@Qi`s|NsA?p`rf%{=UAxUS3`v9v<%Q?rv^wE-o(4&dyFwPL7U_ z4h{}>c6PS5wl+34*4EZmR#ujlmKGKk=H}*RW@e_QrY0sP#>U1*Mn;B)h6V-(`uh5M zdV0FLx;i>K+S=M$T3VW#ni?7!>gwuhYHF&gswyff%F4=0N=k}~iV6w}^78U>a&oe= zvNAF<($dmWQc{wVk`fXU;^N|BVq&7Aq9P(9!otErLPCOqf&u~p{QUfUe0;pTygWQS z+}zw;TwI)-oE#h+?Ck7pY;3HotSl@n%*@P8OiYZ7j0}St=zyFDiVFtz{|ydJHWnsE z?H!$6-95d1hVuOEj8mpgn?7Uatl4ws&YQnr;X-B(Ndx1)m8&|M99r5|Z`{ypTD1tO*4279@Ll9slUNv^I`(i!o%$X!5cR>wmh(D z78Ld@xWE{5tY6{p*&B>0oLkBz>^CKBIGB85y1~hZFE$=Ie$?@ko!J2frDf;mU&{Kx zk@RHQ>N$e`E;|^QS6p7+SMVm_60_>LW&zy<1IDeZ!zE41SUj6TV@`Dlo7KerE_o&- z_w4^UyFUSnEVp;twMuCUea~{s)BnI#=UL==e{rf{k@T4#k9}0FPMvf;ageF=*bMng z4;)!KQ}zpJ$8=2Gxy4@AZrU9M^PTeC9P&P=@0BlZpQNzH(fUfm!y|9*KQ-$=+bgk% zh4;YZ{?ik!Hbvh3=NGVH^`2cO(l!%#B(GP^51W4N@M8_Z-YW3JF{8EiR92&V|h!#h-V4SvpEZo zG+zA@+{7#~q3mIU<(myH#g}|E&asO17$~*b{F%_w@^@zPA!eR^Hy-d>^DwrUYDFb8 zG0GGyecWLDpn$noKyXp`V+$pLf<|^FIZFjTGnR`fI*zBB4lyw$JZR(&i|bg*Yq(*# z*YuS=3mTc23?3Y0OPN-wsAJf0p>bBvln2jQZ*@%SWMFgHaF9*oM&?s4tvL;j%yVui zyyRAEXz($RS6P)YQ*VjGA%mPeEv-V?zN}UD3+Js`rL%I~t5wQt_i1U{_@B$l*4lXQ JSC#^UH2`h>RV4rb literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTop.gif new file mode 100644 index 0000000000000000000000000000000000000000..5689eed9ed90ca415b545555e235c358e69b44fb GIT binary patch literal 1117 zcmZ?wbh9u|e9EB3@Qi`s|NsA?p`rf%{=UAxK0ZEPUS6J_p6>4MZfTzjEsy7gB9q290rOD2KN6A z*48FEYRc^$on75My?x5!eC&)cbLP&QzhL1)W==^h)&7;M+M8P1R&Uri zft8t0On%4CUAy<}-M9b1!9$0S96h3>s-vf=t-tBK^4iu5SGp9~nIz>EG;~exKX~}) z@sp>|p1*kc>h+s9CWc04X4V>4S6y2F?ScXuzk^;Mwnag)Ov&UpQWOuJ`{OU^w#Od2lI1;vwaoudj<}t!OxB`yyA#d(G!MUPtHepA9M{`WJq; zy3NbKXwm%hhR6F=?Qiv`zy7BF_dnZ77Z%}Zj*DeH>uxeUXkvStFemYs%#R64J%$+z z9VYsUEv)uUTz0cnVclcNjBg$p=h>IGu22fRyfI9v-OAM9V2<`Rk8`=MFTOphv&vl1 zz;^JaMv8^aj|(i-S7&&fJ;Wk9!{Eu}`*+k_Dm)K)Tw>$1U{{@D^&`NAKlD?DDx>^? ztxqR^eqrFkcSS>zn~fzyz-dCd-A-pdmkmFAX0Ixl(7+(wBH%nX{oc&OJX$9Xr7KHD zENEchYk6>RLCd_#!{#O(8xC@NUp>9O698V|aw$I_A{tjY*u|Yc`%R)1I>FsFk*Ezy%}gw_Bw{yWeh; T$~^scJ8LEPyB%*>m>8@9OQ&mK literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTopWithPreviousTab.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTopWithPreviousTab.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0bb48d19ee2d1d6d4a74369c9b15ef443e1953c GIT binary patch literal 1339 zcmc)HeN)m00KjpON9Fk$6#;n=1VqRu5aqGJhfG(oT-wSzD|fRyvQ=ujep(q3`INJo zW|%EE%1bk!s#QL0TAI?@d6`ZT%Vw)=TUXjFc6$~3zJbplUsIw{q0D*;5`pGHAg|YJ zHk(sZQ&Un>l9G}V6BA7)lhJ5gvu2IKV9@LJI-O3d)oL^vwOSn?A0HPNr&6h6V`G&{ zr9z>IiHV7dii(VkjEIO>wQ7}IE|T6bc0bK}bjl zpU>yWU|>K%fPb{!-`}5JKTgj&L|?s$PN&mo zG%A%!(QTwqC}g>sOeT{w>q#UMF{7B6QA8vX2~rh-K)~-hg~#J@s&zOV4vWQNKF!C7 zVlWsC8jVJwP=0=XzP`RlBocu@z`5aYI2;CpL7`9x1Of(wLH|dR|Iq(lfDm4QUrO`! z0Uxys({0;K3VfkEd>ofURQs%;hdxKeA9*VCn~CHotG}3R9y)VVKc6Ebar*J zIHBSYp`_&!1qwlvyNB-H8y>koI_7#Xdj00DJH3xCubWKJC?edmp1CJ-X?RSGhCjg$ zg8NVzL447ZcT3Cf|5^F)(F^);#?V~8<;Ed)r*h$K7`rD>X<6Mf?lhFZgA~^+Lv2li z73?5=O#&fHb_8u0?GDZ!q)=Mo@cFLbBlqeQd!COB{=#2-QqWUyqoChPlJL^Q(p|mN zqs?hed6L4&(6n9pK<7#o4^?hvV6!cvj>{A6p6s3hhe%?sNOyXhr)}XONOce! zU$B0A(dlLvl6GL9xpkOxAj$$&*51?!O`d`{0!sm9TO3-1()h)Abvp7vQ^w|HtpRTU z=2jCj_7z+>zHD6@pb*zuN^5fU+vh2pE|SY@wM(*#d3&cPD)90oi>?lMHL#N^{q@;g z{qi!vJ8P>xGlu@?>U^PjoHFlJ#0e2C*FI#n_8u7CF+5gu zFkW1aPAr|op-4rJmp$)=LdTUlHNOPLJTG2UaP&HldAe+4AA~-oSiJ2Bpuz?3MSxjjaHPp6}L=aK~;!&;rKcJsNI~0|24(TYJZ}6;o+w);7Q=y0k`X4gOBZ z0lf`=mOVi3F+s1sadzDF6Tf literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/MiddleTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/MiddleTop.gif new file mode 100644 index 0000000000000000000000000000000000000000..9afd24d496f460706aa5ecafffb33adfe7a827e2 GIT binary patch literal 1027 zcmV+e1pNC)Nk%w1VX*)z0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui0I>in000Q+09ObcNU)&6g9sBUT*$DY!-o(fN}NcsqQ#3CGiuz( zv7^V2AVZ2ANwTELlPFWFT*gvTEJRwX4^!V8e({Vj%brcUw(Z-vbL-yCySMM(z=I1PPQ1AB}*y*TU5yZ>M)j$~<`6@hx{>Mrdo&vb3yc&_h!@BhG{a7Zi~kI1BQ z$!t2G(5Q4uty-Odtai)odcWYXcuX#v&*-#zoff#?@VIs;jK6uCK7Mva__cwzs&s My1Tr+zMcsHI}74#W&i*H literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddle.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddle.gif new file mode 100644 index 0000000000000000000000000000000000000000..e185e1d795e915978d0251317ca58335147579c3 GIT binary patch literal 961 zcmZ?wbh9u|e8Ql`@Qi`s|NsA?p`rf%{=UAxUS3|Fo}L~a9`5e$Zf5R+g5Q78Vxf=H_N*W~Qd5CMG7v#>PfQMuvul1_lQD z`uci$db+y0IyySq+S*!LTAG@g8X6kv>gsB0YO1QLDk>_<%F0SgN{Wh#3JMDH^73+W zaq93 z_~c~u9>0F`_OXeXsf*>iugmn=1?058{r&g9ZQorFC;kWfIr(jTj8ANMXeDLSWMKGg zLu@yjj9A#66M~U^@;-GXGS3y9J0@xbD{Z>yd_r*QwE&L;0?f;Nr&?C%d@MA+*~+6{ z#q~6zxm`fjv~AI%1CA>%x5>}^QsKqb!YUZD`CD@3krQryQ@K0u6XSJ&eP#EL*?u# zlR5eKE#>@|W`%w$ydSeS=;(yTH=iG8xe>~_s!NT;TLUYpR zeWf1~9#v_yajQI-|DMt1@Eiw z*){K2C~#{pn9!)koD;f}*y*TU5yZ>M)j$~<`6@hx{>Mrdo&vb3yc&_h!@BhG{a7Zi~kI1BQ z$!t2G(5Q4uty-_xEH%LGdcWYXcuX#v&*-#z&2GEdg1CH6uiNkVynfH``~QG}f`frt zhKGoWii?bmj*pO$l9QB`mY0~Bnwy-Ro}ZwhqNAjxrl+W>s;jK6uCK7Mva__cwzs&s Ny1Tr+zL*IBI|^IkYajps literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTop.gif new file mode 100644 index 0000000000000000000000000000000000000000..71fa0febb50c67a0760052b74c53023c3ae62171 GIT binary patch literal 1006 zcmZ?wbh9u|e8Ql`@Qi`s|NsA?p`rf%{=UAxUS3|Fo}TXR?rv^wuCA^wE-uc_&Q4BF zj*gBF4i5JA_I7r5wzjr5Ha6DQ)>c+lmX?+l78d5_=4NJQrlzJQCML$l#zsa)hK7a) z1_t{2`g(eLy1KeLIy&0g+FDv#nwpv#8XD^A>S}6gs;a6gDk{p#%1TN~ii(N~3JUV_ z@^W%=va+%=GBVQA(o#}Vl9G}V5)$I#;$mWAqN1WAA|k@V!a_nqf`Wnq0s{Q}{Cs?T zyu7?TJUrao++18-oSd8-931TI>}+gotgNgoEG*2-%uGy7jEsy7gB9q290rOD2KN6A zN=?lzt!?dXV!UjOy?y-?CQh0>W$Lu)GiJ`3#mph0snW4%@sg#>mUpr+^NPx?TfbrB zrp;TnZri?N=dRtm6jii!HMI0r96fe?xjY+_gq*y(j>)CVSFT>We&gn?+js8XyMN!< zz|hpxO8vykSI6X8`Q+vFAAJ7u_1pI!H%!gVT#vkFU>0L?WH{6=`cp_N=ER1$URjGN z8w5NA6`0xN7n$BUu~GT3lx>TFVc^CkhWzYi8DCCpTI!u=RcEp>anmwQR#BHdcTP@z z&MWWSbwj4hgPEDfs7fpLRG>S*nn{P3tVkmh*RqJsk2YUS_Lw9TywvK#f~{+A<{QpF z!(n~pP_tnA|Hr4ceiQB#*w$tis5L?1*q!~w&Sr`Wwr^00+hSqxfnmqTn=^dU6z17z zFJ$LYlgU1pb+}znb@t}i69&p#Ue2>=FgaN`YZf=BV$|upnUC2gD{js#xG+I!`}?-J z?K&rY8xOyK%w4|XnWA+o>y8tP?;n2X>?wFt!eq^qbAP2zC>lqHzX({oyK>8_+BtlM zjK6+zX3=|sJ6b?LC9Ng~k$iTVMXX=52OiU&WPV8QKFBkG&TJx203Qwd`1EWyM zg+{KZteZ^Sni(G&5~n;7Vw#n?jPo#;T0olj+?sDMpU-b#(|WO>MJ(&Z!Va}nD{LDX G7_0%wyD!%O literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopEdgeOnly.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopEdgeOnly.gif new file mode 100644 index 0000000000000000000000000000000000000000..c71f21136ffb1afccb9072298266cb802b0650ed GIT binary patch literal 257 zcmV+c0sj6+Nk%v~VdDTQ0HOc@|NsA0RaGx9FDol685tP>0000000000EC2ui0OJ5E z000BdIJ(^aFv>}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{a7Zi~kI1BQ z$!t2G(5Q4u4F#^)tai)odcWYXcuX#v&*-#Sz;3(W@VIs;jK6uCK7Mva__cwzs&s zy1Tr+zQ4f1!o$SH#>dFX%FE2n&d<=%($mz{*4NnC+S}aS-rwNi;^XAy=I7|?>g(+7 Hmk9tn2ey*X literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopMost.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopMost.gif new file mode 100644 index 0000000000000000000000000000000000000000..21e8db42e8a058d78aa3e3bd430803e64d8ce9e1 GIT binary patch literal 257 zcmV+c0sj6+Nk%v~VdMZR0HOc@|NsA0RaGx9FDol685tP>0000000000EC2ui0OSBF z000BcIJ(^aFv>}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{a7Zi~kI1BQ z$!t2G(C8{aty-_xtai)odcWYXcuX#v$%3?c&2GEj@VIs;jK6uCK7Mva__cwzs&s zy1Tr+zQ4f1!o$SH#>dFX%FE2n&d<=%($mz{*4NnC+S}aS-rwNi;^XAy=I7|?>g(*Z H2>?3^GE$N_ literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/WebTVLogoJewel.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/WebTVLogoJewel.gif new file mode 100644 index 0000000000000000000000000000000000000000..ec3e51dda32f57e973525802e2f85b72e7de23d1 GIT binary patch literal 7459 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 XA&c5qT{hU11bMt+0g}mu259~tK^*wd literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/fkey.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/fkey.gif new file mode 100644 index 0000000000000000000000000000000000000000..8a1c5656f4bc5963bbaea1fca73cc178768449a8 GIT binary patch literal 991 zcmV<510eiINk%w1VKe|H0E7SlPfu4&O;j#1IZseoIy^))Ha;aNFAowHPES`;R9hMy zBT!IS7#ksIX>S)893CJhPfu1yM@|b34+RGaPf%D+P*+V(RsaA1000000000000000 z000000000000000EC2ui05kw5000I4pd%7VX`X1Ru4hw5#vwY2xOyqr*2 zG2IfC06`%UMG}w*VH$}vuGp-0%hgt=)52lgh*Be!u6n(FfeD4j|U;{1z78VFa6_pi#2^Ii+oDd~_6n+&H6iERFs0IQGa|v*acY2Vd zeU}sqp#Y=^lLHhM6bQbhq@|UosD=y@4;8PBRtW(J(*p_CxC4B}p*X<{yukyL2^8Z9 z52>rIuV7c>wA-8m^xFWs+z7Phz7^Ez$yhy5BA@`H04~DalDD8RE z)(s?3&>(>;3LD}YsZAuOZRY;sHMICIl>vbP3VF1UP#?-$q#m9WS#qZ@eH8#2N<^^Z z#|DzP;mdjQUQTnICW5mNR2_pk1U*JeO3GL*2&4g2WjN;Q0(!&w0}6G)CIFjE_IwMQUV_3{ zHM5Qsju)>{IB`&qJ3OK`2oD6PNml>CQ1Jb8Y01G-0-64rJpinXFk%a(q z>P-?1f%37(A$}j`g&uqK>_Q@n@X==hBoyBAVk#bPlu?M&EXLF>$aRI>C>R!aAXF4Y zpa6{Jf%s8`2rOV^L%%?94lctTI7$x|c;ZJX5j?P4kiH>Cf*%1;&;vCEMly^KrUU@M zoIO-h3Iq%q01!;(9dbt%5d=_$4~r`5Ln%K%us{!pa-;waK*l)UOAav5sR*9V@TsVz zmP#rE3at5IDr!EUz^kyfnrf=9&N^$YxH90WuC%Ht=mB%U!K#|QwrcFL$P(-7vas4J z=u5ylP>7($XBM06waDJe?6#LqFo6RvxvJ~9wY@{VEe zz4+#<@4om-;Oz_t_$#o$6A)~0!4f1~Fv8w8?C`_h`a6LPqTVY(zyT+WvBn8^yz#{# Nf7~(07tas^06V@qlN$g4 literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/add.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/add.js new file mode 100644 index 00000000..6b0f9555 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/add.js @@ -0,0 +1,45 @@ +var minisrv_service_file = true; + +function hex_to_ascii(POST) + { + var hex = POST.toString(); + var str = ''; + for (var n = 0; n < hex.length; n += 2) { + str += String.fromCharCode(parseInt(hex.substr(n, 2), 16)); + } + return str; + } + +var POST = request_headers.post_data; +var image = hex_to_ascii(POST); + +var url = request_headers.request; + +var title = url.split('favorite-title=')[1] +title = title.split('&')[0] + +var folder = url.split('favorite-category=')[1] +folder = folder.split('&')[0] +folder = folder.replaceAll("+", " ") + +var imagetype = url.split('favorite-thumbnail-type=')[1] +imagetype = imagetype.split('&')[0] + +var favurl = url.split('favorite-url=')[1] +favurl = favurl.split('&')[0] + +var favoritenum = 0; +var favstore_exists = ssid_sessions[socket.ssid].favstore.favstoreExists(); +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(folder); +favoritenum = Object.keys(favarray).length; + +if (favoritenum == minisrv_config.services[service_name].max_favorites_per_folder) +{ + headers = `400 You can only have ${minisrv_config.services[service_name].max_favorites_per_folder} favorites in a folder. Discard some favorites or choose a different folder, then try again.` +} else { + +var createresult = ssid_sessions[socket.ssid].favstore.createFavorite(title, favurl, folder, image, imagetype); + +headers = `200 OK +wtv-expire: wtv-favorite:/serve-browser?favorite_folder_name=${folder}` +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/90s.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/90s.gif new file mode 100644 index 0000000000000000000000000000000000000000..fbb4ac23024c43aabf390d9bcbcf0ee11e573182 GIT binary patch literal 2482 zcmeHE`&Uwl7Csohk)RBpIc8=g)}Wc0ScwuoGSV{37ilJ?mS8#Iq<0XdqgktCW~63> zHslM@>vYQO)HOSL(_tz-)fm$_kV;V9BDHKa&3Ng5xIf-+?H~5H_g?GU``eMx?BER< zY#M&l5@^ zSt5rA02EdzN5~U_W{54SG38an?JvPk}d@&w}z+O%7NXHbh z?Mql5gsOnPm`=Pq?-0-*VMDfvtfFT0XFTgZq`SUF@bL{B-fQcV8dW04>d0;Eo{*l> z2Te;k@~FoCDLcw)jv+xAd?ahg*?H}z&$V=Q{d!uT7j6c~5>mutfmR%d z&rdHUSTR{-d%F=iInq$VS`_1VS5ofr_w3FJFX_Rilg>fQwDz3PktSkv@G$ZT z$DMKH%Oqw(#=x1N7+hxY?)3P{vuvM}lhrXnN&6{rJbyWb9(Qw~Dxtq`OIdh9qmGhN z`2GZ#98{#kZSJ!-uq+-IPJBs#(W582H5CuHF(aU|Pi#wa%s z<0#)JUfIK1l}(A=*ET(bp+Rppf{c4;NHoJOniTxH|3OW6VQR=Lgv zPm>Q&1jEN^nHyVM(wYuY?J`M+(PpYJ1mCVCGT%fiyBHE($+gFv+{5q~x4pw955bjR z-6U`>cMnnLuUPus!Lc0i#C6)giGhWcdF`&6{PNqM#@qRKzPx?iSr)9-y|!N;!vgI_9V9x#gRx(CE9hKWaslVc}5zxP3!Z>$b!IBot&!U zukjRzd5hYa`vg!^y&gg)_ZYYlz~uqwcRf9PEA^^vQ{eSX@u)ZMq*twb~aR-w@|X@gK4s zI9xe>&Y~#J84to;RZge3yGNd^VASs*=Z8)$&2o&~#O-7*2_XUTR>N^#jc0oZsJHND z1$+8PwLI6`XSYO|W!rhqcdNe6af#%#15}4jQ)&vRt#gI1H;&aX-SWG(eJHd~eN%m} zM{D^lJFvgOaENtNd*Y{ezu>qAJLgN+4$=sggosa};a;b@<{#Qx`kf1nN$p>xuZVP< zl|%Q*e_4b`BvY+Y(yq)Gj$=bK2a7CfnS{N*ZDftV=>&CW!s}$Gk?Q0G#(`+(l<5M> z^~s8Zk+SI#MqUdy~G zYR32w`LuMsq&dEk{XE8*cPm7}5)U!c!k>vNsmiPi$D+4(rLE503n;D(y!0Dy%6XP> z^|u%L8qR)ZN)ZxDAJ0B4J zwoX$8ZJf3&V|!7I@7kS%;~$5g?3B5#a_jr?kEb0o-Mi}-ME{3@-5j;Cqfd{F>}UDA jFk=@6cnQQQ?Fw4FfOHpG@TtJmy}5+b54y9$0D$pd2hIe~ literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Music.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Music.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf284b8cb9a928b856ba4edd0f961e5fd356ab36 GIT binary patch literal 1193 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 G002A7aRvkc literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/amazon.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/amazon.gif new file mode 100644 index 0000000000000000000000000000000000000000..696ad5f52cdf4cd54c644e6bc1e39e8a15423742 GIT binary patch literal 1711 zcmeH`Yiv_x7{}jpdOO_(x|^K3ZtI!b>OixTh7>nJl4AEvFG{!);g~h@QwnVfeqV?cczx&DeHQLlx}s|*(DM4L}2bV+#+i8@#&9+&OE)*$YhQvnW* zqIH!zDM}9vO3}vlG)d-~8r>+m)Y1?+vAP6{oUCuVu|(M-?Q1%|>DW|LmYKUPO3(Vh zF!71A<<{L^zP{yw`&d)ogHx{eW*(gG-m>>dYj6G=#e2@2?CU#w{?v~xXAe{*is{~O z()1k?&`28QNOo8Z5|pf|l+II;UGi*TVN%%hHH@s_7I9dv^gpVDa>vskRc@ETn2I?a zhBa-@ZSbn?y_&1Y0^>LX4KlZPR?lD8E&~fSQr%I=qGq=xfdLqM7i=5em^B%L5J*L0 znEVS}THd^6?~qav>n{=Gikm|@mbBKbqEw&}S&J{$0&8KxLPIUKqZF1dDv%9HQp(yp zREEONq00A-j-FlYQ$`128a>VB()7d_rsyj*oLXR<%ua&Zz+HrD<0P#|FG;V|Lq#Q7FB_Q2*wxIk`_7TM%SvyE zvsTuIJG*yY=(+sU24}-)WKHALNczEyp5e?@lbQ)=&ZdWtGheTqk|-Nzm6EKbv;K5uetE-e7(~nD^U+yTFeLO-SH_!ApMQ46L*V^xkO(rX5W~YyC Q{p-p7)BRW0Ll7wc8!UAZm_zf{L2?wq z#ynwSt$H@*O&UgzFghixg&7QDF^JYkX#_+$mUr5@m?zCFVPc+OEo;V@nAa&7ElfX= zAWVDsSZ6oI*)6P9$LN(|#?N~kQJ&-6RG4GKEFBHUHsYhvFvqcezlULI!fv%YNRlGV zgo)!hJ_e#;KkcU(nqe81V`-N5Gk&MX>Gr!lw8!CgP)^G3usb{s%1zmwcG5u-6k)Yn zEu_Uvm`zrbm9kpw7Bgu!5hlG=ue0d1W-VsIv=%L9#xy1kqDPcErBbg{XcY>b0>)ri z3qu$r)kpyXfCl_O{)ZRvdcBHAVgUeAu>Q#yPksVOV^0w;t8xwbdZcO38fIL>Q>UP( zwN%yE`?t=(>gGE$V^^ln=5KpP7C$sHd%oz`9~ovpc6@PBW%`^taimthexv0(;+5&u z^Z?p(X=F*VD~H;9KX@n&;Qb}0FRR9mR3=?2DfHZKdpgc*S04);&G@OWNxt!s;ryrgqEvj58Y840|$f&hzMznS0gyMIetuN4CQL?<|# z+QX3Y4b=4;KGBdfQ+=Rmt!iQN?T3FWuC2-@lQXsUF>z?S;EM~8R*el){t z`Ok_VbZ?XzRP`G0T|c)&c|}(Cm$XpIAae2ayV1g>4?Uw(6|B4B7hNYVF_K z$@3L|3Ho|&&F6S-K0+?bjd*=rgMl2I1}%@dQ@N@i1Nx31PpkIG8;1pGUdQsHL|#9q zFjg<06TFsL|G4etT;N)i)E&98>^qsRD-)kKjQcVyZMHUl&OY0M9~2^r9hrM4+Ttvh z8+CC&FrF&O4vZb#*8BW@qqipGr6FSHo{7ba)h%=7+qF*_Pdk#-al@iFitlwv&J}*; zlMJkDc%&Df{KVfV?)>FjY)}K015rUupdU(Ffx4l>YA>4bE6DX3+(7!aS2wuI{pldo zHJy0?Iy5~nH#`;xDr+8KDM(dRHIS%ID(^~^%@{FJ$w8Gcc@$A~C6@lfCIlrD0sSg4 z@@@9DS0im}ONWwvczL-{=^Fvy>rS&O6Krd0L?`c-;so*?1M z#X$Dzt%1Yp)a!Rwn&&$oll9|oi7z;FTfRvF+0Xs7NC=a_5Rxi7d_wSEoRlBEUsCp_ zaJBM|YFkQvkuYJ6sw=0!CoOfA$FB!?aj+}#z}2a~piT1PJ^^Tqbm!j3&%fZ^k#Hn1 zB@=o@X)^Dsc$H81l4^ZQ#48g26|648g^GT!xZmOv*9zBtJic7>@N@6wZi7pNCO7Y{ z9GOp96Pg;hqurJMkv^^c04_tvwruXdTWf5+_1zqL22I_U+0Y{_z}wb|p{0zvK)+hJ zUA!SExNuA*Qh$OJ?Eu|>yn3xC=ivA6ZrO+>;kZy1%9p+n5sZM@nG59dIU6}ru&#Pm XtN)>|e{STN(%ISCw{(310oe3kCY{5p literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/chicago_tribune.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/chicago_tribune.gif new file mode 100644 index 0000000000000000000000000000000000000000..1fe4d446d320ad261d39dfb2b24cc0f86cabef8c GIT binary patch literal 1595 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 KOE!N9%=-u0VO#qE literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/la_times.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/la_times.gif new file mode 100644 index 0000000000000000000000000000000000000000..67eba7d633d5d1f2f548ecb615d29802ff6a3bf9 GIT binary patch literal 1039 zcmV+q1n~PuNk%w1VMYKn0OJ4v0001!lan_?Qy4H<($mxa{{9355A5vh85NJTU66>uW()#g5-v@`ACL^C6tjlKu+h#I zZp0Lm0|KMbH!fJ&(^GRG3Yp>Li8(-se(~MmK)YZOl4+>iUtjA z0>CKmNP++X3II(oB7p;;T~cm9&{Kl}2LX&0aG-SQ0Rk%;95|5RC58tHkUnUTbkL24 z1PbU>HB*ZL1VPE#=q4}00SAcW0$6Y$KtHVx7FcKycEO#%2naM7w?HU@8x05;7Eplf zgT``=5^#V6!Pc&p7dSXjfPjI`1PH8^u-E|s1$+x^EwDg=gV9I>Z02gWfr8zt`MMS` z@hI8F3My+=O&h_2u9z0{6>wQ?+y=@C1ORXs!PMS``7TK9e6iWF1&Euk{M&(d?WL)V zO`Vpi-3OE#PfG>{7F8pf*Ww*1yPOf}q+ki~SWS{p zYDQ$K-A0|Jpq_<_Mc{zbN~zxrU|<2PmUh6L39w@-IG2f*T7OT>nrbV%h68C?RW;y1 zD6VPO7@`*1uuGhg$Ihi}vk6s&LsfSqAlZzTD$sx+vEC5^0!!o=sdI65^XRiNBsS*( zU`gepc6af`)mTUM2is8ucxA*`>;{!U0?u6})onr@Rc2qKt(&BRG*yV50{}nZ8d$Um z@M>aZ3iVrym3gYK3}&Pja%BKdJfMJ*4M-S(1=Cgw%g1r0X1?A%ckuxktJZE*J<`PG zt4jhU@vC9I%BH}i&6wh?ioIMNtJ>kI8eFOc;GSq;K?(4Z5`MhHE}`r=?y`66QjCUU JdwoF!06Plkw=Vzy literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/msnbc.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/msnbc.gif new file mode 100644 index 0000000000000000000000000000000000000000..f7882a39bba2c390dc8fd269a11c18a4b7d9e09c GIT binary patch literal 1698 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 literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/premiere.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/premiere.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd829717ad156a7b1f82bd17394cf772d06139f1 GIT binary patch literal 1152 zcmV-`1b_QSNk%w1VMYKn0OJ4vv#-2|fywIU>vnOC`S$i00<<_YW)Tq)oS4A@0RbEs zLtR>Y#KFmefq_XxcMJ>+A^8LW000L7EC2ui07d{b000F3@W@H4y*TU5yZ>M)j$~<` zXsWJk>%MR-&qib4c&_h!@Bg<2V@NC-k4U2+$!sPw4@`6tol2&U#G^{F9=w(9w|f;D z9ts9Pkv#wyhJ*nC_&U_z23^}=G!h91YHS904?+N0eE@uZfDe5QTagJ30+I^^1aVOU zmkF5!4wae*2>=8P5)7$gnhT@^Y?cD1tPGt5jDV=P2Lifs4Wh|T1l|z>< zoj?QPGH({Tz&sI<1Yn^;hPVts-1v!sM2P+h6D?p!a$>3l1sntzP+-A>hy)mF zn)m?K%$uny$%OeT0jrxbb2h*^b0~oT1p)vo(30rQKR=z~8tGIM)T){iS#mm50MY`Q zkcO)I$EMUnSUX}3W|XK=qyaP`VCpqM00aSkG8mxJE&>5~^R_a8myTZsco*~?a`$j5 z1q=M%EgF_-Wv~J)&$S6x6K1Ay1%yi)6X{Q;1BM_VFjpzdCFMvH0Bf~!T-KInJMc`q zHL%sQlX^M;n)go!DOts3Ae?#L1ITaRHhDDnSKhpVb!N>Qvw`AX3p_+xXbJA+Oc_9y zJ^d~FropkF56ZNFr|+`U^A>`!Io$`*x&BpJeg&iv-+`TZq=`xe{KcSj;+5t=A-A=b zN>b{f6c=!{RoCEOu&`noQZvmZo?x?eh8%&Xr8K~8&iSTFbau(q)pnaCu+)k6+2$2P z_NC`QfYpsxKx!3YNSb<}dG*v~GdbW;e9p;5+FxO1meh*3=@*<3dI^WrUx!@zWO&oX zv13fu$u^UHUnvk^ct+k)qL>)2Hyvdj&UA)|pYz>;*7 zwRRUPe~vmITnyC6T&M=XRhO|T{sjQQU1)k_*Gfs{Wfz|c&15N7!vGi5OkV&M)G$%u z!z7Fy4N zHLc_5AxSX+zygTb&7`db7#zdx!4_PcAch6B(xC<&eDl4x-hBri_}_vPKDgk06Rz?O zA_LJwUR7_8ULu@tP&Ap7jJ S*KYgmxaY3>?z~G70RTJEkO;p3 literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/roget.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/roget.gif new file mode 100644 index 0000000000000000000000000000000000000000..de63abf919b40c7169d3a79fec694065e1fcfea6 GIT binary patch literal 760 zcmVM)j$~<` zXsWJk>!v|0&vb3yc&^XM;Qzp&a7Zi~kG~#r$!s!}&ZyK0om#KLDt2qta=%S4cx>zu z3=RXDFl?v|LqgiHSTqLb`5V5N`xicTKnrSaNj?n#4g(H~K?n$ljz0(ofCCSc1DXp5 z0|<+WcMg%Civyyl1)e@iiJ<@hKn$`!nU@FvcRvc3o2Nhucc}ylKA=90KMkb=u8xVU zr~t-41dw>+^z@+AJ4L;xMYA}xIo zU{K(ax@#IK)k;=imx7!seQ1)CQDG1R6$dPs^sL}apr1-5N{N8MrAz@iNt>{vQ)}W7NFe4EHR9^I8T8RPNy7_ZUFxvgl1WxcMt5W2_y%QnsaP-v378W zG}KQ3v`r#K;1wfX4LspoxHI_iJ3kBjyo1g7tCNd-8x8$SsM~!?4=~up?A*_l55IB+ zQXSd>pxPhRnnbOEeciNxDcIjUy~cX%MW>QTMNd@|AA9qiqKSNXU~`^O{tW|FdnEmo z-7>#%Hykyj6y(5op(TP=EUF>kPcFukcHD>p>S7^cc<5zTAds+ymP`iJ$VOZ;;_(1l z%xn`QBxcEIk6u8Yg(Mq=iMBBQWLzST|)vFy9`pHRkf?Cd+fG~iS+Gr!Vx=7oAb?! zzSWF-wl)rT>saaMn`~dzwbYGf`8Nk?&jFCpc&c3WTjet!<(o9=6bYRnm@E!CH>@{) z^$;7?Qs?s}3>d**xN(KT=7;n=(}uYN-}JT}FH3nHKK{7gm|u8`)4n|3`weJsocTSmLz_s~PhC7GoC(w-(otA6-9rr? z9Ip(*QAsp*Dz!w&Nh>p#3VupYMWJ}3-1c9R>JQAJ7)35$9H&L0&!*~cB;;ih4=z%& z2(-1yEET_<5TH0*T`pwL-<$~5i!Fd)5(NcuaxM%??6L3~5Ld2fW00w0*{{Z}ccqE* zlq-!FB9u`hiNM!tj^^PhcrQ&@Gjx+#^oCv`qf8W1V~7~Aa#az6QKg9xF`gnq zfcuAl>XwlVuj<0pSQZLlXe{)}yt*W$SwWHvU_*Fy#HbH37rYC2q;`l%|19qGrAoqa16V5Xnt1T^ftRakgQl%7*QUn6@F? zI8HIAbt?XpgWY&Dxevf*^TF+m>=!t9*ULi*ETQ$ zxOyzb=g)T#e0lXaz)}qv46GtaqAi!x!*R&-iS8(n@2glrv3gV_xhas$cq9+=mp@}w z=`;kWggT=Mx=uXPb*1hGbOZiWglXS=Aw9`KXf0L(FwQ`bv#aXoPX_hQhbb_d0Bx>oWAZ(mZh75GOSwne zq}_CYQ!cW%by-lKyvf^Z7JMb5D)zos=X*m!+D10@-zsa%0~QSC={H;+wZ~CTArf97 z1`v6k9)i80Be0601g1*6VDg-=G`@7Ps}0Eg?P+hVE6NYGHa5`{U7d1Av8)<5&Eeim zj9b2n#_7(r)YT-}JpydYgdn3OJBZDiQ4J_>F;-3r>zLLl&u1zR^D@KJkh_PCO5-f= zgsGv0t2nN$%So;)o*~|h>FYj9Mxm$@eckkJFZrBY$kZfgu|(+oHuZFL@>B^Wc&q_( zuUb%Lr6(rc_X|+8H(TI{%$>&%O7YZ#gj=BqAzZ z0)oK{E3jIv5JDWsrBW$P(+Y(`sZ^@fYKCE0mepu9TCG;6(-{l~qtR%wSdJSJ7%3HSdIYIe@WnJ` zG!PaeVbCF?0ZmU50~VxV@!I~u!9NF9 zVYnQ_Iq+O-5I8Bwwv7aYqRNRGY{1v5gchQ$gkq~w2cL~uAqWGV}i8ga1( zk_N~LN$4=rLefSg)|DzqFP@<>x|TCvAm8r5BE-FBeRH`}-8lx0<5ync*~*~n4ijzxo%T(pS!(^#q<^evyqxUzP03Vp z^g$2f0iLB&o3Q<2@5AWY#1r!U&jvQkFLMd9-(nw@JiaVRQjx?Q43scAy>F*ZJZk9J z?%FU1?Z~V_a>>q{Vi~07+s7^D7rIXP2<(P}s^2X7qy2z#Afu{sbS9ZB7Lp0IeyC%PajLVH69?@o)i$7 z10J^DdA(+x|8ehzTe(bVjHveR*}E~3uJ80OsJ}FHGkl|eNkwpe;F$f&f`bc6d{c#% z>I~kPXOuQHd9mrVT2l4KHUB;H%yH@XM*2jvG}ks}ephDngwPzkXG2+0#V;{8KW7l?pusPx({|~-Q-dVCHZhLch$3Vi0mDiiD&BS+H_sxsXZALk>=>hGj zr3!Cyw`NbASABoZ&4}lFr*htXoF{xr{q(AHa^6g63tyO*>~l}D|K5A+t2FwDnAh&z zMdkkG{Nmp4O_=Yc!Q{Ziz2u1}Pt>+O)yU%CIyO80k#9qn{nFz%6MR;AFoVDB$PRNT z;@1Z@VJ^hq&C;dsN5(zhESoB?&ENTD(N;D$f3Q=S7icZ&nVS{aClQ_u-tjUv{G;~Y zgche*#-}0H^ugzWb^3L9*Xy5`8NR9dI@Swixo-Wat;qf3#=QRa;U;Qk*DuW>*Le&F^x{!QJLiU2yVYIo zPCo5^@AW0xE{ZM;Ny}2t+0tBmQhM&IpbJF{CI5=)uC2d8Ak|iNeJKbCSN{&uGsu5mGvc*>gnTT?WIRCS;t&TdHSm=IO^4FK*p1}K({)TPBl;cHOPVSH} z@x2MWD#5SzB9r6G6fuZXvh%mtl*V7ot-)oFcptj*R$9#a+|M@@!fi9B`U=urcn{Lr zb`4$?C1*tUEW7n_K09yuqViAjfvufrrr7O9=hw`&(+k5$;fd_1b(Xt+g7r^JC2-u) z+%YwG*I-nk=nQNC>s0M$6VJpw%Ww$~@U*KcxKuH1(^eO~)chbU;%`x|sRc6&Mg~`p vT@bizh9(=Ql+?oT0=u>=B`Y`O97&o@f2;9)^xN6`g0r8#yzc0Lfi?dFwd4XS literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/webster.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/webster.gif new file mode 100644 index 0000000000000000000000000000000000000000..809bdaa0a0ee5cfff1c516ad317b60f8b61c5441 GIT binary patch literal 1036 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 JBnSjZ_&+HM=fVI0 literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/midnightchannel.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/midnightchannel.gif new file mode 100644 index 0000000000000000000000000000000000000000..8cc2a059bc3d6b8ed5879c66898682c271312fc7 GIT binary patch literal 2450 zcmciD`CHNn0tWCe#3iDFq8whJsGwBHq>-8f%BiMkim9mJ6_ys7cUB;HB`G2qniZm! znl+Zzc39z&dDUq3%u};9qwY4-vok%5Gr3PQ`#iSIKe3-b;CuIyyNyq0wjz2IK7P?Be2r zb-{k&>gwv|=7z)J@OV6dKp+x`U%0!wdw6(wdU|?!d3k$#lSm{one5}^<41w``ub8R z6hA*de}DggfB-6$N~6&N0|SGCg6MSm_U+q)8NiMmJ9h5e$zU*ogM*n&=2u^RwQJX| zkdTnj(9qqxce7ZmJ$v?qg@uKOhet$2up=0I_wJ31jQslRui0!ihr@}Aii(bo=5o0_ z9*@uG3j_k8P$&|KVq#)qV`Jmu;`Z&^7at#=kdPo2ixU$QlaiA5@86%CoSc%9B9TZ^ zQ&SHdIFOc>mY$xTk&z*lN;5Mvv$C?Xv$JI~S-w0$E|=%zBS((Z6|;^WJzAkmRVtMwB_$Ol*%hVP zrKP2nrLtqkj+K>_m6X?%mzP&mRMb|-RaREkRu)uOSD!pCK3OZSsi`@B{CI6`?THg7 zPM$n@>eMNfN~Kn->+0&7H8~oMMyu7<*Vmi0`#LnrhK7d5#>S?mrsn46)2C0jw6y4S zx}MV|XU?2yZEbC9YwI**>-GBf_I6W;tWRHPFc>WQ(gD4q>#VG!qr+%44t1oRJ$tsZ zv-8}!b0(9itE=l=_r>n+?%tjw=g*(->FK#};ljm>7cX79WHy_7dwVSwOJ84Ke}DhL zz`*6pm#+<0T)A>(XlQ77c=+notK-+J2d|A?yLRpR_3Ph!^Udh!=*^oq$HvCS$H#Bo zx^?&N-Fx@$-M@c-Vq)UKg9i^EK791(k=1HlTwMI{;e*X)`}}`F-oiwe=F7|S^GKD2 zWeSo&v`-9>|A2syz-NH|*F63j3LCKnY_szaj+!Sm2$w)9OPp3uv-jaQ3rp0xKx9wy zo4Ff(PufVd(7_Z?gQMq>UkAs1f9_vA$H-mi5sm${h^OS*Ud@kP`Suc9gY=9kgUx3x zg*{&2wWLz>#${bo?_v%FNyl{M-}}X;(xead%{72|lgc3)AVNQwJM) zo|$DUFrreL$R{YO+QH1XT#57JCL1mbA%c)h*+iwlb zen0D$`A?-={`@G|>Zr708od&&n8QPKQ;j_hNVf3^hY-OxY1z0zwAbnj~|fq!KV@{4$Oz(4|1TNVJMsRv&F2j zf-+R9ye!7LZ5l102m6-4kxb%CUJq={dQ=vr23{^od^=W@C{fwb`bU0SprI1y78y_I zzb|Uuw?BDW-6LS;ORIbqzGcI=e_ZA^KA+c9ene(Ik30XT7R?=TgKP`?v^s_1urV`) zc&-u*d%Jnj7wNDn}d=IH)b5;gcyx; zf=;c)bA&51E^O(I2}~GeP3w};Pl7pRr~s) z2WL8VA_uZ_q7@XE(rItbaoTEF)p#d^u6lg$k4$DoA&nBX_Xr4}2%|ubDlm;T*~GJ; z2z)Ta{ zO}PvZ>0~IKGzqC%uA{E5wxJbP)ag|f(Zv1|4}fO*T04pvjFADDP_`7YAogvqA9X|zH_s{p`Isq6p}WcTvBG?q*~HO~(%;NUzv=a&k?e(x$6HMuRV zLPL}sWEP-uGN>ASguMiLtrt>b;NPvOO_%8+fHUC72uxEL3fl*wq$(-6K|mTjM~YTe8e>F4y$2% zLvKsgs~p@|(`*0<5G*JhV8o`OxDb-Yv<^74o)*UYf|`ZgDGb|TSS;7?S`hvlmBpAs zKiks~Y@D>;D_n`(d~LC;C%C_`HiX_@NGZa_v=nHE)Su&Pr z{Zh7eqowuvCjJq1Hn?@IMdqQwO@Dg4vu49SL#V;DZIJSB%j!u8If{D+jA<2j2jS&N z{u~IChaL(JtSD3rS=~3AJQu1!D2amOW=@4JA>;_LO6KL-uZK`jAp4(QJpI*Zeloo& zKxWvckbka1165?FmorlYt6s~Lf>0T+qKG;MoN7`_GHo2}Fz|M#auSwij=D233JIE6 cL+z>3;6DOT21$;3`4Zt<8 literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mitsubishi.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mitsubishi.gif new file mode 100644 index 0000000000000000000000000000000000000000..3e8c36e3d0b5804fcfca5b0a6323a52a05a2ffe2 GIT binary patch literal 429 zcmZ?wbhEHb^ky(&IKsg2|NsAc_wL=kcj$O58f~|sMPhS5*< zNK@W|^@9I+b~-0<3-1@4{=&6$=|`946#+_2M(Ifo^BO%xjJ&$aoaB{T%Kf}nwIy9Y s(^+@P@yC`!3j5?_R81q68eio#d)c#&!^&&c<>dj3z2l7dSE6bbr416dv*O917G z+6gWMT0 zG!O#h0DvEW;d2k7D2jXr3d67g1B}2hf*7zjDwRq>5EKUs6 z0Z^|9M*G2KosSN|Rt$(j0m3lGkLYv|VnAU%3PT8LFhP*s0Au6^tYGbDSp`O93g(It z6ovG9rBVrEE2s&p*zG!Oco@{dAcXB=QH=To>mdC+1erh(Rw(s8K9E3+C4^u;U}Tvq1_e^A8TR2y70OYm z%!Hu*;uHg@8wDYgI0eM~8DJDfW~DN{LJ3M`a_l}vutKLF{T%!MgScD*sMIPP-okPP z0R&ZeyoN~9=zxaW###s{hidEf>a&_=4SA)N6$NN*Rjs1pSFg6F*>nQ7ZFIXeYwz8& zcev~5bOr6Xjb)VpclsWAtK zORBj+!v=pQ`!67#Vx7fbQ)LD0<61NJ6RI6=9tJpzZ5dHz8y#KgZ+uVtRea)~aE|F{ zest0+sRpIh060N;&bZgi&{Wsa4YU!D1b@$GYs!Dt{^NOfE#Mqk`p#pZqXowg%$q51 zXW3b}x&xvHpTvthuI@fc`qUN4Os);=>W~aP5b|$^EqAj|h0PGHZ6o%46$gx`4IScx zV8wo)q9T#{XMLuWRt zZL#?2mYnqNXRWp}Et0r5z32h3#OYQn4j(UAvC6INwiAFBxDn0gGDIKE1$7p6;T`$j zI6}BuNBHIf<3)40mBjyT_9rIG?Gf>dv6HhyjsH4S?`Etk`VYXUGqLbB^%dEZuUMq@ zZC>pf^|lbR$@ZQRA4R9(zb*}+PEU+$?;3+LG@YVAZ2-F#x9h-#o;CQDS!qrjdDD;~ntBahBf-jVv=GD6Zz(}ZEEo$>iw}IVa9^ivrQVY7uZ!&cfh8Z#2eB0ckPPWo%T&?k0$M)_k^v@_rFj8 zx9GufnfHfHzIoSP~x9Me!#jH&W@TZ$gExF;i;_?c$;xRP-=$HLr>l zu#%uoJbY>-d9x_ng>2p8FG1|4mwTj#Pc^Yr%~tA@K=Yy3466#iN?^9d>dDrz#@vTL zlsW`CJ7!l+b~qkdI(IOZ=>0x7yBKPHzz@HqSM-t(ledC{60&D zO%QIq3oc<}Z%2NyBxT=8ey~Sy>q30GdhjLaBsbC&FK4-bR5Rqt-+qzrbyxyJN>6f3-Bw2TF;7t?G{;XVOK2Ktv z@RGbr401n`nZ5J+K0DwVY3S$Vj&pQsc%-w;Xkh_A$KT*syY;1?{^j^mk@?YDc}a|D zi-eN!@A(Pmd^&6J_L1Blwk-#?Zobox*u-PXv`sTw|GAn2JJSsf)7PqNdw=S}&3Q4C zw$8OxR>x+#0Gr4qk$^NN*7gFaqSE@_WtVr@=S-fjQGGvL_W1Shx6JcXv_f+w<83-| zm{TVA4Spi}&a?gsjz_DjbS@0HsQhRY`YP@W@DAV@srgj=<6g&g#@|b}r#`V^_zEI4 zUt6BNeuOlcK7pd*?m2ifm|D8UuFhu;u~u)iXAQN#;%=nkb<;K$wZ zVM6;Vc5XmT&eDzL6)Ao9UAjAKhyC`urv=eO>^z)=->toJ{uwi2zvfz_Ct+u5X3RIO zP53hpEf?#0N~VX)k6rh+;02ZXU;puv*?o@2DG{^>wUaORPNcDIqEDX%tln+zF&%amPo|`BVCk%C}Wl zUAM>1tlHM#n-t+)q0UOTb>);NC-kUn^P>nti3hdoexQ-5BH?)5xqB|s)I9H4T{1aw zpu%GVC5e*3IL9QhHiput`04Fc;k5472K@6b%|c{OpD0>GDs$g7Lx?yHq)$ literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldavista.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldavista.gif new file mode 100644 index 0000000000000000000000000000000000000000..2d5ae0690010b9bf2c214e4072b8474af64a8061 GIT binary patch literal 2333 zcmeH^i&qn88pa2VAp#-@gp0x^5U!%25flx(5xE$I2%@nRjDR#;6avB_SSSg%;UbbC zI$VS_DiZ|VY^-EKjF#$fQHKhST`;Z6pdy2cX-`qKyPFMvLH~jMo%fvY`_B8F^Stl# zL~da{J+WK_q9b%TjuXr1bUHbT%TYoIX+af+>If7kv^pGw zHF8)5A-G7c6+#*&PtFr+AQc8_Fbvmmc|4|2#S&>Oxgfw40Zh=6Mz!QZRGwS_AplbV zFvT=JjN?Ylj~b1}sKyh)2yTF37zCvnEutp~M5_gj52;bjAcnNC);N-0ES4fDh9Za< z1XU`rMg_vK7=}d{hGIID!1%D7DVO@fQYL|l5fxtp^KeukhkS(s07r$e)K|#2M72Vl zR)`~F0_77ZPp9J>3?P9D5fvAPxv*R)mqT*7T&vZpR4|Xn#R*s{6+;ln=kujfh{a;5 zG+L2Z3Q0j8k0%fagd!m%SBXFfl*%;-rqN^ zK{1>a#?xp}xm=?s48|k{LII1#H1;)GB8)3Go_a#N9P$78GY2RJzyzSM)rub~C@Uzj zqp^y+)z)5owUl<`+#*8UjFdXp3UXxy#hDT(m5!1Zu&ycPd#zhb7H&qE62c?yK9#Kx5^qD zMpWnF#EVydwq}>P9-P0%o>K3-!VSzb4X^9=KX`R+M-yOi*FUkpsQZx`cL+EDl_Y$Z zX1PK%q72z^6nuU?JoB;a4HjX6g$t*>%^&v?4#AQIzk&R&20%oAKRt1&@BQ;z-{{G= zcP`~l4_3YB|5y>6|Ketqg~5bWD5HgfX2;NZPXY0&IT`esZ8=_w5}{=4EQNYr?B@t^z0I8(D-e(Rr5Vn^}}s z-bg6h3ZuF@TxXoZF4REx8RdGoXTIm^KYM(k$rOXGyX~lAZvOB6vtK{$m|QF*JAdz+ zCYxqy!+H{eiqbubv*T{)9qrJ-BiO%gm+JB&ph^ zG;mR!679K4V$vK=`q@P^2u8Yo{g!^hHBm7b`Iik9Nn1wAj?)gK1xxtk{q5JU=Kr{1 zS%M! zhuzAj|5A=uIX+Tm9W(qoPOn*SDrr63ne5zAy4mn1-@>QMvd~;)Zx!cOS9H3365P3U z(XF1bei4xcTE)4aAT@;EFHFqoGx5o7*fXXMDUi7Pg_v^U;}Sap(&~05>_1cIQPP^? z5mNAkh$cTUomms^RvX(CyPx9`JkcS#ug-j?WM}k1zhx`K3(o70ZMo?=yXM^QxeL)A zZx20|eOh_r2xn90)Ntf8Qrrl{3cQxuY;6^Xir}{nPt~7R4jjptugR(uC}CD*2IRPR z>_A0rbisRogr6eqQ(u!U4T;UXkC@Y%13td$Ooaf62QB_@S2kLjQi*!=bXxC=n3v@~ zQyjy7VBoBiwHM8fe%!gGuc~90?Rm*Bg9ei64O!S&A(=hXs0`A$e;Nun(zM4al2Y-Y zWt>j4rOZVr!~ck>%)u)tZnoa@SK74Ot#Y_yGdmp=(%Zf}>I5=mGF|I8_~NUr z8NFR0X(i=L=V%k-n}f~MypqGpo{mqMMm!UMnRi!*eW~^p@Qej1mj%M+$H|E)#^^vUh+}PJtO^Kmx`~6TFRlWIK*lGWWv(A8Qu32ZI zDD;+e++nQM)Hz8~j<$SZ<6^o_L0Rox@FsfCoS-k@b9i836Msv-Vz_2}%s({$iE9>l z$8K|^)+eBzehFgSZC@xhYf;i4UN-bm9na)sY&osh_igsC8{>4vy99)Xes7mFyJg=E z7mKJ=N8~WbNwOV{pYMwPiEdS7^@MZ2@(?S#uClDPe=K`AG(>DVxV7cxSlfTW2Wz&f zPkMX1&h}4+K|W>!7S$?)ahkJ?euI7klK$$4^U<=!Xp>Q+mRC3%QKfoj8{I;ma~p5((J(KWESDa{vGU literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldnet.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldnet.gif new file mode 100644 index 0000000000000000000000000000000000000000..a0d8e2573ab1a2dc7773cb0af15a1a5c2a55bd40 GIT binary patch literal 2374 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 literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/samsung.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/samsung.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0835e93f53465bde31b0e862116eab11e2ddc9c GIT binary patch literal 1415 zcmc&z|4-Cq9Dg54;Vl~94x@p9W07E+?%@^^l&;`B%L2xo-2ui?doWTN&`iz7sX3F@ zb{v8|ERFBMf$kucW&S`SCHP1{5I@it+sF;FM8Y)t;pz3d_a6eA!hl8S^Pu81i@0c=163(J@$&7+@?l1s^?Bu$G-2r0M}ObXH}(BwjLE;*B& zv?$CnAsLs9Nk-6!RY^h;m&7E26{-OS(NGCl=z$p6fCd(pNgL8N9v6ZMLE0Z^QE@If z6P&bNs6dl(!I)qK_Yj3yL0k|M1bfH>GO>*~;2$F35UK$N(NKv|=m0UW0SzqD$>}y~ zJjOZcAmIfGZ(9cmmb`_10-({V!06B11^*7Ju{CM?ylq34N`#L&w4reF=5` z*5QwWwr6&i9zEeJOL(C+cIBjCp7!3}!K+KnM$@ayo{WEbo!0vF>V+To_dCrtyR-Cz zwJhnowk>r(6rIn1YO{%+m^|2c&NqF^d@9KOV8!@UPsvb5PxL!owWb4I$D>jk%csk1 z>(Ba^`Z^0gedcyk+Qos}I|kgJFAO`*bYDB<-g9%L&6wPr$!zn6srxa_$;I8?$+q&p zUM|~zDdYP$c2=BDw%bEH?J2H?H!VB3aBvoAAzx@@c@I%@6D8_r!erkuD@xOaNw-lOl2)Ojq`7v~dg zt`tw{njN=d+7Fu!+_{jS{Cr&Q(W>KhrEXKDd2ZHvDZ69z;9bMwuPNjYoBA-ydwD!R z%J<1@uRQeRBZHBHE3HPdQQ0Qbx4Y*G%{7^ZC>owv)#SPE>NXZk=7n5!ycuI3uiy7u zPF!PSqGc|!*Y(yfm49ZNU6t*zixE_lW(jJjw4Q9+og24&r6f5tz0K;IbLCf!ZMiuS zzk2iD$@s^z=Hqzlp=ig>_iTN|+0(JRg1y^n@*1|kK6A$Qd-1yy#)5WJcUWrS6=!gS zIVG-k!av;KG2>k0^?a7=UO&68@VUH>V}}RJZBKX1ETnn&`3;Lc`-(q0d%j3&X}6eu lYJEH0$T2sYp4JAd!9eO=RBYDeV+3T2^FmM7YZO> zCq01%G{cnE~!2uWfh5kb>9h9NSU81Qr}2t|1a0x*n65GX}rVlhck zD1ieEM{o>bG6sf0pNfT29G7?((N zIXI320^?yQph%RaFsV!|kB=aDqZLm`ov zRH7#JGW7@O49)tsp+U=+DEP~_ehcf6Hm#aktI0 zRaytH7G-zz@i_Jhd{pSPetTq*ytICKIy2}G}}<47SFx=e_Z?G7vChGq7zPd z+Wlz+6dldGLa zxGv8NlbnOyj(&LS@xnH7Iyd|F-KUfNm7=N5pFf6_&xC9XEIIl4<8Qlcg2V7iII~e` zT+Nv>{fV&RF2AoWu%UL>SZ@taxR<>#a&kjagHV6}QH!`2&NfkQE`_BL;rA!Yyn3Iw z+U{(75}E73cMU$#Fwvc}s{PH$vV7tj`w2xz^b_rZH5ru9W82vT#fYafHpck5i>fC} z_chL_ZM?4+Z{neO&>g?f`I*O_H`)xQGPm;fxSh-p^i36Tug5*eZV1%|ZKHbQ>zU|d zi3z8-9Ur++8fv-|IhgeChp=*UJaN`G)n|3QRhrMdo6P!P>!vV|`PtLw#%+QwR5xAS zGQ(U^hQ^ld%TVlylCz7gI6Wq_IsA9~P=39Z_jg?YJc?}%W2+mPb7_^+IlktagUy;~ zV7QZtyVAnL|cXI>zsU7f`mF+_1v6$_4@t5G=TP>W6z@L4b)7#B5p}3~B z-j$lMyne5Kf}s{aEl6_>c^RHRv~KJByMxCvpZC}uC~!dwHr-qH>enESr@%P2JnC|3 z)XE*Nha+moHYkJ{Z!;gmj8O2%{hUxX!ac8eH=0oOozci1iF=oQBD8wdSihr5iPDrG z={^2tz|#+MYG@U#h~*9m9GrTwQC<(4;H@rD6Hq#GrES_qpfX-G9-ym0T#_uMb z%A!nO)k}Q3mb2~25$kFqW6eDtWd%o|9QzpaHxDzBpB*#!-jZkCkA+44cSDXDFHPT- z9JCsS198tDvj?9XnA*dFKU(>7ow&)Z8p8LgYk$%UZx{{ifmWDfuU literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony.gif new file mode 100644 index 0000000000000000000000000000000000000000..1710d55e2d7135b49ed11b2c6c626f0a9edd5b8a GIT binary patch literal 709 zcmZ?wbh9u|bYn1KIKsg2|NnnQMMW}%CQ$C9@`-z%}zaLTo%47h;~ND5>Z1MB|;#lDox zc^RwL<-FckpmV+?_kP8?_cibTA6QV}p(E9QVoA}-9IMEN<=vlVI4JaRx}I8OurADF z>7x}nJD0PkC}sK|N@-__owP=E+MXx1s^)5e7LBaUMhs%2{ImFI&&&Q`jQHH`PdkkSy*Sz)|$r7&cxBJG<$6ee`ogmMYR)ox%n9wnOT{)v}{*q z6Q31$B#@1nU5V}5W!7t_*%k{#vx(%32wfA~&n>`u;R+l3rQ=tbnNBEid|s}+=@%=@ z^j|C-ZVCzp$9x(&cqBqkh$%WTvT--4288o4>afhvV>D>+oVF~AohfF+@|OqJ^fL4R zH*wB9pwv(&q7ce3fkAd>r=VA$#e#%J|31;%b8|8s8WQ1iUDe)p!p#}+#jS&fA6|;N|);w}; zbY&ID@=9WG^Va(s`$&DN2E)`V3=SCqr($={6Uox5FnFM&kn~FC`sOlDy{&@MPgio4 zD1>f(&DykC)uplG2y1%dSCi9nx!YW~Oo;3*YGAN^Gv!5+zF?7q!oz2b%su{Zwz^9Q z&zO?X;KgjWF#JI?w~q_EA{);Og%<7}vxi2a3(6Dy?Hmi_Wxw!VS17!v(d=d-@?;}x kko2+!ksiZq8IOA{o~?M?XY=jF<9-J=%_kEqTNoIu0brj4F8}}l literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures.gif new file mode 100644 index 0000000000000000000000000000000000000000..6b7d9638bbcdb50b5303dda1845bc398f694dea6 GIT binary patch literal 2321 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.title}?`; + var removeurl = request_headers.request_url; + removeurl += "&confirm_remove=true"; + } + + + var confirmAlert = new clientShowAlert({ + 'message': message, + 'buttonlabel1': "Don't Remove", + 'buttonaction1': "client:donothing", + 'buttonlabel2': "Remove", + 'buttonaction2': removeurl, + 'noback': true, + }).getURL(); + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +wtv-visit: ${confirmAlert} +Location: ${confirmAlert}` + } else { + + var gourl = `wtv-favorite:/serve-discard-favorites?favorite_folder_name=${folder}`; + if (discardAll == "Discard All") + { + ssid_sessions[socket.ssid].favstore.clearFolder(folder); + } else { + ssid_sessions[socket.ssid].favstore.deleteFavorite(strName, folder); + } + + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +wtv-visit: ${gourl} +Location: ${gourl}` + } +} +} else { + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/serve-browser?favorite_folder_name=${folder}` +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-folders.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-folders.js new file mode 100644 index 00000000..64198e59 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-folders.js @@ -0,0 +1,76 @@ +var minisrv_service_file = true; +var errpage; + +var query = request_headers.query +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); +var totalfavorites = folder_array.length; + +var strName, strValue ; + +for(strName in query) +{ + break; +} + +strName = strName.replaceAll("+", " "); + +if (request_headers.query.ForwardToFolders) +{ + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/favorite` +} else if (strName != "getCaseInsensitiveKey") { +var folder = ssid_sessions[socket.ssid].favstore.getFolders(); +var folderdata = ssid_sessions[socket.ssid].favstore.listFavorites(strName); +var numoffavorites = Object.keys(folderdata).length; + +if (totalfavorites == 1) { + errpage = wtvshared.doErrorPage(400, "You cannot remove your last folder."); +} + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + if (!request_headers.query.confirm_remove) { + var message = ''; + if (numoffavorites == 0) { + message = `Are you sure you want to remove ${strName}?`; + } else { + message = `Removing ${strName} will also remove the ${numoffavorites} favorites it contains.`; + } + var removeurl = request_headers.request_url; + removeurl += "&confirm_remove=true"; + + var confirmAlert = new clientShowAlert({ + 'message': message, + 'buttonlabel1': "Don't Remove", + 'buttonaction1': "client:donothing", + 'buttonlabel2': "Remove", + 'buttonaction2': removeurl, + 'noback': true, + }).getURL(); + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +Location: ${confirmAlert}` + } else { + + var gourl = "wtv-favorite:/serve-discard-folders"; + ssid_sessions[socket.ssid].favstore.deleteFolder(strName); + + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +Location: ${gourl}` + } +} +} else { + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/serve-discard-folders` +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-move-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-move-favorites.js new file mode 100644 index 00000000..9617bb8b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-move-favorites.js @@ -0,0 +1,43 @@ +var minisrv_service_file = true; + +var favoritenum = 0; +var folder = request_headers.query.favorite_folder_name || null; +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(folder); +var error_occured = false; +if (!folder) error_occured = true; +else { + favoritenum = Object.keys(favarray).length; + + if (typeof request_headers.query.favoriteid === 'string') { + // one favorite + var favid = request_headers.query.favoriteid; + var favfolder = request_headers.query.favoritefolder; + if (folder != favfolder) ssid_sessions[socket.ssid].favstore.moveFavorite(folder, favfolder, favid); + } else { + if (request_headers.query.favoriteid.length == request_headers.query.favoritefolder.length) { + // both queries should have the same number of entries + Object.keys(request_headers.query.favoriteid).forEach(function (k) { + var favid = request_headers.query.favoriteid[k]; + var favfolder = request_headers.query.favoritefolder[k]; + if (folder != favfolder) ssid_sessions[socket.ssid].favstore.moveFavorite(folder, favfolder, favid); + }) + } else { + error_occured = true; + } + } + + if (!error_occured) { + var gourl = `wtv-favorite:/serve-browser?favorite_folder_name=${folder}`; + + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +wtv-visit: ${gourl} +Location: ${gourl}` + } else { + var err = doErrorPage(500); + headers = err[0]; + data = err[1]; + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-rename-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-rename-favorites.js new file mode 100644 index 00000000..4337bd56 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-rename-favorites.js @@ -0,0 +1,94 @@ +var minisrv_service_file = true; + +var favoritenum = 0; +var folder = request_headers.query.favorite_folder_name; +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(folder); + +favoritenum = Object.keys(favarray).length; + +for (let i = 0; i < favoritenum; i++) { + switch(i) { + case 0: + var favid = request_headers.query.favorite0id; + var favname = request_headers.query.favorite0name; + break; + case 1: + var favid = request_headers.query.favorite1id; + var favname = request_headers.query.favorite1name; + break; + case 2: + var favid = request_headers.query.favorite2id; + var favname = request_headers.query.favorite2name; + break; + case 3: + var favid = request_headers.query.favorite3id; + var favname = request_headers.query.favorite3name; + break; + case 4: + var favid = request_headers.query.favorite4id; + var favname = request_headers.query.favorite4name; + break; + case 5: + var favid = request_headers.query.favorite5id; + var favname = request_headers.query.favorite5name; + break; + case 6: + var favid = request_headers.query.favorite6id; + var favname = request_headers.query.favorite6name; + break; + case 7: + var favid = request_headers.query.favorite7id; + var favname = request_headers.query.favorite7name; + break; + case 8: + var favid = request_headers.query.favorite8id; + var favname = request_headers.query.favorite8name; + break; + case 9: + var favid = request_headers.query.favorite9id; + var favname = request_headers.query.favorite9name; + break; + case 10: + var favid = request_headers.query.favorite10id; + var favname = request_headers.query.favorite10name; + break; + case 11: + var favid = request_headers.query.favorite11id; + var favname = request_headers.query.favorite11name; + break; + case 12: + var favid = request_headers.query.favorite12id; + var favname = request_headers.query.favorite12name; + break; + case 13: + var favid = request_headers.query.favorite13id; + var favname = request_headers.query.favorite13name; + break; + case 14: + var favid = request_headers.query.favorite14id; + var favname = request_headers.query.favorite14name; + break; + case 15: + var favid = request_headers.query.favorite15id; + var favname = request_headers.query.favorite15name; + break; + case 16: + var favid = request_headers.query.favorite16id; + var favname = request_headers.query.favorite16name; + break; + case 17: + var favid = request_headers.query.favorite17id; + var favname = request_headers.query.favorite17name; + break; + } + ssid_sessions[socket.ssid].favstore.changeFavoriteName(favid, folder, favname); +} + +var gourl = `wtv-favorite:/serve-browser?favorite_folder_name=${folder}`; + +headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +wtv-visit: ${gourl} +Location: ${gourl}` diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-samples-page.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-samples-page.js new file mode 100644 index 00000000..c743330f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-samples-page.js @@ -0,0 +1,42 @@ +var minisrv_service_file = true; + +var totalfavorites = 0; + +var createFun = request_headers.query.Fun; +var createMoney = request_headers.query.Money; +var createMovies = request_headers.query.Movies; +var createNews = request_headers.query.News; +var createRecommended = request_headers.query.Recommended; +var createReference = request_headers.query.Reference; +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); +totalfavorites = folder_array.length; + +if (totalfavorites < 14) +{ + if (createFun == "true") + ssid_sessions[socket.ssid].favstore.createTemplateFolder("Fun"); + + if (createMoney == "true") + ssid_sessions[socket.ssid].favstore.createTemplateFolder("Money"); + + if (createMovies == "true") + ssid_sessions[socket.ssid].favstore.createTemplateFolder("Movies"); + + if (createNews == "true") + ssid_sessions[socket.ssid].favstore.createTemplateFolder("News"); + + if (createRecommended == "true") + ssid_sessions[socket.ssid].favstore.createTemplateFolder("Recommended"); + console.log("FUGHFVJSGHJFDGIJUFDSHGFJDSKHJKLGFHJKHDJKHJKLGF " + createRecommended) + + if (createReference == "true") + ssid_sessions[socket.ssid].favstore.createTemplateFolder("Reference"); + + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/favorite +wtv-expire-all: wtv-favorite:` +} else { + headers = `400 You can only have 14 folders at one time. Delete some folders and try again.` +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-shortcuts-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-shortcuts-favorites.js new file mode 100644 index 00000000..4a34088c --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-shortcuts-favorites.js @@ -0,0 +1,9 @@ +var minisrv_service_file = true; + +var folder = request_headers.query.favorite_folder_name; +var key = request_headers.query.Choose; +var id = request_headers.query.favoriteid; + +ssid_sessions[socket.ssid].favstore.createShortcutKey(); +ssid_sessions[socket.ssid].favstore.updateShortcutKey("none", key, folder, id); + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite-index.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite-index.js new file mode 100644 index 00000000..8947febc --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite-index.js @@ -0,0 +1,18 @@ +var minisrv_service_file = true; + +var favstore_exists = ssid_sessions[socket.ssid].favstore.favstoreExists(); + +if (favstore_exists != true) +{ + ssid_sessions[socket.ssid].favstore.createFavstore(); + headers = `300 OK +Location: wtv-favorite:/favorite` +} else { + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); +var url = request_headers.request; +var key = url.split('?')[1] + +headers = `400 You have not assigned a favorite to ${key}` + +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite.js new file mode 100644 index 00000000..bdfcb0bb --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite.js @@ -0,0 +1,619 @@ +var minisrv_service_file = true; + +var favstore_exists = ssid_sessions[socket.ssid].favstore.favstoreExists(); + +if (favstore_exists != true) +{ + ssid_sessions[socket.ssid].favstore.createFavstore(); + headers = `300 OK +Location: wtv-favorite:/favorite` +} else { + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); +var totalfavorites = folder_array.length; +var stopdrawing = false; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve-browser +wtv-expire-all: wtv-favorite:/favorite +` + + +data = ` + + +Favorite folders + + + + + + + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ + +
+ +
+ Add folder   +
+
+
+
+ +
+
+ +
+
+ +
+ + +
+ +
+ Remove      +
+
+
+
+ +
+
+ +
+
+ +
+ + +
+ +
+ Help            +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ +
+ +Favorite folders +for ${ssid_sessions[socket.ssid].getSessionData("subscriber_username") || "You"} + +
+
+
+ + +
+ +
+ +
+ + + + + + +
` + var kval = 0; + // process evens + Object.keys(folder_array).forEach(function (k) { + if (k == 0) return; // skip 0 since it was processed above + if (parseInt(k) % 2 == 0) { + // even + // Left Middle + data += `
+ +
+ + + + + + +
`; + kval = k; + } + }); + + // process end if total is even + if (folder_array.length > 1) { + if (folder_array.length % 2 == 0) { + data += `
+ +
+ + +
`; + } + } + + // process middle (folder 2 (id 1)) + if (folder_array.length == 1) { + // no folder 2 + data += `
+
+ +
+
+
+ +
+
+ +
+ + + +
` + } else { + // process folder 2 (id 1) + data += `
+
+ +
+
+
+ +
+
+ +
+ + + + + + +
`; + } + + // process odds + Object.keys(folder_array).forEach(function (k) { + if (k == 1) return; // skip 1 since it was processed above + if (parseInt(k) % 2 != 0) { + // odd + // Right Middle + data += `
+ +
+ + + + + + +
`; + } + }); + + // process end if total is odd + if (folder_array.length > 1) { + if (folder_array.length % 2 != 0) { + data += `
+ +
+ + +
`; + } + } + + /* +if (totalfavorites > 2) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 2) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 4) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 4) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 6) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 6) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 8) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 8) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 10) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 10) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 12) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 12) { + data += ` +
+ +
+ + +
` +} + +if (totalfavorites == 14) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 1) +{ + data += `
+
+ +
+
+
+ +
+
+ +
+ + + + + + +
` +} else if (totalfavorites == 1) { + data += `
+
+ +
+
+
+ +
+
+ +
+ + + +
` + +stopdrawing = true; + +} +if (totalfavorites > 3) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 3) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 5) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 5) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 7) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 7) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 9) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 9) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 11) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 11) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +if (totalfavorites > 13) +{ + data += ` +
+ +
+ + + + + + +
` +} else if (totalfavorites == 13) { + data += ` +
+ +
+ + +
` + +stopdrawing = true; + +} +*/ + data += ` +
+
+ +
+
+ + + +
+`; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/get-thumbnail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/get-thumbnail.js new file mode 100644 index 00000000..b16eb4df --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/get-thumbnail.js @@ -0,0 +1,13 @@ +var minisrv_service_file = true; + +var errpage = null; + +var id = request_headers.query.id; +var folder = request_headers.query.folder; +var favorite = ssid_sessions[socket.ssid].favstore.getFavorite(folder, id); +if (!favorite) errpage = wtvshared.doErrorPage(400, "Invalid favorite ID"); + + + headers = `200 OK +Content-Type: ${favorite.imagetype}`; + data = new Buffer.from(favorite.image, 'base64'); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/checkmark.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/checkmark.gif new file mode 100644 index 0000000000000000000000000000000000000000..19ae570358f5a50f00e8473da04aea9028c2d0cd GIT binary patch literal 353 zcmZ?wbhEHb6k!lyxXQrr|NsB*=gxg^seTUx_pZISG<<&V-t%+ko(Fl|10qAib3m|l z?Xjgx_s*HKb?er(YuC;J0!76sii$lwJ=xjW$;ru4Q9(f9<>h5*XlSSj0g4h55&}TL z!6CrGAi%)D!NI{m1E2#k6XX{Lwl;_U0uP-kJ>|udBmz3@yq_`zPMEOZ;=?TmrZ#MH zYHqmgo2JNEG?itUz?HB^%E4=LcE3sd)%-Q#ND5b)6L$<(r8GNFTf3`BGMA9206SNk zq8ERPv=|#_O0BC@cMK!vG}Z*cMpmwg3*BThvt(u@@P))~OOWP`5#A6f!qJrA#@Bqz KIsTL*gEatS)893CJhPfu1yM@|b34+RGaPf%D+P*+V(RsaA1000000000000000 z000000000000000EC2ui05kw5000I4pd%7VX`X1Ru4hw5#vwY2xOyqr*2 zG2IfC06`%UMG}w*VH$}vuGp-0%hgt=)52lgh*Be!u6n(FfeD4j|U;{1z78VFa6_pi#2^Ii+oDd~_6n+&H6iERFs0IQGa|v*acY2Vd zeU}sqp#Y=^lLHhM6bQbhq@|UosD=y@4;8PBRtW(J(*p_CxC4B}p*X<{yukyL2^8Z9 z52>rIuV7c>wA-8m^xFWs+z7Phz7^Ez$yhy5BA@`H04~DalDD8RE z)(s?3&>(>;3LD}YsZAuOZRY;sHMICIl>vbP3VF1UP#?-$q#m9WS#qZ@eH8#2N<^^Z z#|DzP;mdjQUQTnICW5mNR2_pk1U*JeO3GL*2&4g2WjN;Q0(!&w0}6G)CIFjE_IwMQUV_3{ zHM5Qsju)>{IB`&qJ3OK`2oD6PNml>CQ1Jb8Y01G-0-64rJpinXFk%a(q z>P-?1f%37(A$}j`g&uqK>_Q@n@X==hBoyBAVk#bPlu?M&EXLF>$aRI>C>R!aAXF4Y zpa6{Jf%s8`2rOV^L%%?94lctTI7$x|c;ZJX5j?P4kiH>Cf*%1;&;vCEMly^KrUU@M zoIO-h3Iq%q01!;(9dbt%5d=_$4~r`5Ln%K%us{!pa-;waK*l)UOAav5sR*9V@TsVz zmP#rE3at5IDr!EUz^kyfnrf=9&N^$YxH90WuC%Ht=mB%U!K#|QwrcFL$P(-7vas4J z=u5ylP>7($XBM06waDJe?6#LqFo6RvxvJ~9wY@{VEe zz4+#<@4om-;Oz_t_$#o$6A)~0!4f1~Fv8w8?C`_h`a6LPqTVY(zyT+WvBn8^yz#{# Nf7~(07tas^06V@qlN$g4 literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/list-folders.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/list-folders.js new file mode 100644 index 00000000..13ed2b95 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/list-folders.js @@ -0,0 +1,16 @@ +var minisrv_service_file = true; + +var favstore_exists = ssid_sessions[socket.ssid].favstore.favstoreExists(); + +if (favstore_exists != true) +{ + ssid_sessions[socket.ssid].favstore.createFavstore(); +} + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); +var data = ""; + +for (let i = 0; i < folder_array.length; i++) data += folder_array[i] + "\0"; + +headers = `200 OK +Content-type: text/plain` \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-add-folder-page.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-add-folder-page.js new file mode 100644 index 00000000..8314a03d --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-add-folder-page.js @@ -0,0 +1,123 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + + +Add a folder + + + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + +
+
+ +
+ +Add a folder + + + + +
+
+ + + + + + +
+ +
+
+Type the name of the new folder you want
+to add, and then choose Add.
+
+ +
+
+ +Folder name + + + + + + + + +
+
+
+
+Or choose Samples to select one or
+more sample folders.
+
+
+
+ + + + + +
+
+
+
+ + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-arrange-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-arrange-favorites.js new file mode 100644 index 00000000..d474618f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-arrange-favorites.js @@ -0,0 +1,233 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(foldername); + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + +Listing favorites + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Folders +
+
+
+
+ +
+
+ +
+
+ +
+ +
+ +
+ Add folder +
+
+
+
+ +
+
+ +
+
+ +
+ + +
+ +
+ Help +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ + + +
+Listing favorites in this folder: + +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+
+ +
+
+ + +
+
+
+ +
+
+ + + + + + + + + + +
+ + + +
+
+
+ +

Choose With pictures +to display the favorite's +pictures. +

If With pictures is +unchecked, the +favorites will be listed +by name only. +

+ +
+ + + +
+ + + + +With pictures +
+
+
+
+ +
+ + +
+ +
+ + +
+ +
+ + + + + +
+ + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-browser.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-browser.js new file mode 100644 index 00000000..c5e26252 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-browser.js @@ -0,0 +1,237 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(foldername); + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve-browser +wtv-expire-all: wtv-favorite:/favorite +` + + +data = ` + +Favorites + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Folders +
+
+
+
+ +
+
+ +
+
+ +
+ +
+ +
+ Organize +
+
+
+
+ +
+
+ +
+
+ +
+ + +
+ +
+ Help +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ + + +
+Favorites for ${ssid_sessions[socket.ssid].getSessionData("subscriber_username") || "You"} + +
+
+
+ +
+` +if (folderid !== 0) +{ + data += ` +
+ +
+ +
+
+` +} else { + data += ` +
+ +
+ +
+
+` +} +data += ` +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+
+` +if (folderid !== numoffolders - 1) +{ + data += `
+
+ + +
+
+ +
  +
+
+
+
+
+
+ +
+
` +} else { + data += `
+
+ + +
+
+
+ +
+
` +} data += ` + + +
+
+
+`; + +// favorite loop +Object.keys(favarray).forEach(function (k) { + var url = decodeURIComponent(favarray[k].url); + data += ` + +
`; + if (favarray[k].imagetype == "url") + data += `
`; + else + data += `
`; + data += ` +
+${favarray[k].title} +
+
+
+
`; + if ((parseInt(k) + 1) % 3 == 0) { + // every 3 objects + data += `
+ +
+`; + } +}); + +data += ``; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-choose-shortcut-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-choose-shortcut-favorites.js new file mode 100644 index 00000000..75b8d315 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-choose-shortcut-favorites.js @@ -0,0 +1,404 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(foldername); + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var favid = request_headers.query.favoriteid; + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + +var favoritedata = ssid_sessions[socket.ssid].favstore.getFavorite(foldername, favid); + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + +Choose shortcut label + + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Favorites +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ + + +
+Choose shortcut label +
+
+
+ +
+
+ +Choose a shortcut label for ${favoritedata.title}, then choose Done below. +
+
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+
+
+ + +Not assigned
+
+
+
+ + +  F1 + +
+
+
+ + + +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+ + +
+
+ +
+
+
+ + +Not assigned
+
+
+
+ + +  F2 + +
+
+ + + + +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+ + +
+
+ +
+
+
+ + +Not assigned
+
+
+
+ + +  F3 + +
+
+ + + + +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+ + +
+
+ +
+
+
+ + +Not assigned
+
+
+
+ + +  F4 + +
+
+ + + + +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+ + +
+
+ +
+
+
+ + +Not assigned
+
+
+
+ + +  F5 + +
+
+ + + + +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+ + +
+
+ +
+
+
+ + +Not assigned
+
+
+
+ + +  F6 + +
+
+ + + + +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+ + +
+
+ +
+
+
+ + +Not assigned
+
+
+
+ + +  F7 + +
+
+ + + + + +
+
+
+
+
+
+
+ +
+
+ +
+
+
+ + + +
+
+ + + + + +
+ +
` \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-favorites.js new file mode 100644 index 00000000..ca695dc8 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-favorites.js @@ -0,0 +1,228 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(foldername); + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + +Discard favorites + + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Organize +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ + + +
+Discard favorites in this folder: + +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+
+ +
+
+ + +
+
+
+ + + +
+
` +if (favoritenum == 0) +{ + data += "   There are no favorites to discard in this folder."; +} else { +for (let i = 0; i < favoritenum; i++) { +data += ` +
+` +if (favarray[i].imagetype == "url") + data += `
` +else + data += `
` +data += ` +
+ +${favarray[i].title}
+ +
+ + + + + +
+ +
+
+
+ +
+
+ +
+
+
+

` +} +} +data += ` + + +
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+ + + +` +if (favoritenum != 0) +{ + data += ` +` +} +data += ` + + + + + + + +
+
+
+ + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-folders.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-folders.js new file mode 100644 index 00000000..d1dd405f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-folders.js @@ -0,0 +1,202 @@ +var minisrv_service_file = true; + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); +var totalfavorites = folder_array.length; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + + +Remove folders + + + + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Favorites +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ +
+ +Remove folders + +
+
+
+
+ + +
+ +
+ +
+ +
+ + + + + +
+
+ +
+
+
` +for (let i = 1; i < totalfavorites; i++) { +data += `
+ +
+ +
+ + + + + +
+
+ +
+
+
` +} +if (totalfavorites == 1) + data += `
+
+
+
+
+
+` +else + data += `
+ +
+
+
+ +
+
+ +
+
+ +
+ + + + +
+
` +for (let i = 1; i < totalfavorites; i++) { +data += ` +
+ +
+
+ +
+ + + + +
+
` +} +data += ` +
+
+ + +
` +if (totalfavorites == 1) + data += "   You cannot delete your last folder." +data += ` +
+
+ + +
+
+ + + + +
+
+
+ + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-move-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-move-favorites.js new file mode 100644 index 00000000..f9f26738 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-move-favorites.js @@ -0,0 +1,239 @@ +var minisrv_service_file = true; + +var favoritenum = 0; +var foldernum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(foldername); + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; +foldernum = folder_array.length; + +var folderlist = `" + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + +Move favorites + + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Organize +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ + + +
+Move favorites in this folder: + +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+
+ +
+
+ + +
+
+
+ + + +
+
` +if (favoritenum == 0) +{ + data += "   There are no favorites to move in this folder."; +} else { +for (let i = 0; i < favoritenum; i++) { +data += ` +
+` +if (favarray[i].imagetype == "url") + data += `
` +else + data += `
` +data += ` +
+ +${favarray[i].title}
+ +
+ + +` +data += ` + + +
+ +
+
+
+ +
+
+ +
+
+
+

` +} +} +data += ` + +
+
+
+
+ +
+
+ +
+
+
+ + +
+
+ + + + + + + + + + + +
+
+ + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-organize-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-organize-favorites.js new file mode 100644 index 00000000..7f1e2d9d --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-organize-favorites.js @@ -0,0 +1,220 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(foldername); + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + +Organize favorites + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Folders +
+
+
+
+ +
+
+ +
+
+ +
+ +
+ +
+ Add folder +
+
+
+
+ +
+
+ +
+
+ +
+ + +
+ +
+ Help +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ + + +
+Organize favorites in this folder: + +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+
+ +
+
+ + +
+
+
+ +
+
+ + +
+
+ + + + + + +
+ +Discard
+Remove unwanted favorites from this folder
+
+ +Move to folder
+Move favorites from this folder to another
+ +
+ + +Rename
+Rename favorites in this folder
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+
+ + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-rename-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-rename-favorites.js new file mode 100644 index 00000000..79c5c1f5 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-rename-favorites.js @@ -0,0 +1,218 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(foldername); + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + +Rename favorites + + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Organize +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ + + +
+Rename favorites in this folder: + +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+
+ +
+
+ + +
+
+
+ + + +
+
` +if (favoritenum == 0) +{ + data += "   There are no favorites to rename in this folder."; +} else { +for (let i = 0; i < favoritenum; i++) { +data += ` +
+` +if (favarray[i].imagetype == "url") + data += `
` +else + data += `
` +data += ` +
+ + + + + + + + +
+ +
+
+
+ +
+
+ +
+
+
+

` +} +} +data += ` + + +
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+ + + + + + + + + + + +
+
+
+ + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-samples-page.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-samples-page.js new file mode 100644 index 00000000..45f0f955 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-samples-page.js @@ -0,0 +1,271 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + + +Add sample folders + + + + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Favorites +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+ +Add sample folders + +
+
+
+ +
+
+ + +Mark the sample folders you want
+to add, and then choose Add.
+
+You can remove an existing sample folder
+by going to the folder and choosing Organize.
+
+ +
+
+ +
+ +
+ + +
+ + + + +
+
` +if (ssid_sessions[socket.ssid].favstore.folderExists("Fun") == true) +{ + data += ` + + + +
+ + + + Fun + +
` +} else { + data += ` +
+ +  Fun +` +} +if (ssid_sessions[socket.ssid].favstore.folderExists("Money") == true) +{ + data += ` + + + +
+ + + + Money + +
` +} else { + data += ` +
+ +  Money +` +} data += ` + +
` +if (ssid_sessions[socket.ssid].favstore.folderExists("Movies") == true) +{ + data += ` + + + +
+ + + + Movies + +
` +} else { + data += ` +
+ +  Movies +` +} +if (ssid_sessions[socket.ssid].favstore.folderExists("News") == true) +{ + data += ` + + + +
+ + + + News + +
` +} else { + data += ` +
+ +  News +` +} +data += ` + +
` +if (ssid_sessions[socket.ssid].favstore.folderExists("Recommended") == true) +{ + data += ` + + + +
+ + + + Recommended + +
` +} else { + data += ` +
+ +  Recommended +` +} +if (ssid_sessions[socket.ssid].favstore.folderExists("Reference") == true) +{ + data += ` + + + +
+ + + + Reference + +
` +} else { + data += ` +
+ +  Reference +` +} +data += ` +
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ + + + + + +
+ +
+
+ + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-shortcuts-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-shortcuts-favorites.js new file mode 100644 index 00000000..267ce3ad --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-shortcuts-favorites.js @@ -0,0 +1,204 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(foldername); + +var folder_array = ssid_sessions[socket.ssid].favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + + + + +Assign shortcut to favorite + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Organize +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ + +
+Assign shortcut to favorite + +
+
+
+ +
+ +
+ +
+ + + + + +
+
+
+ +
  +
+
+
+
+
+ + +
+
+ +` +if (favoritenum == 0) +{ + data += "   There are no favorites to move in this folder."; +} else { + data += `To assign a keyboard shortcut to a favorite,
+choose the button to the right of the favorite.
+
+
+
` +for (let i = 0; i < favoritenum; i++) { + data += ` + +
+
+
+ +
+
+ +
+
+
+ +
+ + +
+` +if (favarray[i].imagetype == "url") + data += `
` +else + data += `
` +data += ` +
+ + +${favarray[i].title}
+
+
+
+
+ +
+ +
+ + +
+
+
+
+
+
+
` +} +} +data += ` +
+
+
+
+ +
+
+ +
+
+
+
+ + +
+
+ + + + + +
+
+
+
+`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/sony.html b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/sony.html new file mode 100644 index 00000000..b00f9400 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/sony.html @@ -0,0 +1,247 @@ + + +Favorites + + + + + + + + + +
+ + +
+ + + +
+
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ Folders +
+
+
+
+ +
+
+ +
+
+ +
+ +
+ +
+ Organize +
+
+
+
+ +
+
+ +
+
+ +
+ + +
+ +
+ Help +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + +
+
+ + + +
+Favorites for ${ssid_sessions[socket.ssid].getSessionData("subscriber_username") || "You"} + +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+
+ +
+
+ + +
+
+
+ +
+
+ + + +
+
+
+ + + +
+
+ +
+Columbia TriStar Television +
+
+
+
+
+ +
+
+ +
+JumpCity +
+
+
+
+
+ +
+
+ +
+SoapCity +
+
+
+
+
+ +
+ + + +
+
+ +
+Sony Electronics +
+
+
+
+
+ +
+
+ +
+Sony Pictures Movie Site +
+
+
+
+
+ +
+
+ +
+Sony Studio Store +
+
+
+
+
+ +
+ + + +
+
+ +
+WebSite for TV +
+
+
+
+
+ + + + +
\ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js index fc637583..9c9997d8 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js @@ -127,10 +127,12 @@ wtv-ssl-log-url: wtv-log:/log headers += `wtv-bypass-proxy: false user-id: ${userid} wtv-human-name: ${human_name} -wtv-mail-url: wtv-mail:/listmail ${ssid_sessions[socket.ssid].setIRCNick(nickname)} wtv-domain: ${ssid_sessions[socket.ssid].getSessionData("messenger_domain")} passport-domain: ${ssid_sessions[socket.ssid].getSessionData("messenger_domain")} +wtv-mail-url: wtv-mail:/listmail +wtv-favorite-url: wtv-favorite:/favorite +wtv-favorites-folders-url: wtv-favorite:/list-folders wtv-input-timeout: 14400 wtv-connection-timeout: 1440 wtv-fader-timeout: 1440 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js b/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js index e4e525d6..b712a669 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js @@ -47,6 +47,7 @@ minisrv v${minisrv_config.version}${(minisrv_config.config.git_commit) ? ' git-'
  • client:relog (direct)
  • Ultra Willies ~ Tricks
  • Setup (Including BG Music)
  • +
  • Favorites new!
  • Mail (beta)
  • Usenet (not ready) `; diff --git a/zefie_wtvp_minisrv/WTVClientSessionData.js b/zefie_wtvp_minisrv/WTVClientSessionData.js index b9779454..239cae5f 100644 --- a/zefie_wtvp_minisrv/WTVClientSessionData.js +++ b/zefie_wtvp_minisrv/WTVClientSessionData.js @@ -2,6 +2,7 @@ const { lib } = require('crypto-js'); const CryptoJS = require('crypto-js'); const WTVMail = require('./WTVMail.js') const WTVSec = require('./WTVSec.js'); +const WTVFavorites = require('./WTVFavorites.js'); class WTVClientSessionData { @@ -13,6 +14,7 @@ class WTVClientSessionData { data_store = null; session_store = null; mailstore = null; + favstore = null; login_security = null; capabilities = null; session_storage = ""; @@ -55,6 +57,7 @@ class WTVClientSessionData { this.lockdownWhitelist.push(minisrv_config.config.unauthorized_url); this.lockdownWhitelist.push(minisrv_config.config.service_logo); this.mailstore = new WTVMail(this.minisrv_config, this) + this.favstore = new WTVFavorites(this.minisrv_config, this) this.loginWhitelist = Object.assign([], this.lockdownWhitelist); // clone lockdown whitelist into login whitelist this.loginWhitelist.push("wtv-head-waiter:/choose-user"); this.loginWhitelist.push("wtv-head-waiter:/password"); diff --git a/zefie_wtvp_minisrv/WTVFavorites.js b/zefie_wtvp_minisrv/WTVFavorites.js new file mode 100644 index 00000000..99ed4099 --- /dev/null +++ b/zefie_wtvp_minisrv/WTVFavorites.js @@ -0,0 +1,387 @@ +class WTVFavorites { + + fs = require('fs'); + path = require('path'); + uuid = require('uuid'); + + ssid = null; + minisrv_config = []; + wtvshared = null; + wtvmime = null; + wtvclient = null; + WTVClientSessionData = null; + favFileExt = ".zfav"; + favstore_dir = null; + folderArr = []; + messageArr = []; + + constructor(minisrv_config, wtvclient) { + if (!minisrv_config) throw ("minisrv_config required"); + if (!wtvclient) throw ("WTVClientSessionData required"); + var WTVShared = require('./WTVShared.js')['WTVShared']; + var WTVMime = require('./WTVMime.js'); + this.WTVClientSessionData = require('./WTVClientSessionData.js'); + this.minisrv_config = minisrv_config; + this.wtvshared = new WTVShared(minisrv_config); + this.wtvmime = new WTVMime(minisrv_config); + this.wtvclient = wtvclient; + this.ssid = wtvclient.ssid; + this.folderArr = this.folderArr; + this.messageArr = this.messageArr; + } + + checkFavIntroSeen() { + return (this.wtvclient.getSessionData("subscriber_fav_intro_seen")) ? this.wtvclient.getSessionData("subscriber_fav_intro_seen") : false; + } + + setFavIntroSeen(seen) { + this.wtvclient.setSessionData("subscriber_fav_intro_seen", (seen) ? true : false); + } + + favstoreExists() { + if (!this.isguest) { + if (this.favstore_dir === null) { + // set favstore directory local var so we don't call the function every time + var userstore_dir = this.wtvclient.getUserStoreDirectory(); + + // FavStore + var store_dir = "FavStore" + this.path.sep; + this.favstore_dir = userstore_dir + store_dir; + } + return this.fs.existsSync(this.favstore_dir); + } + return null; + } + + folderExists(foldername) { + var folder_dir = null; + if (this.favstoreExists()) { + if (!foldername) return null; + + var folder_dir = foldername + this.path.sep; + var store_dir = this.favstore_dir + folder_dir; + } + return (store_dir !== null) ? this.fs.existsSync(store_dir) : false; + } + + getFolderDir(foldername) { + var folder_dir = null; + if (this.favstoreExists()) { + if (!foldername) return null; + + var folder_dir = foldername + this.path.sep; + var store_dir = this.favstore_dir + folder_dir; + } + return store_dir; + } + + createTemplateFolder(folder) { + // create emply folder + this.createFolder(folder) + var folder_templates = this.minisrv_config.favorites.folder_templates; + // populate it if a template exists + var self = this; + if (folder_templates[folder]) { + Object.keys(folder_templates[folder]).forEach(function (k) { + self.createFavorite(folder_templates[folder][k].title, folder_templates[folder][k].url, "Recommended", (folder_templates[folder][k].image_type == "image/wtv-bitmap") ? atob(folder_templates[folder][k].image) : folder_templates[folder][k].image, folder_templates[folder][k].image_type); + }) + } + } + + createDefaultFolders() { + var brandId = this.ssid.charAt(8); + this.createTemplateFolder("Recommended"); + if (brandId == 7) + this.createTemplateFolder("Personal (Samsung)"); + else + this.createTemplateFolder("Personal"); + + if (brandId == 0) + this.createTemplateFolder("Sony"); + } + + createFavstore() { + if (this.favstoreExists() === false) { + if (!this.fs.existsSync(this.favstore_dir)) this.fs.mkdirSync(this.favstore_dir, { recursive: true }); + this.createDefaultFolders(); + this.wtvclient.setSessionData("subscriber_fav_images", true) + return true; + } + return false; + } + + createFolder(foldername) { + var folder_exists = this.folderExists(foldername); + if (folder_exists === false) { + var folderdir = foldername + this.path.sep; + var store_dir = this.favstore_dir + folderdir; + if (!this.fs.existsSync(store_dir)) this.fs.mkdirSync(store_dir, { recursive: true }); + return true; + } + return folder_exists; + } + + getFolders() { + var path = this.favstore_dir; + var self = this; + return this.fs.readdirSync(path).filter(function (file) { + self.folderArr.push(file); + return self.folderArr; + }); + } + + createFavoriteID() { + return this.uuid.v1(); + } + + createFavorite(title, url, folder, image, imagetype) { + var folderpath = this.getFolderDir(folder); + var favoriteid = this.createFavoriteID(); + var favoritefile = favoriteid + this.favFileExt; + var favoritefileout = folderpath + favoritefile; + if (imagetype != "url") + image = btoa(image); + + title = decodeURIComponent(title).replaceAll("+", " "); + url = decodeURIComponent(url) + var favoritedata = { + "title": title, + "url": url, + "folder": folder, + "image": image, + "imagetype": imagetype, + "id": favoriteid + } + try { + if (this.fs.existsSync(favoritefileout)) { + console.log(" * ERROR: Favorite with this UUID (" + favoriteid + ") already exists (should never happen). Favorite lost."); + return false; + } + + // encode favorite into json + var result = this.fs.writeFileSync(favoritefileout, JSON.stringify(favoritedata)); + if (!result) return false; + + } catch (e) { + console.error(" # FavErr: Favorite Store failed\n", e, "\n", favoritefileout, "\n", favorite ,"\n"); + } + return false; + } + + listFavorites(folder) { + var folderpath = this.getFolderDir(folder); + var self = this; + self.messageArr = []; + var files = this.fs.readdirSync(folderpath) + .map(function (v) { + var favorite_data_raw = null; + var favoritepath = folderpath + self.path.sep + v; + if (self.fs.existsSync(favoritepath)) favorite_data_raw = self.fs.readFileSync(favoritepath); + if (favorite_data_raw) { + var favorite_data = JSON.parse(favorite_data_raw); + self.messageArr.push(favorite_data); + } + + }) + return self.messageArr; + } + + getFavorite(folder, favoriteid) { + var folder_path = this.getFolderDir(folder); + var folder_file = favoriteid + this.favFileExt; + var folder_file_in = folder_path + this.path.sep + folder_file; + var folder_data_raw = null; + + if (this.fs.existsSync(folder_file_in)) folder_data_raw = this.fs.readFileSync(folder_file_in); + else console.error(" # FavErr: could not find ", folder_file_in); + + if (folder_data_raw) { + var folder_data = JSON.parse(folder_data_raw); + folder_data.folder_path = folder_path; + folder_data.folder_file = folder_file; + if (folder_data) { + folder_data.id = favoriteid; + + return folder_data; + } + else console.error(" # FavErr: could not parse json in ", folder_file_in); + } + return false; + } + + deleteFolder(folder){ + var dir = this.getFolderDir(folder); + this.fs.rmdirSync(dir, { recursive: true }); + } + + checkFolderName(folder) { + var check1 = /^([A-Za-z0-9\-\_])$/.test(folder); + var check2 = /^[A-Za-z]/.test(folder); + return (check1 && check2); + } + + deleteFavorite(favoriteid, folder) { + var folderdir = this.getFolderDir(folder); + this.fs.unlinkSync(folderdir + favoriteid + ".zfav", { recursive: true }); + } + + clearFolder(folder) { + const { readdirSync, rmSync } = require('fs'); + var dir = this.getFolderDir(folder); + readdirSync(dir).forEach(f => rmSync(`${dir}${f}`)); + } + + updateFavorite(favoritedata, folder) { + // encode message into json + var favoriteout = new Object(); + var folderpath = this.getFolderDir(folder); + Object.assign(favoriteout, favoritedata); + delete favoriteout.folderpath; + delete favoriteout.favoritefile; + var result = this.fs.writeFileSync(folderpath + favoritedata.id + ".zfav", JSON.stringify(favoriteout)); + if (!result) return false; + } + + changeFavoriteName(favoriteid, folder, name) { + var favorite = this.getFavorite(folder, favoriteid); + if (!favorite) return false; + + favorite.title = name; + this.updateFavorite(favorite, folder); + return true; + } + + moveFavorite(oldfolder, newfolder, favoriteid) { + var favorite = this.getFavorite(oldfolder, favoriteid); + if (!favorite) return false; + + var newfolderdata = this.listFavorites(newfolder); + var newfoldernum = newfolderdata.length + + if (newfoldernum > 17) + return; + + favorite.folder = newfolder; + this.updateFavorite(favorite, oldfolder); + var favoriteout = new Object(); + var folderpath = this.getFolderDir(newfolder); + Object.assign(favoriteout, favorite); + delete favoriteout.folderpath; + delete favoriteout.favoritefile; + this.fs.writeFileSync(folderpath + favorite.id + ".zfav", JSON.stringify(favoriteout)); + this.deleteFavorite(favoriteid, oldfolder) + return true; + } + + createShortcutKey() { + var favoritefileout = this.favstore_dir + "KeyStore.zfav"; + var keydata = {}; + + keydata.F1 = { + folder: "none", + id: "none" + } + keydata.F2 = { + folder: "none", + id: "none" + } + keydata.F3 = { + folder: "none", + id: "none" + } + keydata.F4 = { + folder: "none", + id: "none" + } + keydata.F5 = { + folder: "none", + id: "none" + } + keydata.F6 = { + folder: "none", + id: "none" + } + keydata.F7 = { + folder: "none", + id: "none" + } + + try { + // encode favorite into json + var result = this.fs.writeFileSync(favoritefileout, keydata); + if (!result) return false; + + } catch (e) { + console.error(" # FavErr: Key Store failed\n", e, "\n", favoritefileout); + } + return false; + } + + updateShortcutKey(oldkey, newkey, folder, id) { + var folderpath = this.getFolderDir(folder); + var favoritefileout = this.favstore_dir + "KeyStore.zfav"; + var keydata = {}; + + keydata = this.fs.readFileSync(favoritefileout) + console.log(newkey) + switch(newkey) { + case "F1": + keydata.F1.folder = folder; + break + case "F2": + keydata.F2 = { + folder: folder, + id: id + } + break; + case "F3": + keydata.F3 = { + folder: folder, + id: id + } + break; + case "F4": + keydata.F4 = { + folder: folder, + id: id + } + break; + case "F5": + keydata.F5 = { + folder: folder, + id: id + } + break; + case "F6": + keydata.F6 = { + folder: folder, + id: id + } + break; + case "F7": + keydata.F7 = { + folder: folder, + id: id + } + break; + } + if (oldkey == "none") + { + //no + } else { + keydata[oldkey].folder = null; + keydata[oldkey].id = null; + } + + try { + // encode favorite into json + var result = this.fs.writeFileSync(favoritefileout, keydata); + if (!result) return false; + + } catch (e) { + console.error(" # FavErr: Key Store failed\n", e, "\n", favoritefileout); + } + return false; + } +} +module.exports = WTVFavorites; diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index 3b4ce180..9d4a1424 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -498,7 +498,7 @@ async function processURL(socket, request_headers) { } else { request_headers.query[k] = unescape(qraw[i].split("=")[1].replace(/\+/g, "%20")); } - } else if (qraw[i].length > 0) { + } else if (qraw[i].length == 1) { request_headers.query[qraw[i]] = null; } } diff --git a/zefie_wtvp_minisrv/config.json b/zefie_wtvp_minisrv/config.json index 9a6a6dae..8a12a9a7 100644 --- a/zefie_wtvp_minisrv/config.json +++ b/zefie_wtvp_minisrv/config.json @@ -115,6 +115,13 @@ "wtv-passport": { "port": 1654 }, + "wtv-favorite": { + "port": 1611, + "connections": 3, + "enable_multi_query": true, + "max_folders": 14, + "max_favorites_per_folder": 18 + }, "wtv-admin": { "port": 1698, "enable_multi_query": true, @@ -147,5 +154,55 @@ "allow_https": false, "force_https": false } + }, + "favorites": { + "folder_templates": { + "Recommended": [ + { + "title": "DuckDuckGo", + "url": "http://lite.duckduckgo.com/lite", + "image_type": "image/wtv-bitmap", + "image": "AAAAAAAAAQQAJAAAAAAAAAAAAAAAAAA0AAAARgAAAAABlAAAAAQBkLmAuYC5gLmAt3y5gJ1xsJKUgJeApoCIgLmAuYC5f7mAlG+umaVymJy5gLmAkoCMf5eAl4CigKOAuYC5gLN6sYe5gLmAm4CbgHCAlICdgJ6Ag22jqJ9znZ3YgNiAwIDAgJ54sZKlepmbuYC5gJuCm4CXgJeAo4CjgLmAuYCwebOHtH65gpd0qpmqcaKUmHCwlsWAj4C1gJCAjICMgLmAuYC5gLmAoXa3jZ+Aa4CggJOAl4CVgJuAo4CdgLmAfYC5gHKAbYCXgJaAuYCsgJeAj4CVcpalmW2jnH6AuoB5gLqAj4C7f5WAs3+ib5qcmG6omrmAuYChd7GQZ4B0gJeAloChcKqUl3Gjnbl5uYC5fbmAp3KrkJdxp5uUdZampXGdmbh9uYCWb6uZtX+xhZ54np2XbrmSn3CanotunKigcp2c2IXYgMCCwICqcZqYmnCmmrmAroC5gLmAlHOWpqBwopm0frGFl3Kin7d9uYCTbaubuYC5gKN3rpG4f66FmXOinYqAjIC5gLmAAAAAAAAAAAAAAAAAAAAAAAAAACUtBy4QLCQPHhAvARQDAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAwrKSAnJiMdIgoEGhEhAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAFDQgICAgICAgICAgICAgICAgICAgICBkCBg4WFwAAAIAAAAAcKAsLCwsLCwsLCwsLCwsLCwsLCwsLCxIVGB8JGwAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACowExMTAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + }, + { + "title": "Old'aVista", + "url": "http://www.oldavista.com/", + "image_type": "url", + "image": "canned/oldavista.gif" + }, + { + "title": "RetroSite", + "url": "http://retrosite.ga/", + "image_type": "url", + "image": "canned/retrosite.gif" + }, + { + "title": "68k.news", + "url": "http://68k.news/", + "image_type": "url", + "image": "canned/news.gif" + }, + { + "title": "The Old Net", + "url": "http://theoldnet.com/lite", + "image_type": "image/wtv-bitmap", + "image": "AAAAAAAAAQQAJAAAAAAAAAAAAAAAAAA0AAAARgAAAAACBAAAAAQCALmAuYC5gLmAuHy5ga9ftIu2f7iCmHWjoISusnuoj699knKVbK18rnm8gL2AuIC4gISdh3mojKN9uIC4gJudmXyRdJessXywiZdwjq+XdaShkauQebCLsH65gLmAsIG0gLWEt393q555lIKaf7uBlX94gHOAiICGgKtsto+yebiF2IDYgLqAuoCZkJyLp4iqhZmAmYDYgNiAp4CmgHKAfICjgKKAg4CUgLmElYC2gqSAt4CnfoiSnnqPgI+A0IDQgIyAkoCJgIeAk4CTgKGAzICfgHOAe4CHgIqAnX+RgMp/uYC5gJeAmYCOgJGAn4CjgL6AkYC4gJOAdIB4gKCAnICggJ2Ak4CdgI6AhoCggJKAqIS7gLKBtoCTfbt+s3+4gKOAo4CwgK+AjoCMgLeAuICvf6aAtoCygI+YmXyli6p9oICNgJ2AgoCHgI6AjICcgIWAlYC9gLyAuYC5gLKApn+SlIV6rYSrfnWuiXeejq58koOKf6qBo4C3f7mBnnW5kbiAuYCcdaFyzYDNgLOAs4C5gLmAo4CngLmAt4CvgJF/noB1f7aAtYCAgG+AtIC3gG2AiYC1gLKAs4CNgLaAtoCWgJOAeIBtgJGAuYCSgLmAnJSNe6KOoX2kgHiAqoCMgKSApoCBgHqAuYC4gLiAsoCXgJuAcoB3gKaAooCYgHiAAAAAADMMBwcHBwcHAi8BAQEWDAwwMDAwMDACAgICLwAAAAAAAAAAADQKLQMGCgYDCA8PDw8NBgMEBAQEBCMICQkIDwAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAA9CwsLCwsLCwsLCws9HBwcHBwzHBwLAAAAAAAAAAAAAAAeOBQpDS4dISQuGxISEhINKDg+KTsgOBQ5AAAAAAAHAAAAAAAAJgAmBQUFBQUFAAUFBRwgPj4+Pho/PiAjAAAAAAAGAAAAAAAAHiEZEhISEhISEhISDT88Ezw/ExMTIDkAAAAAAABVAAAAAAAANwsFMTExMTExMTExFRQYGBgYGBgYPCMAAAAAAAB5AAAAAAAAHi4lFxcXFxcXFxcXDSgYGCk+GBgYKTkAAAAAAABVAAAAAAAAFSIiEBAQEBAQEBAQHhoODhgODg4OGDkAAAAAAABVAAAAAAAAMxwcHBwcHBwcHBwcHCEdHR0pHSEdHTIAAAAAAABVAAAAAAAAHiojEBAQEBAQEBAQHjsfHx8fDiEfKTkAAAAAAAB6AAAAAAEAAAAAPQAAAAAAAAAAACUlJSUlJSUlJQsLCwsAAABVAAAAPSYkJiYkJiQmJCQkJCMkJiQkJCIkJCYkJCQkJCIAAABVAAAAAAAAAAAAJiYmJCYkJiQkJCQmJCYREQsAAAAAAAAAAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAKws9Cz0LACsAPQsAAAAAAAAAAAAAAABVAAAAAAAAAAAAAAAAJAYnLCcnBgYnBiIAAAAAAAAAAAAAAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAzMjMcMzIyMjIrHDIyMisyMjILHDIyCzMzMjIyMisLAAB6AAA3NTc2JTY0JTY0NTU1JSU2NTU3NTU1NDUlNjU1NjQqAABVPQAAAD0AAAAAAD0ANzYfDh0fHyEfHwsAPQsAAAAAAAA9AABVFR0pIS4pLjonJzonJzoVJzo6OjoGOicnLjY7ITsoIRg7ITlVAAAAAAAAAAAAAAAAAAAoGBQ/IBQUAAAAAAAAAAAAAAAAAAB6ADMTPD8TPhM/ExM8OD88PzgUExQ8Ez4UPBQTExQ+PD8UOQBV" + } + ], + "Personal": [ + { + "title": "The Midnight Archive", + "url": "http://archive.midnightchanne.net/", + "image_type": "url", + "image": "canned/midnightchannel.gif" + }, + { + "title": "WebTV/MSNTV Secrets", + "url": "http://turdinc.kicks-ass.net/Msntv/", + "image_type": "url", + "image": "canned/mattman69.gif" + } + ] + } } } diff --git a/zefie_wtvp_minisrv/user_config.example.json b/zefie_wtvp_minisrv/user_config.example.json index 9216bac5..e09e29b1 100644 --- a/zefie_wtvp_minisrv/user_config.example.json +++ b/zefie_wtvp_minisrv/user_config.example.json @@ -71,5 +71,22 @@ "password": "implemented" } } - } -} \ No newline at end of file + }, + "favorites": { + "folder_templates": { + "Personal": [ + { + "title": "The Midnight Archive", + "url": "http://archive.midnightchanne.net/", + "image_type": "url", + "image": "canned/midnightchannel.gif" + }, + { + "title": "WebTV/MSNTV Secrets", + "url": "http://turdinc.kicks-ass.net/Msntv/", + "image_type": "url", + "image": "canned/mattman69.gif" + } + ] + } + } \ No newline at end of file diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj index ece15d4e..fab5f166 100644 --- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj +++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj @@ -44,6 +44,19 @@ + + + + + + + + + + + + + @@ -67,6 +80,81 @@ Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Code @@ -429,6 +517,7 @@ Code + Code @@ -460,6 +549,13 @@ + + + + + + +