Skip to content

Release v1.6.3: decouple DMs from channel announcements, fix season artwork - #135

Merged
retardgerman merged 23 commits into
mainfrom
dev
Oct 23, 2026
Merged

retardgerman merged 23 commits into
mainfrom
dev

Conversation

@retardgerman

@retardgerman retardgerman commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Fixes Separate "DM when request is available" from "Announce all new media in channel" #134: disabling a channel announcement no longer silently disables "Send PM when request is available". Both now work independently.
  • New "Announce new movies/series in channel" dashboard checkboxes let you turn off channel posts for movies or series without affecting DMs. The real-time webhook path now honors them too.
  • Fixes buildIdentityKey uses an item's own TMDB id as the series identity for Season/Episode keys #126 (via fix: use parent series metadata for season notifications #131, thanks @Lurk390): season and episode notifications no longer show artwork from an unrelated show. This works on the webhook, polling and WebSocket paths, and also fixes "Send PM when request is available" for seasons and episodes.
  • Duplicate protection for series is now tracked per episode/season: quality upgrades don't re-announce anything, while new episodes of a known show still get announced. Existing history carries over; items without their own TMDB ID may be announced once more if their file is replaced.
  • Security: the Coloris color picker is pinned to v0.25.0 with Subresource Integrity instead of loading @latest from the CDN.
  • Security: dependencies updated to clear all known npm audit advisories, including issues in undici, joi, axios and proxy-addr. No configuration change needed.

Lurk390 and others added 2 commits September 19, 2026 14:25
Resolves the import conflict in jellyfinWebhook.js: keeps both the
isDiscordLinkableUrl import from dev and the notificationMetadata
imports from this branch.
Channel-announcement and DM logic lived in one function with bare
early returns, so disabling channel notifications for a content type
silently also skipped the "request available" DM. Add independent
JELLYFIN_NOTIFY_MOVIES/SERIES channel toggles (already existed as
config keys but were only honored by the poller, never the webhook
path) and restructure processAndSendNotification so the DM block
always runs regardless of the channel-announce outcome.
- Help text pointed "above" at NOTIFY_ON_AVAILABLE, which is actually
  further down the page than the new movie/series toggles.
- Trim multi-line rationale comments per project convention (the why
  belongs in the PR description, not the code).
The CI audit job gates the Docker build via `needs: audit`, so the
failing `npm audit --audit-level=high` also blocked the dev image from
being published. All 8 advisories (2 high, 6 moderate) were already
fixed in versions the existing ranges in package.json allow, so the
lockfile was simply stale. package.json is unchanged, including the
undici override, which never was the blocker.
… and burst entries

- Resolve parent series provider IDs inside processAndSendNotification so the
  poller and WebSocket paths get the fix too, not only the webhook.
- Drop the legacy sentNotifications rekey: series:tmdb:<child ID> can collide
  with a real series and hand its entry to the wrong show.
- Track permanent dedup per item (item:<identity>) and keep the series-level
  entry as a 1h burst window (burst:<seriesKey>). With the corrected series
  key, a single 5-year series entry would have blocked every later episode.
- Season and episode test payloads carry the series ID as SeriesProvider_tmdb.
- Fall back to the series IMDb ID for children when TMDB has none.
- Persist item dedup keys only after the batch was actually sent, and record
  items covered by an already-sent higher-level post.
- Send season/episode payloads without SeriesId once and stop, instead of
  falling through into the debouncer when no response object is passed.
- Validate SeriesId, prune expired entries from the series metadata cache,
  cache a missing TMDB ID only for 15 minutes, and say in every fallback
  warning what the user loses.
- Log which key matched when a duplicate is suppressed via legacy history.
- Each debouncer closure keeps a reference to its own batch and takes the
  item keys present at send time, so a late trailing call can neither persist
  a newer batch's keys nor delete its entry.
- Blocked items are only marked as sent when the post covered them: a series
  post covers everything, a season post only episodes of its seasons.
- Only skip the Jellyfin lookup when the payload already has a series TMDB ID.
fix: use parent series metadata for season notifications
npm audit --audit-level=high started failing in CI after new advisories
for axios (high) and proxy-addr (critical). Both fixes are within the
existing version ranges, so only the lockfile changes.
@retardgerman retardgerman changed the title Release v1.6.3: separate DM-on-available from channel announcements Release v1.6.3: decouple DMs from channel announcements, fix season artwork Oct 16, 2026
Node.js 18 (Docker image) and 20 (CI) are end of life and get no fix for
the Brotli vulnerability CVE-2026-111497. Node.js 22 keeps the
linux/arm/v7 image, which Node.js 24 no longer provides.
Node.js 22 crashes with "Illegal instruction" when npm ci runs under QEMU
arm64 emulation on the CI runner. Dependencies are pure JavaScript, so
they are now installed in a build stage on the native build platform and
copied into each target image.
@retardgerman
retardgerman merged commit 038b8a3 into main Oct 23, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants