< Summary - Jellyfin

Information
Class: Jellyfin.Server.Migrations.Routines.FixPlaylistOwner
Assembly: jellyfin
File(s): /srv/git/jellyfin/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 27
Coverable lines: 27
Total lines: 76
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 8
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
get_Id()100%210%
get_Name()100%210%
get_PerformOnNewInstall()100%210%
Perform()0%7280%

File(s)

/srv/git/jellyfin/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs

#LineLine coverage
 1using System;
 2using System.Linq;
 3using System.Threading;
 4
 5using Jellyfin.Data.Enums;
 6using MediaBrowser.Controller.Entities;
 7using MediaBrowser.Controller.Library;
 8using MediaBrowser.Controller.Playlists;
 9using Microsoft.Extensions.Logging;
 10
 11namespace Jellyfin.Server.Migrations.Routines;
 12
 13/// <summary>
 14/// Properly set playlist owner.
 15/// </summary>
 16internal class FixPlaylistOwner : IMigrationRoutine
 17{
 18    private readonly ILogger<RemoveDuplicateExtras> _logger;
 19    private readonly ILibraryManager _libraryManager;
 20    private readonly IPlaylistManager _playlistManager;
 21
 22    public FixPlaylistOwner(
 23        ILogger<RemoveDuplicateExtras> logger,
 24        ILibraryManager libraryManager,
 25        IPlaylistManager playlistManager)
 26    {
 027        _logger = logger;
 028        _libraryManager = libraryManager;
 029        _playlistManager = playlistManager;
 030    }
 31
 32    /// <inheritdoc/>
 033    public Guid Id => Guid.Parse("{615DFA9E-2497-4DBB-A472-61938B752C5B}");
 34
 35    /// <inheritdoc/>
 036    public string Name => "FixPlaylistOwner";
 37
 38    /// <inheritdoc/>
 039    public bool PerformOnNewInstall => false;
 40
 41    /// <inheritdoc/>
 42    public void Perform()
 43    {
 044        var playlists = _libraryManager.GetItemList(new InternalItemsQuery
 045        {
 046            IncludeItemTypes = new[] { BaseItemKind.Playlist }
 047        })
 048        .Cast<Playlist>()
 049        .Where(x => x.OwnerUserId.Equals(Guid.Empty))
 050        .ToArray();
 51
 052        if (playlists.Length > 0)
 53        {
 054            foreach (var playlist in playlists)
 55            {
 056                var shares = playlist.Shares;
 057                if (shares.Count > 0)
 58                {
 059                    var firstEditShare = shares.First(x => x.CanEdit);
 060                    if (firstEditShare is not null)
 61                    {
 062                        playlist.OwnerUserId = firstEditShare.UserId;
 063                        playlist.Shares = shares.Where(x => x != firstEditShare).ToArray();
 064                        playlist.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).GetAwaiter
 065                        _playlistManager.SavePlaylistFile(playlist);
 66                    }
 67                }
 68                else
 69                {
 070                    playlist.OpenAccess = true;
 071                    playlist.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).GetAwaiter().G
 72                }
 73            }
 74        }
 075    }
 76}