Skip to content

feat!: HeroUI web client, StreamWA, and GoReleaser releases - #859

Closed
pavelpikta wants to merge 136 commits into
YouROK:nextgenfrom
lampac-nextgen:master
Closed

feat!: HeroUI web client, StreamWA, and GoReleaser releases#859
pavelpikta wants to merge 136 commits into
YouROK:nextgenfrom
lampac-nextgen:master

Conversation

@pavelpikta

Copy link
Copy Markdown
Contributor

Summary

  • Replace the Material UI web app with a Vite + TypeScript HeroUI client: cinema player, library import/export, PWA magnet/torrent launch, details/cache UX with real reader/buffer state, and settings for WAF / MCP / Torznab / trackers in that UI.
  • Add --streamwa so stream/play/m3u can run without HTTP auth for external players; Telegram Mini App SDK is gone in favor of SPA login (401 without WWW-Authenticate) plus server/web/auth/telegram.go.
  • Switch releases to GoReleaser + Makefile (drop build-all.sh): host/snapshot builds, GHCR, Docker Compose and CLI-aligned TS_* env vars, static Linux CI check, Windows GStreamer-embed build, and Linux AppImages from a GoReleaser post-hook.
  • Streaming/cache: torrstor piece-priority re-arm and serialized priority updates; M3U by file id; TrackTimecode no longer resets on viewed; Torznab Tracker from Jackett/Prowlarr XML; outbound app HTTP uses TorrServer/<version>.

Important

This is the origin product delta vs YouROK master. MCP, WAF, tracker lists, and Torznab CatType backends are already on YouROK; this PR brings the HeroUI surfaces for those features, plus StreamWA, Telegram SPA auth, and the GoReleaser/AppImage pipeline.

Important

InitSets stays 3-arg (readOnly, searchWA, streamWA). Reverting it to YouROK’s 2-arg form drops StreamWA. CORS must keep X-Telegram-Init-Data and MCP headers (Mcp-Session-Id, Mcp-Protocol-Version, …) or /mcp and Telegram login preflight break.

Warning

--streamwa exposes /stream play and M3U without HTTP auth (and will auto-add torrents for external players). Keep it off on untrusted networks, or bind with -i / put the server behind a reverse proxy. Other API routes still require auth when -a is set.

Warning

SPA 401 is without WWW-Authenticate so the browser does not pop native basic-auth over the custom login form. Restoring YouROK’s WWW-Authenticate header will break that UI.

Caution

build-all.sh / the old per-file web embed path are replaced by make binary / make dist and gen_web.go embed.FS. Release scripts and docs that still call build-all.sh will break.

Caution

Docker/Alpine images must use id=binary (static CGO_ENABLED=0). id=binary-gst loads GStreamer via dlopen and is not for Docker. GHCR names must be lowercase (lampac-nextgen/TorrServerghcr.io/lampac-nextgen/torrserver).

Note

Upstream Material UI Quick-VLC on torrent cards is not ported. Poster play and overflow VLC already cover that flow in the HeroUI client.

Note

Outbound app HTTP (Torznab, .torrent fetch, tracker lists, images) sends TorrServer/<version>. BitTorrent tracker/peer HTTP still uses qBittorrent/4.3.9 on purpose.

Note

i18n: Search is a nested object; nav.Search is the label. Flattening Search to a string (old MUI web) fails yarn i18n:check.

Note

AppImage post-hook is a no-op on macOS and when FUSE/appimagetool is missing. Linux amd64/arm64/arm7 artifacts are dist/TorrServer-linux-*.AppImage. UPX is off for make binary / make dist and on for make docker unless SKIP_UPX=1.

Tip

Local build: make binary then make install / make start. Fast config check: make check. Web: cd web && yarn verify. Live indexer/stream: ./scripts/live-torrent-check.sh (gitignored data/). CI Playwright is mocked only (yarn test:e2e).

Tip

PWA can open magnet: and .torrent files. Docker Compose sets TS_STREAMWA / other TS_* to match CLI flags — see docker-entrypoint.sh.

