timothy and Claude Opus 4.8
dfed9a393b
fix(68): rebuild on-demand channel guide (and mirrors) on thaw
...
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 10s
PR Gates / Docs update reminder (pull_request) Successful in 15s
PR Gates / decisions lifecycle (pull_request) Successful in 27s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 1m19s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 1m26s
Build ErsatzTV Image / Functional E2E (curl contracts) (pull_request) Successful in 14m38s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 17m52s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 7m25s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
An on-demand channel (`PlayoutMode.OnDemand`) already is the "resume where I
left off" feature: `Playout.OnDemandCheckpoint` persists the viewer's position
and `PlayoutTimeShifter.TimeShift` slides the materialized timeline forward on
tune-in so the paused item is active again. Because it rewrites `GuideStart`/
`GuideFinish` alongside `Start`/`Finish`, guide and playback freeze together —
structurally avoiding the free-running-wall-clock desync #68 was filed about.
The one gap: `TimeShift` rewrote the stored `PlayoutItem` rows but the XMLTV
guide is served from a cached fragment that only `RefreshChannelData` rebuilds,
and the tune-in path never enqueued it. So an external EPG client polling after
a thaw could see a stale timeline until the next incidental rebuild.
Fix: `IPlayoutTimeShifter.TimeShift` now returns the channel numbers whose cached
guide is stale — the shifted channel plus any channels that mirror it (the same
fan-out `BuildPlayoutHandler` already does) — and `TimeShiftOnDemandPlayoutHandler`
enqueues a `RefreshChannelData` for each on `CancellationToken.None` (post-commit
side effect must not be abandoned if the session token cancels).
Tests: handler enqueues a rebuild per stale channel (+ mirror + no-shift cases);
`PlayoutTimeShifter` reports source+mirrors on a shift, empty on Continuous /
zero-offset / active-unforced, and correctly seeds+shifts a never-watched playout.
Non-vacuity of the enqueue proven by a compiling negative control.
Docs: channels.md (On-demand resume section), domain-model.md, decisions.md
(scheduling.ondemand-guide-refresh-on-thaw). Per-viewer resume is out of scope
(single per-channel checkpoint; #68 says per-channel suffices).
fixes #68
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-21 19:12:42 +02:00
Jason Dove and GitHub
4fa11b6943
add scheduling context to playout details table ( #2817 )
...
* add scheduling context to playout details table
* fix missing context copies
2026-02-05 13:45:05 -06:00
Jason Dove and GitHub
2f0cd1eb6c
update dependencies ( #2726 )
2025-12-19 13:56:26 -06:00
Jason Dove and GitHub
ec0d8ea6ac
work around sequential schedule validation limit ( #2655 )
...
* remove readalltext
* remove unused method
* remove fileexists
* remove folderexists
* remove readalllines
* remove fake local file system
* show playlist name in playout build errors
* add basic sequential schedule validator tests
* work around sequential schedule validation limit
2025-11-24 12:08:43 -06:00
Jason Dove and GitHub
245165c9d9
add rerun collection type ( #2421 )
...
* rename collection type
* split collections into separate pages
* add rerun collection types, migration, editor
* add rerun to classic schedule items
* rerun plumbing in classic playout builder
* start to implement rerun enumerator
* add scheduledAt to enumerator movenext
* maintain rerun history in db
* fix shuffle
* fix rerun allowed playback orders
* fix updating rerun collections
* update changelog; fix editing
* update changelog
2025-09-15 18:27:55 +00:00
Jason Dove and GitHub
1c07df5bc3
use cancellation tokens in many places ( #2350 )
...
* use cancellation tokens everywhere
* more cancellation tokens
2025-08-27 03:20:35 +00:00
Jason Dove and GitHub
e06ee54070
rename yaml playout to sequential schedule ( #2335 )
...
* clarify some schedule and playout terms
* more renaming
2025-08-23 14:27:32 +00:00
Jason Dove and GitHub
5d081ceeff
fix editorconfig and run code cleanup ( #2324 )
...
* fix formatting rules
* reformat ersatztv
* reformat ersatztv.application
* reformat ersatztv.core
* refactor ersatztv.core.tests
* reformat ersatztv.ffmpeg
* reformat ersatztv.ffmpeg.tests
* reformat ersatztv.infrastructure
* cleanup infra mysql
* cleanup infra sqlite
* cleanup infra tests
* cleanup ersatztv.scanner
* cleanup ersatztv.scanner.tests
* sln cleanup
* update dependencies
2025-08-16 14:44:48 +00:00
Jason Dove and GitHub
3f247288d3
fix on demand for block and yaml schedules ( #2290 )
2025-08-10 00:50:59 +00:00
Jason Dove and GitHub
a4b485f562
add yaml validation tool ( #2259 )
...
* reorganize troubleshooting page
* add yaml troubleshooting tool
2025-08-05 03:07:26 +00:00
Jason Dove and GitHub
16dd2c2d81
add yaml import section ( #2248 )
2025-08-04 02:21:56 +00:00
Jason Dove and GitHub
093abf7ad8
add yaml playout pre_roll instruction ( #2228 )
...
* add yaml playout pre_roll instruction
* add basic yaml validation
* validate all yaml playout content items
* fix yaml to json conversion
* update changelog
2025-08-01 15:20:10 +00:00
Jason Dove and GitHub
7e30444857
dependencies and code cleanup ( #2117 )
...
* fix validation in new form layout
* pin mediatr to last oss version
* update dependencies
* cleanup code in core
* cleanup code in ffmpeg
* cleanup code in infra
* cleanup code in scanner
* cleanup code in application
* cleanup main code
* cleanup test code
* solution-wide code cleanup
2025-07-06 15:56:17 +00:00
Jason Dove and GitHub
a87ec2d75d
cleanup ( #1708 )
...
* fix blazor naming
* code cleanup
* update dependencies
2024-05-06 17:00:52 -05:00
Jason Dove and GitHub
c46b3787d8
set guide mode filler as appropriate on playlist items ( #1691 )
2024-04-27 20:31:03 -05:00
Jason Dove and GitHub
c18be5559b
fix delete old segments ( #1536 )
...
* code cleanup
* ignore errors deleting old hls segments
2024-01-04 10:42:04 -06:00
Jason Dove and GitHub
9471cb55dd
upgrade from dotnet 7 to dotnet 8 ( #1529 )
...
* upgrade sdk
* fix warnings in ersatztv.ffmpeg
* fix warnings in ersatztv.core
* fix warnings in ersatztv.infrastructure
* fix warnings in ersatztv.application
* disable analysis for migrations projects
* fix warnings in ersatztv.scanner
* fix warnings in ersatztv
* upgrade project framework
* update github actions and dockerfiles
2023-12-30 13:29:57 -06:00
Jason Dove and GitHub
97674cff89
fix bug scheduling duration filler ( #1510 )
2023-11-20 21:02:26 -06:00
Jason Dove and GitHub
f929dc92d1
update dependencies; code cleanup ( #1357 )
...
* update dependencies
* code cleanup
2023-08-07 09:34:25 -05:00
Jason Dove and GitHub
015f5e9798
fix playout build loop that was recently introduced ( #1318 )
2023-06-22 09:40:20 -05:00
Jason Dove and GitHub
c148f2eb11
fix discard to fill calculation ( #1308 )
2023-06-17 05:11:08 -05:00
Jason Dove and GitHub
d490cc6f4b
dont give up on scheduling filler while some should fit ( #1306 )
2023-06-14 16:58:37 -05:00
Jason Dove and GitHub
99bd827bd9
fix multi episode shuffle ( #1305 )
2023-06-14 16:40:18 -05:00
Jason Dove and GitHub
e8cbcc935f
rework pad and duration filler ( #1304 )
2023-06-14 15:54:41 -05:00
Jason Dove and GitHub
5da2bdbab4
add duration discard to fill attempts ( #1301 )
2023-06-13 17:02:31 -05:00
Jason Dove and GitHub
03df2a6c8a
overdue code cleanup ( #1271 )
2023-05-10 13:18:18 -05:00
Jason Dove and GitHub
2ccba9e476
timeout playout builds after 2 minutes ( #1269 )
...
* add cancellation token support to playout builds and collection enumerators
* fix playout bug with shuffle in order
* update changelog
2023-05-08 11:53:02 -05:00
Jason Dove and GitHub
a684dcced9
scheduling bug fixes ( #1238 )
2023-04-11 09:22:51 -05:00
Jason Dove and GitHub
c9bd94d9f8
use javascript instead of lua for external scripts; add audio stream selector scripts ( #1005 )
...
* use js instead of lua
* update dependencies
* add audio stream selector script for episodes
* add audio stream selector script for movies
* update changelog
2022-10-28 17:05:07 -05:00
Jason Dove and GitHub
88f4d8074a
fix stream_seek type ( #988 )
...
* fix stream seek type
* cleanup
2022-10-09 21:20:34 -05:00
Jason Dove and GitHub
f5aa2fcac8
add multi-episode shuffle playout order ( #987 )
2022-10-09 10:49:07 -05:00