fix(core,app,android,cli,packaging): harden account sign-in and watch-history sync

- Desktop shows Proton's CAPTCHA instead of failing the sign-in: a wry webview
  in a child process of the app (`pstr-app::verify`), confined to
  https://*.proton.me, hands the token back and the sign-in is retried. Linux
  packages and CI gain WebKitGTK 4.1; the Windows zip and MSI ship
  WebView2Loader.dll, without which a -gnu build does not start.
- The desktop keyring splits a secret too long for one entry across several,
  so a Proton session with many key salts survives Windows' 1280-unit cap.
  Short secrets stay one entry, so every existing secret still reads.
- `WatchSync` runs against a small `HistoryDrive` trait and is tested end to
  end against an in-memory Drive: two devices, newer wins, no re-upload of an
  unchanged history, a missing file written again, an unreadable own file
  never overwritten, a newer-format file left alone.
- An installation's file unwritten for 90 days is retired by the next device
  to sync, after its entries are merged and carried in that device's file.
- Removing a share keeps its watch state: sync would bring it back from the
  other devices anyway, and re-adding the share picks up where it left off.
- Watch history syncs once more on desktop exit (bounded to 3 s) and, on
  Android, through a WorkManager job enqueued when the app leaves the screen.
- The second-factor prompts say security keys are not supported.
This commit is contained in:
nvrl committed 2026-10-06 14:30:15 +02:00
1 parent 26cccd5c63
commit d9ca8f8d60
28 files changed
+2475 -186

No files matched your search

+9 -1
View File
@@ -232,9 +232,16 @@ stage() {
[[ -f "$rel/$f" ]] || die "$f missing from $rel — drop --skip-build"
done
# The CAPTCHA window's WebView2 loader. Under -msvc it links statically;
# under -gnu, webview2-com-sys links the DLL, which it ships and copies into
# its build output, so the exe does not start without it beside it.
local loader
loader="$(ls -t "$rel"/build/webview2-com-sys-*/out/x64/WebView2Loader.dll 2>/dev/null | head -n1)"
[[ -n "$loader" ]] || die "WebView2Loader.dll missing from $rel/build — drop --skip-build"
rm -rf "$OUTDIR"
mkdir -p "$OUTDIR"
install -m755 "$rel/$GUI_BIN" "$rel/$CLI_BIN" "$MPV_DLL" "$OUTDIR/"
install -m755 "$rel/$GUI_BIN" "$rel/$CLI_BIN" "$MPV_DLL" "$loader" "$OUTDIR/"
install -m644 "$ROOT/README.md" "$OUTDIR/"
if [[ -n "$SIGN_CERT" ]]; then
@@ -295,6 +302,7 @@ make_msi() {
-D "Version=$VERSION" \
-D "BinDir=$OUTDIR" \
-D "MpvDll=$OUTDIR/libmpv-2.dll" \
-D "WebViewLoader=$OUTDIR/WebView2Loader.dll" \
-D "IconFile=$PKG/proton-stream.ico" \
-D "ReadMe=$OUTDIR/README.md" \
-o "$out" "$PKG/proton-stream.wixl.wxs"