Repository navigation
Releases: Generator/jellyfin-plugin-multify
Release list
v0.0.11
v0.0.10
-
TelegramMessageStore cleanup/disposal race (drop, don't dispose, per-key locks; shutdown guards)
-
MultifyTestService library names (shared CorrectLibraryInfo helper)
-
Telegram MarkdownV2 escaping scoped to known URL keys
-
DeepCopyDict nested-list gap; GetMediaType default fallback
-
Plugin test-data/docs variable parity (PluginVersion, SourceUrl)
-
Debounced Telegram store writes (version-tracked trailing save)
-
LibraryCache virtual-folder TTL cache (30s); bounded _notifiedItems eviction (48h)
-
Generic webhook destinations: Music Playback Started, Library Correction Test, Plugin Events
-
FAQ Secrets & Credentials section
-
Bump version to 0.0.10 (net10.0, Jellyfin 12.0)
v0.0.9
-
Hot-reload plugin configuration without server restart:
MultifySendernow readsMultifyPlugin.Instance.Configurationper call (likejellyfin-plugin-webhookWebhookSender) instead of injected stale instance;LibraryEventHostedService(Singleton) now resolvesIWebhookSender/DashboardAlertviaIServiceProvider.CreateScope()perItemAdded/ItemDeletedqueue item, soOnlySelected/AllExceptchanges apply instantly after UI Save (validated:Thunderbolts*private movie sent to Telegram id 3696 and Ntfy without restart after 15:48 save) -
{{LibraryName}}now correctly shows CollectionFolder (Private - Filmes04f64be…) instead of physical Folder (moviesa186…) viaCorrectLibraryInfo()path-prefix againstILibraryManager.GetVirtualFolders()(validated on generic webhookdcatchall forJurassic World RebirthandThunderbolts*) -
MdbListquota burn: per-keySemaphoreSlimsingle-flight + 1h negative cache for 404 inMdbListServiceprevents thundering herd on 1HzPlaybackProgressand re-query of invalid ids -
GetMediaTypeexact lower switch with Contains fallback for custom subclass names -
DeepCopyDictdeep-copies nestedIDictionary/IList, downgradedDEBUG-ENRICHtoLogDebug -
TelegramMessageStore: per-keySemaphoreSlim(GetKeyLock) makesGet→Edit/Send→Storeatomic, preventing duplicate messages;TelegramClientholds per-key lock for edit path -
Bump version to
0.0.9/0.0.9.0(build.yaml,Directory.Build.props) -
REPORT.md(catalog sanitizer report, no longer needed after 4-part version fix inv0.0.8)
v0.0.8
-
MDBList now queried only when a matched destination template actually references an MDBList variable (MdblistScore/ImdbRating/etc.) or SendAllProperties is set — prevents 1Hz PlaybackProgress hot-loop burning daily quota (4012 calls, 3016× 429 in log_20260908)
-
Library Filter
OnlySelectedblocking: normalize GUIDs (N vs D, case-insensitive) for LibraryId/UserId and resolve CollectionFolder vs physical Folder alias via VirtualFolders path prefix (AF92 Filmes vs F7E7 movies) -
Test notification fallback now respects LibraryFilter — sets LibraryId/LibraryName/Path to the filter's VirtualFolder instead of
N/A, so "Test" with a filter is actually sent -
ItemDeleted never sent: HandleItemRemoved now uses
e.Itemdirectly (upstream webhookItemDeletedHandlerpattern) and skips virtual items —GetItemByIdafter removal always returned null -
Packaging: normalize version to 4-part (0.0.8 -> 0.0.8.0) and validate version matches sourceUrl tag per catalog REPORT.md — prevents 0.0.6.0 vs v0.0.7 mismatch
-
MultifySender reuses matched destination lists for MDBList guard and send phase to avoid double LINQ enumeration
-
FilterService now optionally injects ILibraryManager for path-based library resolution
-
REPORT.md added with catalog sanitizer analysis
v0.0.7
-
Telegram edit-on-duplicate: when the same item (matched by TmdbId) is notified again, the existing Telegram message is edited instead of sending a new one.
-
Ignore Trailer items from all notification types.
-
Defer ItemAdded/ItemUpdated notifications via an internal queue until remote metadata is available, so messages are no longer sent before Jellyfin populates details.
-
Readiness check now requires a real content field (Overview, Genres, OfficialRating, or CommunityRating) in addition to a provider ID, preventing "(Unknown)"/"N/A" placeholders in sent messages.
-
Map MDBList "tomatoes" source to RottenTomatoesRating so Rotten Tomatoes ratings populate correctly.
-
Removed manifest.json from the main branch.
-
Revised README for installation and message customization.
v0.0.6
-
SubtitleDownloadFailureNotifier— new Subtitle Download Failure notification type -
Playback data template variables (play method, position, volume, playback bitrate) via shared
PlaybackBitrateService -
Stream info and metadata variables (VideoCodec, AudioCodec, VideoResolution, VideoRange, Framerate, AudioChannels, SubtitleLanguages, Width/Height, PlayCount, IsFavorite, Played)
-
People variables (Director, Writers, CastList, CastJson)
-
Parent poster URLs: SeasonPoster, SeriesPoster, TmdbSeasonPosterUrl, TmdbSeriesPosterUrl
-
TMDB image URL enrichment via
IProviderManager(replaces custom TmdbService), including test-notification flow -
PhotoUrlTemplateoptions for Gotify and ntfy destinations -
Select All / Select None buttons on Item Type checkboxes
-
Real library items used for test notifications with realistic fallback
-
UserDataServicefor per-user PlayCount/IsFavorite/Played/UserRating -
Version bump to 0.0.6
-
MDBList authentication:
?apikey=query param instead of Bearer header; null score handling -
FormatResolutionbug for non-16:9 aspect ratios -
MarkdownV2 escaping: URLs skipped from escaping, un-escaped after template substitution, escaped values preserve formatting markers
-
Telegram: return API error description instead of generic 400; message editing only for ItemAdded/ItemUpdated
-
UserFilter/LibraryFilterchanged fromGuid[]tostring[]to fix JSON deserialization -
Generic webhook header/field pairing and malformed Content-Type handling
-
ntfy URL join double-slash, priority clamp (1-5), header hardening (RFC 2047 encoding)
-
LibraryCachesync dispose, timer leak, culture-awareToStringfor JSON (invariant) -
Release workflow: manifest branch history preserved; changelog now extracted from the annotated tag message into both the Jellyfin manifest and GitHub release body
-
scripts/package.py: numeric semver sort, prerelease sort order, Jellyfin 12.0 default target -
Numerous StyleCop/build errors and dead code removal across notifiers and services
-
Target framework
net9.0→net10.0for Jellyfin 12 compatibility -
Jellyfin NuGet packages to
12.*-*withtargetAbi12.0.0.0 -
Config UI to tabbed layout with section-based destination cards
-
Jellyfin ImageUrl template variables renamed (dropped 'Url' suffix)
-
Removed TVDB URLs,
OriginalLanguage, andHomePageUrltemplate variables -
Unused workflow files (build.yaml, publish.yaml, publish-unstable.yaml)