Commit Graph

229 Commits

Author SHA1 Message Date
Tom Wheeler 5e33c6167d fix(item-ordering): add A-Z and Z-A sort order options
fix #341
2026-01-11 08:08:17 +13:00
Tom Wheeler 44e6c163f9 fix(letterboxd): add support for /{user}/films/ URL's
fix #311
2026-01-11 08:06:27 +13:00
Tom Wheeler 1c21a0e7b2 feat(sort-order): add release date and date added to plex as sort order options
also refactors overseerrSync to use Plex Lookup

fix #187, fix #203
2026-01-11 07:42:34 +13:00
Tom Wheeler da1095f947 fix(overlays): add networks context
fix #286
2026-01-10 12:12:35 +13:00
Tom Wheeler 8073c3418c fix(plex-libraries): fixes non-movie/show libraries being discovered inconsistently
fix #255
2026-01-10 00:47:24 +13:00
Tom Wheeler 3aadbf0b44 feat(overlays): add Plex User Rating condition/variable
fix #254
2026-01-09 23:36:12 +13:00
Tom Wheeler 5ae10be8ce fix(collections-quick-sync): add overseerr and tmdb autoFranchise support. refactor to use ratingKey
refactors collection-missing-item schema to use plex ratingKey as primary key, allowing for support
for configs that create multiple collections

