Repository navigation
Conversation
…ad channels after an edit - Recently Viewed: a local touch matched rows by normalized id only. Stalker numbers live channels and VOD separately, so watching movie 42 after live channel 42 replaced the channel's row and inherited its fields; a leftover `radio` or `series_id` then reopened the movie as a radio station or a series. A touch now takes over a row only of a compatible kind (from stalkerFavoriteReference); untyped older rows still match by id. - Resume: StalkerVodPlaybackController (search, Favorites, Recent and dashboard collections) and the series view kept their own copy of the 15 s save throttle without the resume latch the shared createInlinePlaybackPositionWriter has, so the ~0 s timeupdate an engine reports before reaching startTime overwrote the position being resumed from. Both now use the shared writer, as the catalog detail and Xtream do. - Live TV channels: StalkerItvCacheService keyed its session cache by the playlist id. Editing the source's portal URL, MAC or credentials keeps the id, so Live TV kept serving the previous account's channel list (and its cmds, sent to the new portal) and an `unsupported` verdict until a manual refresh or restart. The key now adds stalkerSessionFingerprint, so an edited connection loads its own list. The unified Recent collection built local Stalker uids from the id alone, so promoting one of two same-id rows removed the other from the list; it now uses the typed reference uid that synced history already used.
[Medium impact] The PR appears safe to merge; no actionable new issues were found. SummaryThis PR keeps Stalker history rows separate when different content kinds share an ID.
No actionable new issues were found. Reviews (5) · Last reviewed commit: "Merge master into Stalker fixes for PR #..." · Reviewed by Greptile |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #2236 +/- ##
=========================================
Coverage ? 81.91%
=========================================
Files ? 1904
Lines ? 101641
Branches ? 24856
=========================================
Hits ? 83255
Misses ? 11102
Partials ? 7284
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. |
What changed
Three Stalker fixes.
mutatePlaylistHistory,libs/services/src/lib/playlist-history.ts) now takes over an existing row only if the ids match and the kinds are compatible: live, radio, movie or series, fromstalkerFavoriteReference. Rows of unknown kind, such as older untyped snapshots, still match by id alone. Episodes of one series still collapse into one row.StalkerVodPlaybackController(search, Favorites, Recent and dashboard collections) and the series view now save through the sharedcreateInlinePlaybackPositionWriter, like the catalog detail and Xtream. Each previously had its own 15 s throttle without the writer's resume latch.StalkerItvCacheServicekeys its session cache by the playlist id plusstalkerSessionFingerprint(portal endpoint, MAC/device identity, credentials), instead of the id alone.Docs:
docs/architecture/stalker-portal.mdcovers the recent kind rule and typed uid, the shared writer, and the cache key.Why
radioorseries_idthen reopened the movie as a radio station or a series.timeupdateat about 0 s before its seek tostartTimelands, and the old throttles saved that.cmds went to the new portal.unsupportedverdict also stayed in force until a manual refresh or a restart.Release note
.changes/(stalker-recent-resume-and-channels.md)Checks
pnpm nx lintand the affectedpnpm nx test <project>passNew tests, each failing before the fix:
playlist-history.spec.ts(new):radio;unified-recent-data.service.spec.ts: same-id live channel and movie get distinct uids. The existing radio case now expects the typed uid.stalker-vod-playback-controller.spec.tsandstalker-series-view.resume.spec.ts: a 0.4 s update beforestartTimeis not saved; the first update at the resume point is.stalker-itv-cache.service.spec.ts:unsupportedverdict does not carry over to another portal URL.Run locally:
pnpm nx test:portal-stalker-feature587/587,portal-stalker-data-access747/747,portal-shared-data-access351/351 andportal-shared-ui266/266.pnpm nx test services: 1527/1528. The one failure ("DatabaseService browser guards") fails the same way on unmodified master under the local Node 26;.nvmrcpins 24.stalker-lazy-vod6/6,stalker-hide-watched2/2 andstalker-playback-headers2/2.stalker.e2e.ts(Chromium): 35/35.pnpm nx linton the touched projects,pnpm run typecheck:webandpnpm run release:notes:validate: pass.Known follow-ups, deliberately left out: