[PR #12909] [MERGED] Don't try to prune images for virtual episodes. #13412

Closed
opened 2026-02-07 07:12:27 +03:00 by OVERLORD · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/jellyfin/jellyfin/pull/12909
Author: @revam
Created: 10/29/2024
Status: Merged
Merged: 10/31/2024
Merged by: @crobibero

Base: release-10.10.zHead: fix-prune-episode-images


📝 Commits (1)

  • b401943 Don't try to prune images for virtual episodes.

📊 Changes

2 files changed (+3 additions, -2 deletions)

View changed files

📝 CONTRIBUTORS.md (+1 -0)
📝 MediaBrowser.Providers/Manager/ItemImageProvider.cs (+2 -2)

📄 Description

Changes
Don't try to prune images for virtual episodes, since they don't have a containing folder path to look for metadata in. This was causing issues when attempting to refresh a library, series or episode with replace all and replace images enabled.

I also added myself to the contributors file since I've forgotten to do that in previous PRs.

Issues
Didn't make one, but it will prevent these kinds of stack traces from stopping a refresh or library scan when it tries to prune images for a virtual episode;

[XX:XX:XX] [ERR] [XX] MediaBrowser.Providers.Manager.ProviderManager: Error refreshing item
System.ArgumentNullException: Value cannot be null. (Parameter 'path1')
   at System.ArgumentNullException.Throw(String paramName)
   at System.IO.Path.Combine(String path1, String path2)
   at MediaBrowser.Providers.Manager.ItemImageProvider.PruneImages(BaseItem item, IReadOnlyList`1 images)
   at MediaBrowser.Providers.Manager.ItemImageProvider.RemoveImages(BaseItem item, Boolean canDeleteLocal)
   at MediaBrowser.Providers.Manager.MetadataService`2.RefreshMetadata(BaseItem item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
   at MediaBrowser.Controller.Entities.BaseItem.RefreshMetadata(MetadataRefreshOptions options, CancellationToken cancellationToken)
   at MediaBrowser.Controller.Entities.TV.Series.RefreshAllMetadata(MetadataRefreshOptions refreshOptions, IProgress`1 progress, CancellationToken cancellationToken)
   at MediaBrowser.Controller.Entities.Folder.RefreshAllMetadataForContainer(IMetadataContainer container, MetadataRefreshOptions refreshOptions, IProgress`1 progress, CancellationToken cancellationToken)
   at MediaBrowser.Controller.Entities.Folder.RefreshChildMetadata(BaseItem child, MetadataRefreshOptions refreshOptions, Boolean recursive, IProgress`1 progress, CancellationToken cancellationToken)
   at MediaBrowser.Controller.Entities.Folder.<>c__DisplayClass69_0`1.<<RunTasks>b__1>d.MoveNext()
--- End of stack trace from previous location ---
   at MediaBrowser.Controller.Entities.Folder.RunTasks[T](Func`3 task, IList`1 children, IProgress`1 progress, CancellationToken cancellationToken)
   at MediaBrowser.Controller.Entities.Folder.ValidateChildrenInternal2(IProgress`1 progress, Boolean recursive, Boolean refreshChildMetadata, Boolean allowRemoveRoot, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService, CancellationToken cancellationToken)
   at MediaBrowser.Controller.Entities.Folder.ValidateChildrenInternal(IProgress`1 progress, Boolean recursive, Boolean refreshChildMetadata, Boolean allowRemoveRoot, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.ProviderManager.RefreshCollectionFolderChildren(MetadataRefreshOptions options, CollectionFolder collectionFolder, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.ProviderManager.RefreshItem(BaseItem item, MetadataRefreshOptions options, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.ProviderManager.StartProcessingRefreshQueue()

Example of it attempting to prune the images of a virtual episode right before it will throw the above error;
image


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/jellyfin/jellyfin/pull/12909 **Author:** [@revam](https://github.com/revam) **Created:** 10/29/2024 **Status:** ✅ Merged **Merged:** 10/31/2024 **Merged by:** [@crobibero](https://github.com/crobibero) **Base:** `release-10.10.z` ← **Head:** `fix-prune-episode-images` --- ### 📝 Commits (1) - [`b401943`](https://github.com/jellyfin/jellyfin/commit/b401943b45000f47bfa7a9eb4e3a8e318f2ab5d9) Don't try to prune images for virtual episodes. ### 📊 Changes **2 files changed** (+3 additions, -2 deletions) <details> <summary>View changed files</summary> 📝 `CONTRIBUTORS.md` (+1 -0) 📝 `MediaBrowser.Providers/Manager/ItemImageProvider.cs` (+2 -2) </details> ### 📄 Description <!-- Ensure your title is short, descriptive, and in the imperative mood (Fix X, Change Y, instead of Fixed X, Changed Y). For a good inspiration of what to write in commit messages and PRs please review https://chris.beams.io/posts/git-commit/ and our documentation. --> **Changes** Don't try to prune images for virtual episodes, since they don't have a containing folder path to look for metadata in. This was causing issues when attempting to refresh a library, series or episode with replace all and replace images enabled. I also added myself to the contributors file since I've forgotten to do that in previous PRs. **Issues** Didn't make one, but it will prevent these kinds of stack traces from stopping a refresh or library scan when it tries to prune images for a virtual episode; ```log [XX:XX:XX] [ERR] [XX] MediaBrowser.Providers.Manager.ProviderManager: Error refreshing item System.ArgumentNullException: Value cannot be null. (Parameter 'path1') at System.ArgumentNullException.Throw(String paramName) at System.IO.Path.Combine(String path1, String path2) at MediaBrowser.Providers.Manager.ItemImageProvider.PruneImages(BaseItem item, IReadOnlyList`1 images) at MediaBrowser.Providers.Manager.ItemImageProvider.RemoveImages(BaseItem item, Boolean canDeleteLocal) at MediaBrowser.Providers.Manager.MetadataService`2.RefreshMetadata(BaseItem item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken) at MediaBrowser.Controller.Entities.BaseItem.RefreshMetadata(MetadataRefreshOptions options, CancellationToken cancellationToken) at MediaBrowser.Controller.Entities.TV.Series.RefreshAllMetadata(MetadataRefreshOptions refreshOptions, IProgress`1 progress, CancellationToken cancellationToken) at MediaBrowser.Controller.Entities.Folder.RefreshAllMetadataForContainer(IMetadataContainer container, MetadataRefreshOptions refreshOptions, IProgress`1 progress, CancellationToken cancellationToken) at MediaBrowser.Controller.Entities.Folder.RefreshChildMetadata(BaseItem child, MetadataRefreshOptions refreshOptions, Boolean recursive, IProgress`1 progress, CancellationToken cancellationToken) at MediaBrowser.Controller.Entities.Folder.<>c__DisplayClass69_0`1.<<RunTasks>b__1>d.MoveNext() --- End of stack trace from previous location --- at MediaBrowser.Controller.Entities.Folder.RunTasks[T](Func`3 task, IList`1 children, IProgress`1 progress, CancellationToken cancellationToken) at MediaBrowser.Controller.Entities.Folder.ValidateChildrenInternal2(IProgress`1 progress, Boolean recursive, Boolean refreshChildMetadata, Boolean allowRemoveRoot, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService, CancellationToken cancellationToken) at MediaBrowser.Controller.Entities.Folder.ValidateChildrenInternal(IProgress`1 progress, Boolean recursive, Boolean refreshChildMetadata, Boolean allowRemoveRoot, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService, CancellationToken cancellationToken) at MediaBrowser.Providers.Manager.ProviderManager.RefreshCollectionFolderChildren(MetadataRefreshOptions options, CollectionFolder collectionFolder, CancellationToken cancellationToken) at MediaBrowser.Providers.Manager.ProviderManager.RefreshItem(BaseItem item, MetadataRefreshOptions options, CancellationToken cancellationToken) at MediaBrowser.Providers.Manager.ProviderManager.StartProcessingRefreshQueue() ``` Example of it attempting to prune the images of a virtual episode right before it will throw the above error; ![image](https://github.com/user-attachments/assets/30a9a042-4584-424d-8152-6b399608ee70) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
OVERLORD added the pull-request label 2026-02-07 07:12:27 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/jellyfin#13412