fix #295
2026-01-09 18:11:42 +13:00
Tom Wheeler 15d343e8ee feat(overlays): add exists (null) boolean condition
fix #285
2026-01-09 01:50:23 +13:00
Tom Wheeler d32c041faf feat(overlays): add daysSinceAdded and daysSinceLastPlayed variables
fix #315
2026-01-09 01:45:57 +13:00
bitr8 4541ea145c fix(collections): surface per-collection sync errors to UI (#321)
Collection sync errors were being logged server-side but not surfaced
to the UI, leaving users with blank error messages when multi-source
collections failed to process.

- Added lastSyncError and lastSyncErrorAt fields to CollectionConfig
- MultiSourceOrchestrator now returns error in sync result
- CollectionSyncService persists errors and doesn't mark failed syncs as successful
- Settings methods to set/clear per-collection errors
- Individual sync route also handles and persists errors

Fixes #299

Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
2026-01-06 18:43:09 +13:00
bitr8 027bf11474 fix(logging): downgrade library mismatch message to debug level (#305)
The "Target library X not found or is not a movie/TV library" message
was logged at warn level, but this is a normal scenario when a collection
targets a specific library type. This caused log spam during syncs.

Fixes #265

Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
2026-01-05 23:46:28 +13:00
bitr8 5a19db7efe fix(overlays): use uniform scaling for non-standard poster aspect ratios (#306)
Posters with non-standard sizes (e.g., 1000x1426 instead of 2:3 ratio)
caused overlay elements to drift outside poster edges due to separate
X/Y scaling.

Changed to uniform scaling with centering offsets:
- `scale = Math.min(scaleX, scaleY)` ensures overlays stay within bounds
- Offsets center the template area on non-standard posters
- Updated all render methods for consistency
- Recalculate dimensions after safety resize

Fixes #297

Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
2026-01-05 23:38:42 +13:00
Tom Wheeler 8e105d93c2 fix(collection-posters): exclude items without tmdb poster path in content grid
fix #288
2026-01-05 23:30:37 +13:00
Tom Wheeler e2ebf90db4 fix(placeholders): ensure placeholder days ahead is respected for non-coming soon collections
re #253, re #268
2026-01-05 23:16:36 +13:00
Tom Wheeler 9788b43fe6 chore(placeholders): fix form validation for placeholder root folders 2026-01-05 23:16:33 +13:00
Tom Wheeler fecdfb8bba feat(placeholders): placeholder folders can now be created per-library
changes from global movie/tv root folders to per-library, including migration

fix #251, fix #252
2026-01-05 01:54:33 +13:00
bitr8 70eb9091cf fix(overlays): return episodeNumber from fetchReleaseDateInfo for countdown overlays (#302)
The episodeNumber field was being extracted from TMDB's next_episode_to_air
but not included in the return object, causing {episodeNumber} in overlay
templates to always show 1 (from Plex item.index) instead of the upcoming
episode number.

Fixes #290

Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
2026-01-05 01:30:25 +13:00
Tom Wheeler 9395447089 fix(placeholders): ensure movie placeholder parent folders are deleted on cleanup 2026-01-04 15:52:41 +13:00
Tom Wheeler af701fc045 fix(placeholders): add check for plex poster, apply TMDB poster if not present 2026-01-04 14:05:18 +13:00
bitr8 5daf4fe78e fix(collections): filter daily shows from Coming Soon collections (#278)
Skip series with seriesType='daily' (soaps like EastEnders, Coronation Street)
as they always have upcoming episodes which pollutes the collection.

Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
2026-01-03 22:15:40 +13:00
bitr8 37591405ef perf(overlays): add TMDB poster caching and fix race conditions (#277)
P0 Critical fixes:
- Add TMDB poster file cache with 7-day TTL (reduces API calls by ~99%)
- Add per-job TMDB URL cache with Promise coalescing for concurrent requests
- Add per-library mutex lock to prevent concurrent overlay processing
- Fix variable shadowing where passed tmdbId was ignored

P1 High priority fixes:
- Fix silent failure path - propagate errors from base poster failures
- Add cache cleanup at job start to prevent stale data

P2 Medium priority fixes:
- Fix neq condition evaluation for undefined/null fields
- Handle rejected promises in URL cache (remove on failure)

---------

Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
Co-authored-by: Tom Wheeler <thomas.wheeler.tcw@gmail.com>
2026-01-03 22:14:12 +13:00
Basti Qdoba cc9dc828d1 feat(overlays): add Radarr/Sonarr tag support for overlay conditions (#276)
Enables users to conditionally apply overlays based on Radarr/Sonarr tags.
Allows dynamic overlays based on audio languages or custom tagging schemes.

Implements feature request #272
2026-01-03 19:02:20 +13:00
Tom Wheeler c30692ce0c fix(placeholders): fixes Days Ahead not being respected
fix #253, fix #268
2026-01-02 13:48:20 +13:00
Tom Wheeler 21b65fef1b chore(overlays): comment out metacritic in (future implementation)
re #250
2026-01-02 13:24:14 +13:00
Tom Wheeler b2b7e3f3f3 fix(tmdb auto-franchise): add grab missing item
fix #205
2026-01-02 04:20:09 +13:00
Tom Wheeler 74e4dabe49 fix(missing item filtering): fixes country/language exclusions
removes deprecated functions and fields

fix #262
2026-01-01 18:20:53 +13:00
Tom Wheeler 424c8f2347 fix(missing items filtering): adds RT audience as missing item filter
fix #246
2026-01-01 09:03:57 +13:00
Tom Wheeler a3fec4027f fix(tmdb posters): language option can now be selected per-library
fix #220
2026-01-01 07:36:44 +13:00
Tom Wheeler b2e645bc95 fix(overlays): add backend support for DoVi, add preset for HDR and DoVi
fix #183
2025-12-31 10:44:57 +13:00
Tom Wheeler 553e99a8a0 fix(api): fix caching of api clients causing settings to not reflect in sync 2025-12-26 08:22:39 +13:00
Tom Wheeler 858f7934a6 feat(overlays): add support for overlays based on maintainerr action
fix #233
2025-12-24 12:29:45 +13:00
Tom Wheeler ea2d07b74a fix(overlays): add date formatting options for nextSeasonAirDate
fix #231
2025-12-24 00:24:18 +13:00
Tom Wheeler 162926a798 fix(imdb): fix tvMovie media type being categorised as tv
fix #229
2025-12-24 00:16:59 +13:00
Tom Wheeler 376d83c1a2 fix(sync): prevent collections sync and overlays sync running concurrently 2025-12-23 23:51:18 +13:00
Tom Wheeler 5640152859 fix(overlays job): migrate old default job to 3am default to avoid conflitc with collections sync 2025-12-23 23:50:40 +13:00
Tom Wheeler 192ed954f8 fix(overlays): adds condition for gap in awaiting download preset template 2025-12-23 23:33:56 +13:00
Tom Wheeler 4900554cc1 fix(placeholders): extract placeholder functions, refactor sources, overlays fixes
extracts PlaceholderServices.ts functions into separate files, adds youtube cookies support.
refactor backend services into more logical structure. overlays fixes including episode titles,
other minor fixes
2025-12-23 23:31:27 +13:00
Tom Wheeler 136d0e92f3 fix(overlays): ensure poster is locked 2025-12-21 15:37:22 +13:00
Tom Wheeler 10a43afd0b fix(placeholders): fix placeholders being deleted incorrectly 2025-12-21 04:41:24 +13:00
Tom Wheeler f2e310dc98 fix(migration): moves app migration to inline typeORM
causing failed migration to v2.0.0 when the app migration had failed to convert to unified elements

fix #215
2025-12-20 12:58:40 +13:00
Tom Wheeler 4bcd1cc2c1 fix(multi source): fixes incorrect library type 2025-12-19 17:15:06 +13:00
Tom Wheeler 2cb7d07c91 fix(placeholders): fix incorrect parsing of path from plex
resulting in placeholders failing to be deleted
2025-12-19 16:14:19 +13:00
Tom Wheeler 57e3c5a804 fix(overlays): enable per library overlays sync
fix #218
2025-12-19 09:22:10 +13:00
Tom Wheeler c5af8b4226 fix(overlay editor): add text opacity for overlays 2025-12-18 22:40:35 +13:00
Tom Wheeler 6333c1a7a5 feat(overlays): add overlays test modal, allowing testing of indivdual items
displays matching overlays and raw variables

fix #212
2025-12-18 17:45:56 +13:00
Tom Wheeler 0bcd709a80 fix(titles): fix some title variables not working correctly 2025-12-18 16:39:31 +13:00
Tom Wheeler 173b35358b fix(networks): fixes multi-source networks not showing in preview
fix #209
2025-12-18 13:17:57 +13:00
Tom Wheeler c581536745 fix(overlays): update coming soon preset to include upcoming seasons 2025-12-18 13:17:57 +13:00
Tom Wheeler 788371c0f0 fix(placeholders): ensure placeholders are cleaned up in various scenarios 2025-12-17 22:37:54 +13:00
Tom Wheeler 5b0023de68 fix(filtered hubs): adds recently released episodes filtered hub 2025-12-17 19:45:17 +13:00