Tags give the ability to mark specific points in history as being important
-
v1.4.0
protectedbd4704cd · ·v1.4.0 — sync stops un-marking watched episodes - The Jellyfin/Emby episode write path could reset a FINISHED episode to unwatched with a resume position, because the Series/Episodes queries lack the isPlayed=false filter the movie path has. Sync is additive; it never un-marks. - Series folders stopped matching across servers: path_suffix's two-component rule is right for episode files but a series folder's parent IS the library root, which is what differs between servers. Every show whose libraries are named differently synced no episodes at all. - Watch state was merged into the local picture before the write was known to have succeeded, so a failed write made the next server pair skip those items as "already synced". First test coverage for functions.py series handling, jellyfin_emby.py writes and main.py ordering — the files carrying all three. -
v1.3.0
protected42005b33 · ·v1.3.0 — the deletion guard now measures what it was supposed to Two more paths where the engine concluded "never watched" from data it never had, both data loss: - The guard compared collected data against CONNECTED servers, not configured ones. generate_server_connections returns the survivors of a connection failure, so an unreachable Plex produced "1/1 returned data — complete" and everything watched only on Plex became deletable. - Partial failures inside a server (a dropped shared user, a library that would not open) hid watch history while the scan still counted as complete. Cleanup thresholds are also validated now. CLEANUP_DELETE_AFTER_DAYS=0 meant flag and delete in the same scan; MAX_AGE=0 flagged the entire library. Both were accepted from the settings API while SLEEP_DURATION beside them was bounds-checked. -
v1.2.0
protected0e4954da · ·v1.2.0 — a stuck deletion stops being invisible An item that cannot be resolved to a single Radarr/Sonarr entry is refused, correctly, but was then refused again every hour forever with no counter, no alert and no dashboard surface. One movie sat eight days past its deletion date looking perfectly healthy. Failures are now counted per item with their reason, and escalate after three consecutive misses. The audit trail is written per deletion rather than batched, so a crash mid-batch can no longer leave media deleted with no record of it.
-
v1.1.0
protected5939c475 · ·v1.1.0 — the cleanup engine stops deleting media people have watched Six independent paths could answer "nobody watched this" when somebody had, and each ended in an irreversible file delete. - Cross-server identity: the merge keyed on the raw title string, so Plex's "Star Wars: The Mandalorian and Grogu" and Jellyfin's "The Mandalorian and Grogu" were two records — one holding every watch, one holding none. Now matched on tmdb/imdb/tvdb ids, which Jellyfin was already fetching and discarding. - Watched-with-no-play-date counted as never watched. - A missing Overseerr request date skipped the grace period entirely. - A lone *arr title match was accepted without comparing years, so the wrong film could be deleted. - "Requested & Unwatched Shows" could never fire ("tv" vs "show"). - Exclusions checked only one server's spelling, a config seed silently destroyed user-added protections, and legacy wildcards were dead rules. CLEANUP_EXCLUDE_CONTINUING was also a no-op for Plex shows: plexapi reports no status, so the engine now treats it as unknown and declines to delete a series it cannot confirm has ended.