dependabot Bot and others added 30 commits July 20, 2026 17:53
Bumps [axios](https://github.com/axios/axios) from 1.16.0 to 1.18.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](axios/axios@v1.16.0...v1.18.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.18.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Trim each line in GetTrackerFromFile before the http/udp prefix check so
leading spaces and trailing CR (from CRLF-saved files) no longer drop
valid trackers or leave a stray \r inside the announce URL.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix: trim whitespace/CR when reading trackers.txt
…/axios-1.18.0

chore(deps): bump axios from 1.16.0 to 1.18.0 in /web
Bumps [body-parser](https://github.com/expressjs/body-parser) from 1.20.4 to 1.20.6.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](expressjs/body-parser@1.20.4...1.20.6)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-version: 1.20.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
feat(docker): actualize environment variables with server args
…rPriority

clearPriority is started as a goroutine from CloseReader and slept for one
second before resetting piece priorities. Players that issue many short Range
requests open a new reader every couple of seconds (the stream handler forces
Connection: close), so a reader routinely appears inside that window. When the
sleeping goroutine woke up and observed no registered reader, it reset every
piece to PiecePriorityNone, discarding the priorities setLoadPriority had just
assigned to the new reader.

Nothing recovers from that state on its own: setLoadPriority is only reached
through the cache cleanup path, which is driven by piece reads and writes, and
with all priorities at None no piece is ever downloaded. The torrent then sits
at zero download speed with peers connected until it is re-added.

Replace the sleep with a mutex shared by clearPriority and setLoadPriority.
The ordering guarantee is the same and the race window is gone.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Piece priorities are only (re)assigned from the cache cleanup path, and that
path is triggered by piece reads and writes. This makes priority loss
self-sustaining: with every piece at PiecePriorityNone nothing downloads, so
no piece I/O occurs, so cleanup never runs and the priorities stay cleared.
The torrent reports connected peers and zero download speed until it is
dropped and re-added.

The preceding commit removes the known way to reach that state. This adds a
cheap safety net so the cycle cannot persist even if priorities are lost some
other way: a per-cache ticker re-arms priorities every five seconds while at
least one reader is in use, and exits once the cache is closed. The work it
does is the same as what already runs on every reader close.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Update playlist generation to use torrent file IDs in stream URLs, improving compatibility with media players and external clients using indexed playback.
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.2 to 3.1.5.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](fastify/fast-uri@v3.1.2...v3.1.5)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.13 to 1.1.18.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](juliangruber/brace-expansion@v1.1.13...v1.1.18)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.18
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
- Changed package-ecosystem for web dependencies to "npm" and specified directory.
- Added ignore rule for TypeScript major version updates to maintain compatibility.
- Updated GitHub Actions configuration to include a commit message prefix for better clarity.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Signed-off-by: dependabot[bot] <support@github.com>
…updates (#19)

Signed-off-by: dependabot[bot] <support@github.com>
- Added a new utility function `findCaptionSrc` to locate sidecar subtitle files (.srt, .vtt) based on the video file's basename.
- Updated tests to reflect the new implementation and ensure correct functionality.
- Refactored imports in `usePlayLauncher` to utilize the new `findCaptionSrc` function.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…fer state (#22)

- Make torrent details and cache map more reliable on mobile and desktop: edge-to-edge / fullscreen dialogs, compact confirm modals, iOS Safari viewport fixes, and clearer details/actions layout.
- Fix cache snake and buffer reporting end-to-end: expose `ReaderState.Active`, keep idle playheads frozen, restore focus window across dialog reopens, and clarify preload vs playable-ahead buffer labels (i18n included).
- Correct server cache piece length/completion (`pieceByteLength`, byte-based `Completed`) and reader idle handling so UI metrics match what is actually cached.
- Improve torrent list freshness after add/drop/delete, refine cache/detail polling, and add editable cache size in settings.

-----
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.15.0 to 3.15.1.
- [Changelog](https://github.com/nodeca/js-yaml/blob/3.15.1/CHANGELOG.md)
- [Commits](nodeca/js-yaml@3.15.0...3.15.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 3.15.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.8 to 3.3.18.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/3.3.18/CHANGELOG.md)
- [Commits](ai/nanoid@3.3.8...3.3.18)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-version: 3.3.18
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Fix TrackTimecode API reset when marking files as viewed
…/nanoid-3.3.18

chore(deps): bump nanoid from 3.3.8 to 3.3.18 in /web
…/js-yaml-3.15.1

chore(deps): bump js-yaml from 3.15.0 to 3.15.1 in /web
fix(torznab): populate Tracker field from <jackettindexer>
pavelpikta and others added 26 commits September 2, 2026 18:33
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.5 to 3.1.7.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](fastify/fast-uri@v3.1.5...v3.1.7)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
- Enhanced the TrackersListURL functionality to allow an optional custom remote list URL, which is tried first before falling back to built-in mirrors.
- Updated related documentation in README.md, Swagger files, and translations to reflect the new behavior.
- Adjusted tests to ensure correct handling of custom and default tracker URLs.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
- Introduced a new settings.CategoryType definition with enum values for 'default', 'manual', and 'all'.
- Updated the TorznabConfig to reference the new CategoryType for the catType property, enhancing the configuration options.
- Adjusted related documentation in Go, Swagger JSON, and YAML files to reflect these changes.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…rshalling

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…gs.json

- Added functionality to import legacy `wip.txt` (whitelist) and `bip.txt` (blacklist) files into the `waf` object in `settings.json` if the `waf` key does not exist.
- Renamed legacy files to `wip.txt.bak` and `bip.txt.bak` after successful migration.
- Introduced tests to ensure correct migration behavior and handling of various scenarios, including read-only mode and existing WAF configurations.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
chore(Dockerfile): update Go version from 1.27.0 to 1.27.1
chore(deps): update go-ffprobe dependency to v2.3.0
feat(waf): add HTTP access WAF with settings UI and API
…/fast-uri-3.1.7

chore(deps): bump fast-uri from 3.1.5 to 3.1.7 in /web
…-minor-patch group (#26)

Signed-off-by: dependabot[bot] <support@github.com>
- Updated the `formatFfpBytes` function to round sizes to whole units for GB and MB.
- Enhanced tests for `formatFfpBytes` to ensure accurate formatting.
- Added new tests for `humanizeSize` and `formatSizeToClassicUnits` to validate size rounding.
- Updated localization files to change "DownloadSpeed" and "UploadSpeed" to simpler terms across multiple languages.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Updated the GO_VERSION in the versions.env file to align with the latest release.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…ster

Keep the HeroUI web and GoReleaser pipeline. Take upstream WAF, MCP, tracker prefetch, torrent 1.2.29, and fold Torznab CatType/Prowlarr into origin search.

Co-authored-by: Cursor <cursoragent@cursor.com>
- Introduced a post-build hook in GoReleaser to create AppImages for amd64, arm64, and arm7 architectures.
- Added necessary scripts and desktop entry for AppImage packaging.
- Updated documentation to reflect new AppImage capabilities and installation requirements.
- Enhanced CI workflow to install AppImage dependencies.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
- Updated TorrServer build process to simplify swag initialization.
- Added nil check in ListTorrent function to prevent potential crashes.
- Introduced a new test for Prowlarr indexer fallback logic.
- Enhanced the IntegrationsStatusSection to include MCP URL functionality.
- Updated localization files to support MCP status and related messages in multiple languages.
- Added mcpHost function to construct MCP URL.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
- Introduced a new script for live torrent checks, validating TorrServer functionality.
- Added end-to-end tests for live torrents and settings using Playwright.
- Enhanced CI workflow to include internationalization checks and Playwright Chromium installation.
- Updated package.json to include new test commands for end-to-end testing.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
- Added JacRed indexer support with corresponding tests for popular search queries.
- Updated live torrent check script to include JacRed indexer functionality.
- Enhanced end-to-end tests to validate JacRed integration and search results.
- Refactored settings to utilize JacRed constants for improved maintainability.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
- Integrated a new versioning system to set a canonical User-Agent for HTTP requests.
- Updated the Telegram HTTP client to use the custom User-Agent.
- Modified Torznab requests to include the User-Agent from the versioning system.
- Added tests to validate User-Agent functionality and ensure proper request headers.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
- Modified search queries to include "matrix 1999" for improved accuracy in tests.
- Refactored test cases to utilize the updated search queries.
- Enhanced end-to-end tests to reflect changes in search query structure.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
@pavelpikta pavelpikta changed the title feat: HeroUI web client, StreamWA, and GoReleaser releases feat!: HeroUI web client, StreamWA, and GoReleaser releases Sep 3, 2026
@pavelpikta
pavelpikta changed the base branch from master to nextgen September 3, 2026 20:22
@tsynik
tsynik deleted the branch YouROK:nextgen September 3, 2026 20:27
@tsynik tsynik closed this Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.