From f9b4d163bc5edd68e8916d009561d00a8b633f3c Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Sat, 29 Jul 2023 20:47:12 +0200 Subject: [PATCH] cleanup and gzip web files - clean up unnecessary files - fix ota update, maybe preventing timeouts - new 'wwwroot' folder for the web source files, and python script to gzip the files to the /data/www folder - run gzip_wwwfiles.py to compress the files in wwwroot into /data/www --- ESP32_AP-Flasher/data/alignment.jpg | Bin 23113 -> 0 bytes ESP32_AP-Flasher/data/demo_image_generator.py | 64 ------------- ESP32_AP-Flasher/data/gradient.jpg | Bin 17002 -> 0 bytes ESP32_AP-Flasher/data/update_actions.json | 16 +++- .../data/www/content_cards.json.gz | Bin 0 -> 2553 bytes ESP32_AP-Flasher/data/www/edit.html.gz | Bin 0 -> 5351 bytes ESP32_AP-Flasher/data/www/favicon.ico.gz | Bin 0 -> 6496 bytes ESP32_AP-Flasher/data/www/index.html.gz | Bin 0 -> 2970 bytes .../data/www/jsontemplate-demo.html.gz | Bin 0 -> 623 bytes ESP32_AP-Flasher/data/www/main.css.gz | Bin 0 -> 2563 bytes ESP32_AP-Flasher/data/www/main.js.gz | Bin 0 -> 6935 bytes ESP32_AP-Flasher/data/www/ota.js.gz | Bin 0 -> 4070 bytes ESP32_AP-Flasher/data/www/painter.js.gz | Bin 0 -> 2952 bytes ESP32_AP-Flasher/data/www/setup.html.gz | Bin 0 -> 689 bytes ESP32_AP-Flasher/data/www/setup.js.gz | Bin 0 -> 1015 bytes ESP32_AP-Flasher/data/www/upload-demo.html.gz | Bin 0 -> 481 bytes ESP32_AP-Flasher/gzip_wwwfiles.py | 27 ++++++ ESP32_AP-Flasher/include/truetype.h | 4 +- .../{data/www => wwwroot}/content_cards.json | 0 .../{data/www => wwwroot}/edit.html | 0 .../{data/www => wwwroot}/favicon.ico | Bin .../{data/www => wwwroot}/index.html | 0 .../www => wwwroot}/jsontemplate-demo.html | 0 .../{data/www => wwwroot}/main.css | 0 .../{data/www => wwwroot}/main.js | 0 ESP32_AP-Flasher/{data/www => wwwroot}/ota.js | 86 ++++++++++-------- .../{data/www => wwwroot}/painter.js | 0 .../{data/www => wwwroot}/setup.html | 0 .../{data/www => wwwroot}/setup.js | 0 .../{data/www => wwwroot}/upload-demo.html | 0 30 files changed, 91 insertions(+), 106 deletions(-) delete mode 100644 ESP32_AP-Flasher/data/alignment.jpg delete mode 100644 ESP32_AP-Flasher/data/demo_image_generator.py delete mode 100644 ESP32_AP-Flasher/data/gradient.jpg create mode 100644 ESP32_AP-Flasher/data/www/content_cards.json.gz create mode 100644 ESP32_AP-Flasher/data/www/edit.html.gz create mode 100644 ESP32_AP-Flasher/data/www/favicon.ico.gz create mode 100644 ESP32_AP-Flasher/data/www/index.html.gz create mode 100644 ESP32_AP-Flasher/data/www/jsontemplate-demo.html.gz create mode 100644 ESP32_AP-Flasher/data/www/main.css.gz create mode 100644 ESP32_AP-Flasher/data/www/main.js.gz create mode 100644 ESP32_AP-Flasher/data/www/ota.js.gz create mode 100644 ESP32_AP-Flasher/data/www/painter.js.gz create mode 100644 ESP32_AP-Flasher/data/www/setup.html.gz create mode 100644 ESP32_AP-Flasher/data/www/setup.js.gz create mode 100644 ESP32_AP-Flasher/data/www/upload-demo.html.gz create mode 100644 ESP32_AP-Flasher/gzip_wwwfiles.py rename ESP32_AP-Flasher/{data/www => wwwroot}/content_cards.json (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/edit.html (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/favicon.ico (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/index.html (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/jsontemplate-demo.html (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/main.css (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/main.js (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/ota.js (84%) rename ESP32_AP-Flasher/{data/www => wwwroot}/painter.js (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/setup.html (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/setup.js (100%) rename ESP32_AP-Flasher/{data/www => wwwroot}/upload-demo.html (100%) diff --git a/ESP32_AP-Flasher/data/alignment.jpg b/ESP32_AP-Flasher/data/alignment.jpg deleted file mode 100644 index 58750d98b6ab4a8ae4030af4576d0ad7a8549b2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23113 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 e&`!tSr|AQ-n29u@S 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 F000QvL=pf1 literal 0 HcmV?d00001 diff --git a/ESP32_AP-Flasher/data/www/favicon.ico.gz b/ESP32_AP-Flasher/data/www/favicon.ico.gz new file mode 100644 index 0000000000000000000000000000000000000000..601de0ee8c64b1036b9860707c1577081041bf01 GIT binary patch literal 6496 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 G8vp?Ix5Hup literal 0 HcmV?d00001 diff --git a/ESP32_AP-Flasher/data/www/index.html.gz b/ESP32_AP-Flasher/data/www/index.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..0116e2e73683756209a5693598339877009bf406 GIT binary patch literal 2970 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 literal 0 HcmV?d00001 diff --git a/ESP32_AP-Flasher/data/www/ota.js.gz b/ESP32_AP-Flasher/data/www/ota.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..7555781e3c5a3ec3312381b5a0f1de419b9f3517 GIT binary patch literal 4070 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 YJ5bd;^_N`AIY9V-06Q&7Y|cgi0Fsp3qW}N^ literal 0 HcmV?d00001 diff --git a/ESP32_AP-Flasher/data/www/painter.js.gz b/ESP32_AP-Flasher/data/www/painter.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..9c2c3cca075d10eb72c4edf859eb092a741c6c56 GIT binary patch literal 2952 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 literal 0 HcmV?d00001 diff --git a/ESP32_AP-Flasher/data/www/setup.html.gz b/ESP32_AP-Flasher/data/www/setup.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..ee38577ad6900fc8484dddb27eefc7c86cbaf965 GIT binary patch literal 689 zcmV;i0#5xOiwFpWR>foj|8r$@b#N|dbZu+^jZ{r<+b|5h57>X;eCZ{Lo1KQ%4lwj% zE6}w8QefCovFU`XENK#*G#K{ZN7+u3wo5x-ERy0Q`A91JaDIDs_hWhiU+=zMPu{=F zmRxK3#}lejP9R@aBP&=kyCME+Xq6|0HH?Obym6R7FXaj21E&$<6pE$t0Xc8D8h%Qi z02x(do~#Jh&U)T+UsK7;yu=k1IBbOhkRc|ehoMj!^YH*`^+0t~?-Wfy-%4sOisJ;* zwtzMs6KkAE9*qO176?PQb!gyXsvLT_CUXy;ivmM{sU^c%+IjTuI@&$zJPEwf7?y~V z@6uzHC$%CoDndvglF--Q%IQmYk{Y)csg^|2l_^J^wu7tGDvD9}$W|M)7veWslPT?5 zIB^Zb@0}rjEng=v{&?&jPIsn1yW?{F+{dZ1B(oT@btiDx(K;q;1`tqV@gi^~?Hg9A zCcQa<+8P_2DsTWtx+$nsvAw}+JQB^BZ9EC@H@FtDmtMxq(rx8g+K-_e=eFEznTcBT zd(>nlt)S2db=B`1gMnp3sfc($mR{RHLXfh;7(mh3J`&^w6hEDRFYd;U;Y!< z^~Mg{z05xCl6#u(JkG7<#|}oq_Tiom?A|#Po*YB)g-l6&=SDvzJK3OC X-)&CXuTHy9@qzyfpJlTs_yqs}BHc^Y literal 0 HcmV?d00001 diff --git a/ESP32_AP-Flasher/data/www/setup.js.gz b/ESP32_AP-Flasher/data/www/setup.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..ed5ceac4db8808c1186b7a6514a1dc63ecde4573 GIT binary patch literal 1015 zcmVfoj|8r$@b#N|fa{#qg+m4$^5PctM{-H&p1r!H6$?l8ov6Rg^ z+Fj+Qc%*q5Y1D=SI>XRxcQeFF{O?=E#l~E$ex@T7J==0k37kN&W1>j*4X#&%(52!4O!8JXT>O3WL>bxM!^qU-*@4(Ho76| zr4o&&5~R9|#-$#7Po3LW?K`w5%O&>Pv&sU!{#-OzB;f{O6yF)D%ZYu6!4%|< zqWu#7ijX-KVSSFn$xW`=lFi&Mjvfu>T0DTvjnm3{!d}g0Gk4L)S1s%q_6!otc)-11 zs)H`Ipe+%;0&ZZP0DU=j1+a$#RwfT84;xW7r>u1sR-QKnQ%H5My-=z($7ymN=Oj3S$N?yQ!P?xA__mTCc_+I2MK8ZVl8_Y$hC`vXBL z*|evcKSKNF$HTXd_y8uBcu4!x$IZ3f3K0VjKw+59Sle%8inTP)uXh>PxDg4BHRZ(Q zDaozf>PyQX5n#^#-F*CjG*BXqM7S%(wif68SwSBV>VwA1dv{Dho0+$7#9Kj^At=m~1|sTBsA9-IVDQ$=~z5eiwhDQisZ)>^$TYr;NBks4OO7G*Ai<&>{H>!^>;jm-Im?1l9L$Buh_C&YX lfaF3ZL+Pl`g_CF>>U*mM&ynioi#zx~_CGZXN+p2{000@k0MP&d literal 0 HcmV?d00001 diff --git a/ESP32_AP-Flasher/data/www/upload-demo.html.gz b/ESP32_AP-Flasher/data/www/upload-demo.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..a589516a8950cc5c25a6d07ef8201ca8ded45f6e GIT binary patch literal 481 zcmV<70UrJziwFpWR>foj|8;O|Z((FDWMyq{E@*UZYygc@OKaRP5I%3A|6!_A0!`df zD51!Pl4hZYkihO9avWQ;wm=UfjW^wYUp<`C9zp}gmgn)!_sxvthaV5O`=`e{nAn=` z{X4mS^NCQU(?(iigki!EiCb~lZ?A4daj<4X-A{`n!C^KY6>NR5vZ;=Q(X1fp*n4#@ zS<{zJk@c|DjAO}2#_XHBC%?de4wgv3la7GtaX`P&&W2#}&%hq$B~GAo;h29B7)R*O zHIgYfG!QAAC^T^hdgg1{%xi`8-pE`PlCa6ERy;oJ_5#Qae4eQlb}_7H4BX_XD}{^# zaA56SD;jOb%3Ks(o6QU6MjGtNWI+i72hrWRL?w~?3O>M1;>QH{-){kx3KZiv*_4b< z_F+ZPZeAEF4Ngh~XjQ?$p`{hK#uh=Z5>T2a3ZmN@e^#(#(ypg4LbYo*!o{c7ACDj5 zbL-vZTdAzDE1Q=hZy{8sCAu9M8aNNC81nRLJFnq>i3}5-^56*uA3}~yo$_YM&CfW+ zm4|&1JR@fvc}I-#&!jH@)6t_gRAp2$tBPWNUBll9ap|p2tvI1s((mEVBK(sp%i@%E XD>m7z%U^Cpy { const assets = release.assets; let fileUrl = null; - const filesJsonAsset = assets.find(asset => asset.name === 'files.json'); - if (filesJsonAsset) { - fileUrl = filesJsonAsset.browser_download_url; + const filesJsonAsset = assets.find(asset => asset.name === 'filesystem.json'); + const binariesJsonAsset = assets.find(asset => asset.name === 'binaries.json'); + if (filesJsonAsset && binariesJsonAsset) { return { html_url: release.html_url, tag_name: release.tag_name, name: release.name, date: formatDateTime(release.published_at), author: release.author.login, - file_url: fileUrl + file_url: filesJsonAsset.browser_download_url, + bin_url: binariesJsonAsset.browser_download_url } }; }); @@ -87,7 +88,7 @@ export async function initUpdate() { } else if (release.date < formatEpoch(currentBuildtime)) { easyupdate.innerHTML = `Your version is newer than the latest release date.
Are you the developer? :-)`; } else { - easyupdate.innerHTML = `An update from version ${currentVer} to version ${release.tag_name} is available.`; + easyupdate.innerHTML = `An update from version ${currentVer} to version ${release.tag_name} is available.`; } } } @@ -101,7 +102,7 @@ export async function initUpdate() { releaseDetails.forEach(release => { if (release && release.html_url) { const tableRow = document.createElement('tr'); - let tablerow = `${release.tag_name}${release.date}${release.name}`; + let tablerow = `${release.tag_name}${release.date}${release.name}`; if (release.tag_name == currentVer) { tablerow += "current version"; } else if (release.date < formatEpoch(currentBuildtime)) { @@ -123,10 +124,10 @@ export async function initUpdate() { }); } -export function updateAll(fileUrl, tagname) { +export function updateAll(binUrl, fileUrl, tagname) { updateWebpage(fileUrl, tagname, false) .then(() => { - updateESP(fileUrl, false); + updateESP(binUrl, false); }) .catch(error => { console.error(error); @@ -152,48 +153,55 @@ export async function updateWebpage(fileUrl, tagname, showReload) { print("Updating littleFS partition..."); - try { - const response = await fetch("/update_actions", { - method: "POST", - body: '' - }); - if (response.ok) { - const data = await response.text(); - } else { - print(`error performing update actions: ${response.status}`, "red"); - errors++; - } - } catch (error) { - console.error(`error calling update actions:` + error, "red"); - errors++; - } - fetch("/getexturl?url=" + fileUrl) .then(response => response.json()) .then(data => { - checkfiles(data.files); + checkfiles(data); }) .catch(error => { print('Error fetching data:' + error, "red"); }); const checkfiles = async (files) => { + + const updateactions = files.find(files => files.name === "update_actions.json"); + if (updateactions) { + await fetchAndPost(updateactions.url, updateactions.name, updateactions.path); + try { + const response = await fetch("/update_actions", { + method: "POST", + body: '' + }); + if (response.ok) { + const data = await response.text(); + } else { + print(`error performing update actions: ${response.status}`, "red"); + errors++; + } + } catch (error) { + console.error(`error calling update actions:` + error, "red"); + errors++; + } + } + for (const file of files) { try { - const url = "/check_file?path=" + encodeURIComponent(file.path); - const response = await fetch(url); - if (response.ok) { - const data = await response.json(); - if (data.filesize == file.size && data.md5 == file.md5) { - print(`file ${file.path} is up to date`, "green"); - } else if (data.filesize == 0) { - await fetchAndPost(file.url, file.name, file.path); + if (file.name != "update_actions.json") { + const url = "/check_file?path=" + encodeURIComponent(file.path); + const response = await fetch(url); + if (response.ok) { + const data = await response.json(); + if (data.filesize == file.size && data.md5 == file.md5) { + print(`file ${file.path} is up to date`, "green"); + } else if (data.filesize == 0) { + await fetchAndPost(file.url, file.name, file.path); + } else { + await fetchAndPost(file.url, file.name, file.path); + } } else { - await fetchAndPost(file.url, file.name, file.path); + print(`error checking file ${file.path}: ${response.status}`, "red"); + errors++; } - } else { - print(`error checking file ${file.path}: ${response.status}`, "red"); - errors++; } } catch (error) { console.error(`error checking file ${file.path}:` + error, "red"); @@ -257,12 +265,12 @@ export async function updateESP(fileUrl, showConfirm) { } const responseBody = await response.text(); - if (responseBody.trim()[0] !== "{") { + if (responseBody.trim()[0] !== "[") { throw new Error("Failed to fetch the release info file"); } const data = JSON.parse(responseBody); - const file = data.binaries?.find((entry) => entry.name == env + '.bin'); + const file = data.find((entry) => entry.name == env + '.bin'); if (file) { binurl = file.url; binmd5 = file.md5; diff --git a/ESP32_AP-Flasher/data/www/painter.js b/ESP32_AP-Flasher/wwwroot/painter.js similarity index 100% rename from ESP32_AP-Flasher/data/www/painter.js rename to ESP32_AP-Flasher/wwwroot/painter.js diff --git a/ESP32_AP-Flasher/data/www/setup.html b/ESP32_AP-Flasher/wwwroot/setup.html similarity index 100% rename from ESP32_AP-Flasher/data/www/setup.html rename to ESP32_AP-Flasher/wwwroot/setup.html diff --git a/ESP32_AP-Flasher/data/www/setup.js b/ESP32_AP-Flasher/wwwroot/setup.js similarity index 100% rename from ESP32_AP-Flasher/data/www/setup.js rename to ESP32_AP-Flasher/wwwroot/setup.js diff --git a/ESP32_AP-Flasher/data/www/upload-demo.html b/ESP32_AP-Flasher/wwwroot/upload-demo.html similarity index 100% rename from ESP32_AP-Flasher/data/www/upload-demo.html rename to ESP32_AP-Flasher/wwwroot/upload-demo.html