Files
proton-stream/packaging/proton-stream.spec
T
nvrl d9ca8f8d60 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.
2026-10-06 14:30:15 +02:00

75 lines
2.6 KiB
RPMSpec

# RPM built from an already-staged tree, not from source.
#
# `scripts/build.sh rpm` runs cargo once, stages a filesystem image under
# dist/stage, and then calls:
#
# rpmbuild -bb packaging/proton-stream.spec \
# --define "version 0.1.0" --define "stagedir /abs/path/to/dist/stage"
#
# Staging rather than compiling inside rpmbuild is deliberate: one cargo build
# feeds the tarball, the .deb and the .rpm, and rpmbuild does not then need
# libmpv headers or a Rust toolchain on the packaging host.
%global debug_package %{nil}
# The binaries are prebuilt, quite possibly on a different distribution, so let
# the explicit Requires below stand rather than having rpm scan the ELF and
# generate soname deps against whatever this host happens to have.
AutoReqProv: no
%{!?version: %global version 0.1.0}
Name: proton-stream
Version: %{version}
Release: 1%{?dist}
Summary: Netflix-style desktop client for Proton Drive public links
License: MIT
URL: https://github.com/narrrl/proton-stream
ExclusiveArch: x86_64
# libmpv does the demuxing and decoding; libsecret is where the share fragment
# and custom password live. SQLite is bundled into the binary (rusqlite
# `bundled`) and TLS is rustls, so neither shows up here.
Requires: mpv-libs >= 0.34
Requires: libsecret
Requires: webkit2gtk4.1
Requires: mesa-libGL
Requires: libxkbcommon
Requires: libX11
Requires: libwayland-client
Requires: hicolor-icon-theme
Recommends: gnome-keyring
Provides: pstr = %{version}-%{release}
%description
Paste a Proton Drive share URL and its password, and get a browsable,
streamable library: a poster wall, a page per title with seasons and episodes,
resume-where-you-left-off, and an embedded libmpv player. No Proton account,
no server, no download step — a file's content blocks each decrypt on their
own, so seeking costs the blocks the seek lands on.
%prep
test -n "%{?stagedir}" || (echo 'Pass --define "stagedir /abs/path" (see scripts/build.sh)' >&2; exit 1)
test -d "%{stagedir}/usr/bin"
%build
# Nothing to do: %{stagedir} already holds release binaries.
%install
cp -a "%{stagedir}"/. %{buildroot}/
%files
%{_bindir}/proton-stream
%{_bindir}/pstr
%{_datadir}/applications/io.narl.proton-stream.desktop
%{_datadir}/icons/hicolor/scalable/apps/io.narl.proton-stream.svg
# Directory entries, so these stay correct whether or not the checkout has a
# LICENSE yet (a listed directory takes its contents with it).
%{_datadir}/doc/proton-stream/
%{_datadir}/licenses/proton-stream/
%changelog
* Sun Aug 02 2026 Nils Pukropp <contact@narl.io> - 0.1.0-1
- Initial package.