Commit Graph
11 Commits
Author SHA1 Message Date
Robin Anderson cb0d853544 Show update progress, a Restart step, and the result after restart
Installing an update fills the Install button with a progress bar,
driven by the ZIP's size against its Content-Length. When the install
finishes, a blue Restart button starts the new version. After the
restart, a card names the new and old versions. A failed install or a
missed restart shows a card with the reason.

A pending update marks the Settings button and the Settings header with
Steam's alert yellow (#FFC82C) and its exclamation mark, taken from the
SettingsAlert icon in Steam's UI on the Frame. The automatic check runs
daily instead of weekly, and retries after an hour when it fails.
2026-10-15 23:43:22 -04:00
Robin Anderson 5a1f668fbe Cancel update downloads when KnockThru exits
run_program takes an optional cancel flag and stops its child within
about 50 ms when the flag is set. Downloads and the unpack use it and
throw Canceled, which leaves the install folder as it was. The file
swap after them is never canceled. The resident app sets the flag
whenever run() returns, so quitting SteamVR no longer waits up to 180 s
on a download.
2026-10-15 22:40:13 -04:00
Robin Anderson 10f973b335 Fix five report and update bugs found in review
The report server could hang Done: a phone that stopped reading a
download held its thread, and the destructor waited on it. A stalled
download took 29.9 s to give up with a send timeout alone. Sends and
receives now wait at most 200 ms at a time and check for shutdown, and
the server stops in about 0.1 s.

The ZIP and text downloads now carry the whole report. Only the page's
copy is shortened to fit a GitHub issue.

--report connects as a Background app, which never starts SteamVR.

Pressing Check for updates during the weekly check now shows that
check's result. A failed weekly check retries in a day, not a week.
2026-10-15 22:35:58 -04:00
Robin Anderson ba54052c60 Bundle the report and knock recording into one ZIP for the phone
With a recording, the phone page leads with Download the report file,
which gives knockthru-report.zip holding the report and the recording,
then Open GitHub, then one step to attach the file. A separate
recording link was easy to miss. Without a recording, the page keeps
the copy and paste flow.
2026-10-15 22:19:35 -04:00
Robin Anderson 83bb714b69 Read the HTTP status from response headers in downloads
The Frame's curl exits with 56 for an HTTP 404 over HTTP/2, where other
versions exit with 22, so a missing release read as a failed download.
2026-10-15 22:12:27 -04:00
Robin Anderson b3f8928155 Record knocks for a bug report
Record knocks on the report card records 20 s of headset and controller
motion in the tests/data CSV format, gzips it to
~/knockthru-knocks.csv.gz, and adds the knocks and actions heard to the
report. The phone page then offers the recording as a download to
attach to the issue.

detector_test FILE replays any recording and prints every knock and
action, for triaging a report.
2026-10-15 22:10:19 -04:00
Robin Anderson 93a1f877ce Cap the phone report at 60,000 characters and ship the QR license text
GitHub rejects issue bodies over 65,536 characters, and a full log can
reach about 93,000. The phone copy keeps the start and the newest log
lines and marks the cut. The saved file stays complete.

THIRD_PARTY_NOTICES.md now carries the qrcodegen MIT text, because the
release ZIP ships the notices file but not third_party/.

start_detached forks and closes inherited descriptors before exec, so
the restart after an in-app update does not hold the old app's SteamVR
connection open.
2026-10-15 22:02:35 -04:00
Robin Anderson 20b7cc75c5 Hand the full report to a phone through a page the headset serves
The report card's QR code now opens a page on the Frame, over the local
Wi-Fi, with the whole report. One button copies it and opens the
prefilled GitHub form, where it goes in the Report box. The page also
offers the report as a download. It needs a random token in the path and
stops when the card closes or after 15 minutes. SteamOS's firewall opens
TCP 1024 to 65535, and the kernel picks the port from that range.

Without a network, the QR code opens the GitHub form directly, as before.
2026-10-15 21:50:04 -04:00
Robin Anderson 4a84f1fdd3 Walk through sending a report in three steps, with an optional file
The report card numbers the steps: open the phone camera, scan the code
through a lens, then sign in and press Create. Save report file is a
separate button that keeps the full report on the headset and says it
sends nothing. The issue link also carries the last error KnockThru
showed, in a new last-error field on the bug form.
2026-10-15 21:44:22 -04:00
Robin Anderson d421116efe Show a QR code that opens a GitHub issue from the report card
Report in Settings opens a card with a QR code. A phone held up to a lens
scans it and opens the bug form in .github/ISSUE_TEMPLATE/bug.yml, with
the KnockThru version, SteamVR version, and passthrough status filled in.
The full report still goes to ~/knockthru-report.txt.

Vendors nayuki/QR-Code-generator (MIT) to encode the code.
2026-10-15 21:38:42 -04:00
Robin Anderson 61121b3688 Add updates, bug reports, purge, and a Steam-update warning
--update installs the latest GitHub release over the running one and
restarts it. It reads the FrameDrop manifest, checks the ZIP's SHA-256,
and renames each new file over the old one. The resident app has the same
check and install behind CheckUpdate and InstallUpdate, for the panel.

--report writes ~/knockthru-report.txt with the KnockThru and SteamVR
versions, registration state, settings, and the end of both logs.

--uninstall --purge also deletes ~/.config/knockthru and SteamVR's
vrappconfig file for KnockThru.

A missing Room View button now throws DashboardChanged. The passthrough
tile then says a Steam update moved the button, and the log records the
SteamVR version once.
2026-10-15 21:20:02 -04:00