Commit graph

2859 commits

Author SHA1 Message Date
Christian Benincasa
7d2593403a
feat: add relative date search fields (#1796)
Some checks are pending
Build / build (push) Waiting to run
2026-04-20 15:34:30 -04:00
Christian Benincasa
6ef231c48d chore: fix up prettierignore file 2026-04-20 14:55:10 -04:00
Corey Vaillancourt
61033e51ca
fix: improve AddMediaSourceButton appearance in light mode (#1819)
Some checks are pending
Build / build (push) Waiting to run
2026-04-19 20:30:31 -04:00
Christian Benincasa
2c8dd5f059 fix: implement new subtitle extraction paths for new JF/Emby scanners
Some checks are pending
Build / build (push) Waiting to run
2026-04-19 09:20:30 -04:00
Christian Benincasa
5db34080a4 Merge remote-tracking branch 'origin/main' into dev 2026-04-16 13:56:44 -04:00
Christian Benincasa
307ebc9454 fix: download external subtitles as part of scanning 2026-04-16 13:54:52 -04:00
Christian Benincasa
5724999b28 fix: include subtitle streams in minted programs from PlexApiClient
Also explicitly excludes CC tracks that are embedded in the video stream
2026-04-16 12:18:21 -04:00
Christian Benincasa
70ceb60e47 chore: add claude command to resolve drizzle merge conflicts 2026-04-15 18:25:30 -04:00
Christian Benincasa
6bba2677e5 build: fix build - some old revert code still there 2026-04-15 13:53:14 -04:00
Christian Benincasa
1e543fe109 Merge remote-tracking branch 'origin/main' into dev 2026-04-15 13:52:05 -04:00
Christian Benincasa
9e592b1c6b refactor: bind FfmpegInfo in singleton scope 2026-04-15 07:47:30 -04:00
Christian Benincasa
cdf0eb99e8 fix: only create one instance of ChildProcessHelper per-FfmpegInfo 2026-04-15 07:46:13 -04:00
Christian Benincasa
515729d370 fix: run all transactions synchronously
This is a large scale refactor to run all DB transaction code
asynchronsouly. At it's core, better-sqlite3 is a synchronous DB
library. Newer versions disallow transaction code that returns Promises
completely. As such, we've been stuck on older code (and this is
blocking other things, like NodeJS version bumps because of binary
interface changes).

Here we translate all kysely transaction code to Drizzle, because only
the latter supports synchronous execution of queries. This includes a
ton of DB migration code, since changing that completely to something
Drizzle-first is a much larger undertaking that will be tackled in a
follow-up.

This change should unblock the following:
1. Bumping better-sqlite3
2. Bumping nodejs version bumps
3. Paves the way towards Drizzle-only migrations
4. Will allow us to switch over from sync => async results using Drizzle
   builders more easily in the future, should we decide to change the
underlying sqlite driver.
2026-04-14 21:37:25 -04:00
Christian Benincasa
9214fe44a7 fix: use wall-clock time for native stream 2026-04-14 17:09:29 -04:00
Christian Benincasa
30ff2f88fc fix: guide generation after initial server start should always happen 2026-04-14 17:08:33 -04:00
Christian Benincasa
3b814a716b docs: also add PBS backup exclusion for data.ms to FAQ 2026-04-14 11:29:47 -04:00
Christian Benincasa
a49099c4dc fix: rework native playback api types 2026-04-14 07:25:56 -04:00
Christian Benincasa
24af26d214 test: add more tests for session cleanup race (SessionManager) 2026-04-13 17:37:20 -04:00
Christian Benincasa
b45e7e471f test: add tests for the session cleanup race condition 2026-04-13 17:37:20 -04:00
Christian Benincasa
22fd0e4bc3 fix: do not silently fail when cleaning up previous stream direcvtory 2026-04-13 17:37:20 -04:00
Christian Benincasa
ce34bef8c5 fix: prevent playlist from referencing segments deleted by high-water mark
The segmentsToKeepBefore buffer could extend the playlist window below
   #highestDeletedBelow, causing the playlist to reference segment files
   that had already been deleted from disk. Clients requesting those
   segments would get 404s.

   Add a segmentFloor option to FilterBeforeSegmentNumber that acts as a
   hard lower bound for minSeg, and pass #highestDeletedBelow as the floor
   from HlsSession.trimPlaylist().
2026-04-13 17:37:20 -04:00
Christian Benincasa
19e8e60d9a fix: prevent delayed cleanup timer from deleting replacement HLS sessions
When endSession() stops a session, the run() loop exits asynchronously
   and unconditionally called scheduleCleanup(), setting a 15-second timer.
   If a new session was created for the same channel within that window, the
   old timer's cleanup handler would delete the new session from the map —
   causing 404s on subsequent playlist requests.

   Three fixes applied:
   - Cancel pending cleanup timers in Session.stop() so they never fire
     after the session is explicitly stopped
   - Skip scheduleCleanup() in HlsSession.run() when state is already
     'stopped' (the stop path already handled cleanup)
   - Guard 'cleanup' and 'stop' event handlers in SessionManager to verify
     the session in the map is the same instance before deleting
2026-04-13 17:37:20 -04:00
Christian Benincasa
0b65142666 revert: "fix: add high-water mark deletion to hls session"
This reverts commit 6a030f168b.
2026-04-12 19:19:05 -04:00
Christian Benincasa
d40e232960 chore: add vanilla settings and basic commands for claude 2026-04-12 14:00:00 -04:00
Christian Benincasa
fcb3ce8b09 Merge remote-tracking branch 'origin/main' into dev 2026-04-11 09:00:52 -04:00
Christian Benincasa
9ab26976c2 fix: backdate initial guide generation at startup 2026-04-11 09:00:32 -04:00
Christian Benincasa
b62507274d fix: include programs that start or end within requested guide date range 2026-04-11 08:23:35 -04:00
Christian Benincasa
3e7ef16e62 docs: add section on excluding data.ms from PBS 2026-04-11 08:14:47 -04:00
Christian Benincasa
96180dc22c Merge remote-tracking branch 'origin/main' into dev 2026-04-10 20:49:07 -04:00
Christian Benincasa
149e3f7129 chore: make husky commit-msg executable 2026-04-10 12:52:10 -04:00
Christian Benincasa
bee5f60857 chore: make husky pre-commit executable 2026-04-10 12:52:10 -04:00
Christian Benincasa
c95d8028a6 refactor: break up DB classes into focused repositories 2026-04-10 12:52:10 -04:00
Christian Benincasa
dee9abb8c6 feat: ability to sync custom shows with upstream source 2026-04-09 16:54:24 -04:00
Christian Benincasa
09ce8d4437 fix: split media source page from scanner settings
remove duplication of media source table
2026-04-09 16:41:42 -04:00
Christian Benincasa
c606fa1c86 fix: persist table sort settings in local storage 2026-04-09 16:41:42 -04:00
Christian Benincasa
c07da89b62 feat: ability to sync custom shows with upstream source 2026-04-09 15:48:51 -04:00
Christian Benincasa
9a6d1b2a0d Merge remote-tracking branch 'origin/main' into dev 2026-04-09 13:56:11 -04:00
Christian Benincasa
c9266d436f fix: properly handle asynchronous indexing when scanning plex collections 2026-04-09 13:47:34 -04:00
Christian Benincasa
013081475f refactor: log full error when subtitle download fails 2026-04-09 11:36:20 -04:00
Christian Benincasa
5182b577cd Merge remote-tracking branch 'origin/main' into dev 2026-04-08 22:47:55 -04:00
Christian Benincasa
b97531440c fix: do not leak FDs in local music scanner 2026-04-08 19:18:42 -04:00
Christian Benincasa
2c7fa22921 fix: manually trigger temp db migration file cleanup
otherwise it wont happen until exit
2026-04-08 17:34:34 -04:00
Christian Benincasa
65c7043e78 test: fix vaapi local tests 2026-04-07 14:59:41 -04:00
Christian Benincasa
df6fee4738 Merge remote-tracking branch 'origin/main' into dev 2026-04-07 14:55:50 -04:00
Christian Benincasa
9410efac7a fix: properly set child log levels on level change from UI 2026-04-04 08:19:49 -04:00
Christian Benincasa
1ab22ccc22 fix: explicitly set state=ok for DB updates and search indexing 2026-04-04 07:50:33 -04:00
Christian Benincasa
00d7d6bc90 docs: update run docs for nvidia compose 2026-04-03 09:52:44 -04:00
Christian Benincasa
61b2839a39 refactor: remove unused stream cache code 2026-04-03 08:25:44 -04:00
Christian Benincasa
18e84445b1 fix(qsv): ensure setpts filter is only run on software 2026-04-03 08:03:08 -04:00
Christian Benincasa
4e46aa5c9e fix: always set state = ok for newly minted groupings 2026-04-02 10:35:17 -04:00