PlaceholderDiscovery re-verified TV items via isPlaceholderItem() which
returns false during library-level scans (no Children metadata in Plex
response). The marker file on disk already proves it's an Agregarr-created
placeholder, so trust that instead of re-checking a broken API path.
Also: find S00E00 by episode index not array position, and use async
placeholder detection in the orphan scan for definitive TV identification.
Ref #414
Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
Plex returns seasons as Children.Directory (not Children.Metadata)
when using ?includeChildren=1. All placeholder detection code only
checked Children.Metadata, so isPlaceholderItem() always returned
false for TV shows — skipping title fixes and triggering false
cleanup of valid placeholders.
Added Metadata || Directory fallback across all detection paths,
type casts, and getChildrenMetadata() API helper.
Fixes#414
Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
Movie placeholder labels were only re-applied by Coming Soon collections,
so movies in other collection types (Letterboxd, IMDB, Trakt, etc.) could
permanently leak into filtered hubs if the initial label application failed.
TV placeholder title fixes returned false on timeout but the result was
never checked, giving no visibility into failures.
- Re-apply trailer-placeholder label for all movie placeholders during
global discovery pass
- Log warnings when episode title or movie label application fails
- Track failure counts in discovery summary logs
Relates to #414
Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
The date window filtering in enrichWithTMDBReleaseDates() was removing items
before includeAllReleasedItems could preserve them. Now passing skipDateFilter
param to bypass filtering when includeAllReleasedItems is true for non-Coming-Soon
collections.
- Added skipDateFilter param to enrichWithTMDBReleaseDates()
- Skip movie/TV date window filtering when skipDateFilter is true
- Fail-open on TMDB fetch errors when skipDateFilter is true
- PlaceholderCreation passes skipDateFilter based on config
Fixes#336
Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
add "Include all released items" toggle, fix orphaned cleanup to use fixed 7-day grace period, fix
placeholder quick sync deleting tv items, other minor changes
re #336, re #268, re #253, re #307
* fix: skip directories when cleaning orphaned placeholder files
Jellyfin creates .trickplay directories with the same base name as video
files. The cleanup scan matched these directories because they contain
{edition-Trailer} in the path, then failed with EISDIR when attempting
fs.unlink() on them.
Added a stat check to skip non-file entries during orphaned file cleanup.
* fix: remove trickplay directories when deleting placeholders
When Jellyfin scans placeholder videos, it creates .trickplay directories
for video thumbnail scrubbing. These become orphaned when the placeholder
is deleted.
Now removePlaceholder() cleans up the associated .trickplay directory
using fs.rm() with recursive option.
---------
Co-authored-by: bitr8 <bitr8@users.noreply.github.com>
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