mirror of
https://github.com/ALLFATHER-BV/wadamesh.git
synced 2026-08-23 18:49:55 +00:00
Reported by Istvan on a T-Deck: back out of an app and it goes back correctly, but the top dropdown opens at the same time. beta_49 widened statusBarReaderBackCb from the Reader page to EVERY app page, so the bar now closes a page on touch-DOWN (the cap-touch swipe detector can abort the CLICKED, which used to trap people on touch-only boards). The comment claimed the CLICKED that follows was then "a no-op" because close() clears s_apppage_close. It is not: statusBarTapCb merely skips its app-page branch and falls through every remaining branch to the control-center toggle at the end. So the same tap went back AND popped the dropdown. Harmless while this was Reader-only; wrong for every app page since beta_49. Swallow the CLICKED that belongs to a press already used to go back, the same way s_sb_shot_done suppresses the click after a screenshot hold. Timestamped rather than a plain flag: the entire reason for closing on touch-DOWN is that the matching CLICKED sometimes never arrives, and a sticky bool would then eat the next genuine bar tap — a stale timestamp just expires. Also adds scripts/deploy-apps.sh, which should have existed all along. The device reads the app and language catalogs from firmware.wadamesh.com/apps/, a tree that neither release.sh (out/firmware/) nor deploy-site.sh (deploy/site/) ships, so it was only ever updated when someone remembered to rsync it by hand -- and twice nobody did. Istvan is on hu.lang v8 while the repo has v11, and the SDK Test app published earlier today never appeared in the store at all. The script validates both catalogs first (parse, and every version a catalog points at must exist) because a malformed one leaves a device with an empty store and no explanation. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
63 lines
2.8 KiB
Bash
Executable File
63 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# wadamesh app+language store deploy: publish deploy/apps/ to the firmware VPS.
|
|
#
|
|
# The device reads BOTH catalogs from the firmware host, NOT the site host:
|
|
# http://firmware.wadamesh.com/apps/apps.json <- Store > Apps
|
|
# http://firmware.wadamesh.com/apps/langs.json <- Store > Languages
|
|
# http://firmware.wadamesh.com/apps/lang/<ver>/<code>.lang
|
|
# so this tree lives under the FIRMWARE web root, alongside releases/ and latest*/.
|
|
#
|
|
# WHY THIS SCRIPT EXISTS: there wasn't one. release.sh rsyncs out/firmware/ (which
|
|
# does not contain apps/) and deploy-site.sh rsyncs deploy/site/ — so the store was
|
|
# only ever updated by someone remembering to rsync it by hand, and twice they did
|
|
# not. Translations sat at v8 on the server while the repo had v9/v10/v11, and a
|
|
# published app never appeared at all. Editing deploy/apps/ is not publishing it;
|
|
# running this is.
|
|
#
|
|
# Usage:
|
|
# WADAMESH_VPS=user@your-vps scripts/deploy-apps.sh # deploy
|
|
# WADAMESH_VPS=user@your-vps scripts/deploy-apps.sh --dry-run # preview only
|
|
#
|
|
# Optional:
|
|
# WADAMESH_FW_PATH=/srv/wadamesh/firmware # override the firmware web root
|
|
#
|
|
# The VPS target comes from the environment — never commit it.
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
SRC="$ROOT/deploy/apps/"
|
|
DEST="${WADAMESH_VPS:?set WADAMESH_VPS=user@host}"
|
|
DEST_PATH="${WADAMESH_FW_PATH:-/srv/wadamesh/firmware}/apps"
|
|
|
|
DRY=""
|
|
[ "${1:-}" = "--dry-run" ] && DRY="--dry-run"
|
|
|
|
# Sanity-check the catalogs before shipping them: a device that gets malformed JSON
|
|
# shows an empty store with no clue why, and the versioned .lang dir each catalog
|
|
# entry points at has to actually exist or the download 404s on the device.
|
|
python3 - "$ROOT" <<'PY'
|
|
import json, os, sys
|
|
root = sys.argv[1]
|
|
apps_dir = os.path.join(root, "deploy", "apps")
|
|
langs = json.load(open(os.path.join(apps_dir, "langs.json")))["langs"]
|
|
missing = [f"{l['code']} v{l['ver']}" for l in langs
|
|
if not os.path.isfile(os.path.join(apps_dir, "lang", str(l["ver"]), l["code"] + ".lang"))]
|
|
if missing:
|
|
sys.exit("ABORT: langs.json points at files that do not exist: " + ", ".join(missing))
|
|
json.load(open(os.path.join(apps_dir, "apps.json"))) # parse check
|
|
print(f"catalogs ok: {len(langs)} languages, every referenced .lang present")
|
|
PY
|
|
|
|
# --delete mirrors the repo: the store is generated content, the repo is the source
|
|
# of truth, and stale versioned dirs left on the server are how a device ends up
|
|
# offered a language file nothing points at any more.
|
|
rsync -avz $DRY --delete "$SRC" "$DEST:$DEST_PATH/"
|
|
|
|
if [ -z "$DRY" ]; then
|
|
echo
|
|
echo "deployed deploy/apps/ -> $DEST:$DEST_PATH"
|
|
echo "verify:"
|
|
echo " curl -s http://firmware.wadamesh.com/apps/langs.json"
|
|
echo " curl -s http://firmware.wadamesh.com/apps/apps.json"
|
|
fi
|