diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-07 09:37:13 +0100 |
|---|---|---|
| committer | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-07 09:37:42 +0100 |
| commit | f5d966fcc3eb3c5f8aa39a22caa8cf615029e1c5 (patch) | |
| tree | 72f8539cb0e95fada5293eb7fdbf1c8d52490595 /Emby.Server.Implementations | |
| parent | 98d7c8d59fa3180e50ee311dfc53164325210896 (diff) | |
Remove Collection and Playlist cleanup task
Diffstat (limited to 'Emby.Server.Implementations')
| -rw-r--r-- | Emby.Server.Implementations/Localization/Core/en-US.json | 4 | ||||
| -rw-r--r-- | Emby.Server.Implementations/ScheduledTasks/Tasks/CleanupCollectionAndPlaylistPathsTask.cs | 145 |
2 files changed, 1 insertions, 148 deletions
diff --git a/Emby.Server.Implementations/Localization/Core/en-US.json b/Emby.Server.Implementations/Localization/Core/en-US.json index c09d5af96c..c40448151c 100644 --- a/Emby.Server.Implementations/Localization/Core/en-US.json +++ b/Emby.Server.Implementations/Localization/Core/en-US.json @@ -130,9 +130,7 @@ "TaskOptimizeDatabaseDescription": "Compacts database and truncates free space. Running this task after scanning the library or doing other changes that imply database modifications might improve performance.", "TaskKeyframeExtractor": "Keyframe Extractor", "TaskKeyframeExtractorDescription": "Extracts keyframes from video files to create more precise HLS playlists. This task may run for a long time.", - "TaskCleanCollectionsAndPlaylists": "Clean up collections and playlists", - "TaskCleanCollectionsAndPlaylistsDescription": "Removes items from collections and playlists that no longer exist.", - "TaskExtractMediaSegments": "Media Segment Scan", +"TaskExtractMediaSegments": "Media Segment Scan", "TaskExtractMediaSegmentsDescription": "Extracts or obtains media segments from MediaSegment enabled plugins.", "TaskMoveTrickplayImages": "Migrate Trickplay Image Location", "TaskMoveTrickplayImagesDescription": "Moves existing trickplay files according to the library settings.", diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanupCollectionAndPlaylistPathsTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanupCollectionAndPlaylistPathsTask.cs deleted file mode 100644 index 1c2038d839..0000000000 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanupCollectionAndPlaylistPathsTask.cs +++ /dev/null @@ -1,145 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Collections; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Tasks; -using Microsoft.Extensions.Logging; - -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - -/// <summary> -/// Deletes path references from collections and playlists that no longer exists. -/// </summary> -public class CleanupCollectionAndPlaylistPathsTask : IScheduledTask -{ - private readonly ILocalizationManager _localization; - private readonly ICollectionManager _collectionManager; - private readonly IPlaylistManager _playlistManager; - private readonly ILogger<CleanupCollectionAndPlaylistPathsTask> _logger; - private readonly IProviderManager _providerManager; - private readonly ILibraryManager _libraryManager; - - /// <summary> - /// Initializes a new instance of the <see cref="CleanupCollectionAndPlaylistPathsTask"/> class. - /// </summary> - /// <param name="localization">Instance of the <see cref="ILocalizationManager"/> interface.</param> - /// <param name="collectionManager">Instance of the <see cref="ICollectionManager"/> interface.</param> - /// <param name="playlistManager">Instance of the <see cref="IPlaylistManager"/> interface.</param> - /// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param> - /// <param name="providerManager">Instance of the <see cref="IProviderManager"/> interface.</param> - /// <param name="libraryManager">Instance of the <see cref="ILibraryManager"/> interface.</param> - public CleanupCollectionAndPlaylistPathsTask( - ILocalizationManager localization, - ICollectionManager collectionManager, - IPlaylistManager playlistManager, - ILogger<CleanupCollectionAndPlaylistPathsTask> logger, - IProviderManager providerManager, - ILibraryManager libraryManager) - { - _localization = localization; - _collectionManager = collectionManager; - _playlistManager = playlistManager; - _logger = logger; - _providerManager = providerManager; - _libraryManager = libraryManager; - } - - /// <inheritdoc /> - public string Name => _localization.GetLocalizedString("TaskCleanCollectionsAndPlaylists"); - - /// <inheritdoc /> - public string Key => "CleanCollectionsAndPlaylists"; - - /// <inheritdoc /> - public string Description => _localization.GetLocalizedString("TaskCleanCollectionsAndPlaylistsDescription"); - - /// <inheritdoc /> - public string Category => _localization.GetLocalizedString("TasksMaintenanceCategory"); - - /// <inheritdoc /> - public async Task ExecuteAsync(IProgress<double> progress, CancellationToken cancellationToken) - { - var collectionsFolder = await _collectionManager.GetCollectionsFolder(false).ConfigureAwait(false); - if (collectionsFolder is null) - { - _logger.LogDebug("There is no collections folder to be found"); - } - else - { - var collections = collectionsFolder.Children.OfType<BoxSet>().ToArray(); - _logger.LogDebug("Found {CollectionLength} boxsets", collections.Length); - - for (var index = 0; index < collections.Length; index++) - { - var collection = collections[index]; - _logger.LogDebug("Checking boxset {CollectionName}", collection.Name); - - await CleanupLinkedChildrenAsync(collection, cancellationToken).ConfigureAwait(false); - progress.Report(50D / collections.Length * (index + 1)); - } - } - - var playlistsFolder = _playlistManager.GetPlaylistsFolder(); - if (playlistsFolder is null) - { - _logger.LogDebug("There is no playlists folder to be found"); - return; - } - - var playlists = playlistsFolder.Children.OfType<Playlist>().ToArray(); - _logger.LogDebug("Found {PlaylistLength} playlists", playlists.Length); - - for (var index = 0; index < playlists.Length; index++) - { - var playlist = playlists[index]; - _logger.LogDebug("Checking playlist {PlaylistName}", playlist.Name); - - await CleanupLinkedChildrenAsync(playlist, cancellationToken).ConfigureAwait(false); - progress.Report(50D / playlists.Length * (index + 1)); - } - } - - private async Task CleanupLinkedChildrenAsync<T>(T folder, CancellationToken cancellationToken) - where T : Folder - { - List<LinkedChild>? itemsToRemove = null; - foreach (var linkedChild in folder.LinkedChildren) - { - if (linkedChild.ItemId.HasValue - && !linkedChild.ItemId.Value.IsEmpty() - && _libraryManager.GetItemById(linkedChild.ItemId.Value) is not null) - { - continue; - } - - _logger.LogInformation("Item in {FolderName} with ItemId {ItemId} no longer exists in library", folder.Name, linkedChild.ItemId); - (itemsToRemove ??= []).Add(linkedChild); - } - - if (itemsToRemove is not null) - { - _logger.LogDebug("Updating {FolderName}", folder.Name); - folder.LinkedChildren = folder.LinkedChildren.Except(itemsToRemove).ToArray(); - await _providerManager.SaveMetadataAsync(folder, ItemUpdateType.MetadataEdit).ConfigureAwait(false); - await folder.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false); - } - } - - /// <inheritdoc /> - public IEnumerable<TaskTriggerInfo> GetDefaultTriggers() - { - yield return new TaskTriggerInfo - { - Type = TaskTriggerInfoType.StartupTrigger, - }; - } -} |
