From ad7d3fd3ff74bd5126d3e4224b6f76c8d0fca78a Mon Sep 17 00:00:00 2001 From: leukipp Date: Wed, 8 Oct 2025 20:47:59 +0200 Subject: [PATCH] feat: early app updates #96 --- install.sh | 37 +++++++++++++++++++------------------ js/integration.js | 4 ++-- js/webview.js | 25 +++++++++++++------------ 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/install.sh b/install.sh index a71cd72..c1de524 100755 --- a/install.sh +++ b/install.sh @@ -1,11 +1,13 @@ #!/usr/bin/env bash # Read arguments +ARG_EARLY=false ARG_UPDATE=false for arg in "$@"; do - if [ "$arg" = "update" ]; then - ARG_UPDATE=true - fi + case "$arg" in + early) ARG_EARLY=true ;; + update) ARG_UPDATE=true ;; + esac done # Determine system architecture @@ -13,15 +15,9 @@ echo -e "Determining system architecture..." BITS=$(getconf LONG_BIT) case "$(uname -m)" in - aarch64) - ARCH="arm64" - ;; - x86_64) - ARCH="x64" - ;; - *) - { echo "Architecture $(uname -m) running $BITS-bit operating system is not supported."; exit 1; } - ;; + x86_64) ARCH="x64" ;; + aarch64) ARCH="arm64" ;; + *) { echo "Architecture $(uname -m) running $BITS-bit operating system is not supported."; exit 1; } ;; esac [ "$BITS" -eq 64 ] || { echo "Architecture $ARCH running $BITS-bit operating system is not supported."; exit 1; } @@ -31,12 +27,18 @@ echo "Architecture $ARCH running $BITS-bit operating system is supported." echo -e "\nDownloading the latest release..." TMP_DIR=$(mktemp -d) -DEB_URL=$(wget -qO- https://api.github.com/repos/leukipp/touchkio/releases/latest | \ -grep -o "\"browser_download_url\": \"[^\"]*_${ARCH}\.deb\"" | \ -sed 's/"browser_download_url": "//;s/"//g') -DEB_PATH="${TMP_DIR}/$(basename "$DEB_URL")" chmod 755 "$TMP_DIR" +JSON=$(wget -qO- "https://api.github.com/repos/leukipp/touchkio/releases" | tr -d '\r\n') +if $ARG_EARLY; then + DEB_REG='"prerelease":\s*(true|false).*?"browser_download_url":\s*"\K[^\"]*_'$ARCH'\.deb' +else + DEB_REG='"prerelease":\s*false.*?"browser_download_url":\s*"\K[^\"]*_'$ARCH'\.deb' +fi + +DEB_URL=$(echo "$JSON" | grep -oP "$DEB_REG" | head -n 1) +DEB_PATH="${TMP_DIR}/$(basename "$DEB_URL")" + [ -z "$DEB_URL" ] && { echo "Download url for .deb file not found."; exit 1; } wget --show-progress -q -O "$DEB_PATH" "$DEB_URL" || { echo "Failed to download the .deb file."; exit 1; } @@ -108,8 +110,7 @@ else fi # Start the setup mode -echo "" -read -p "Start touchkio setup? (Y/n) " setup +read -p $'\nStart touchkio setup? (Y/n) ' setup if [[ ${setup:-y} == [Yy]* ]]; then echo "/usr/bin/touchkio --setup" diff --git a/js/integration.js b/js/integration.js index f2762d1..02c971d 100644 --- a/js/integration.js +++ b/js/integration.js @@ -235,7 +235,7 @@ const initApp = () => { unique_id: `${INTEGRATION.node}_app`, command_topic: `${root}/install`, state_topic: `${root}/version/state`, - payload_install: "update", + payload_install: "app_early" in ARGS ? "update early" : "update", device: INTEGRATION.device, }; if (!HARDWARE.support.appUpdate) { @@ -247,7 +247,7 @@ const initApp = () => { if (topic === config.command_topic) { console.info("Update App..."); hardware.setDisplayStatus("ON", () => { - const args = ["-c", `bash <(wget -qO- ${APP.scripts.install}) update`]; + const args = ["-c", `bash <(wget -qO- ${APP.scripts.install}) ${message.toString()}`]; hardware.execScriptCommand("bash", args, (progress, error) => { if (progress) { console.info(`Progress: ${progress}%`); diff --git a/js/webview.js b/js/webview.js index fe055aa..c5e5a8f 100644 --- a/js/webview.js +++ b/js/webview.js @@ -49,7 +49,7 @@ const init = async () => { session.defaultSession.clearCache(); // Parse arguments - const debug = ARGS.app_debug === "true"; + const debug = "app_debug" in ARGS; const widget = ARGS.web_widget ? ARGS.web_widget === "true" : true; const zoom = !isNaN(parseFloat(ARGS.web_zoom)) ? parseFloat(ARGS.web_zoom) : 1.25; const theme = ["light", "dark"].includes(ARGS.web_theme) ? ARGS.web_theme : "dark"; @@ -905,7 +905,7 @@ const viewEvents = async () => { if (WEBVIEW.viewActive === 0 && ready.length === WEBVIEW.views.length) { nextView(); } - if (ARGS.app_debug === "true") { + if ("app_debug" in ARGS) { setTimeout(() => { view.webContents.openDevTools(); }, 2000); @@ -1051,17 +1051,18 @@ const appEvents = async () => { */ const latestRelease = async () => { try { - const response = await axios.get(`${APP.releases.url}/latest`, { timeout: 10000 }); - const data = response ? response.data : null; - if (!data || data.draft || data.prerelease) { - return; + const response = await axios.get(APP.releases.url, { timeout: 10000 }); + const release = response?.data?.find((item) => { + return !item.draft && (!item.prerelease || "app_early" in ARGS); + }); + if (release) { + APP.releases.latest = { + title: APP.title, + version: (release.tag_name || " ").replace(/^v/i, ""), + summary: release.body || " ", + url: release.html_url || " ", + }; } - APP.releases.latest = { - title: APP.title, - version: (data.tag_name || data.name || " ").replace(/^v/i, ""), - summary: data.body || " ", - url: data.html_url || " ", - }; } catch (error) { console.warn("Github Error:", error.message); }