diff options
| author | Bond-009 <bond.009@outlook.com> | 2023-03-28 10:58:48 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-28 10:58:48 +0200 |
| commit | 9c500bdca3330607a2a0dd9a562548750f99f11b (patch) | |
| tree | 568e6cc17720a2d2396e66155d57eeabe88e511b /Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs | |
| parent | 6ed113c7e5c5381c937ae3b6b9fcfe1d3a187483 (diff) | |
| parent | 9211a73e4011c0c610fdbcf24e0723a3552f22fa (diff) | |
Merge pull request #9466 from Shadowghost/playlist-fix
Diffstat (limited to 'Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs')
| -rw-r--r-- | Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs b/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs new file mode 100644 index 000000000..55aadae79 --- /dev/null +++ b/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs @@ -0,0 +1,67 @@ +using System; +using System.Linq; + +using Jellyfin.Data.Enums; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Playlists; +using Microsoft.Extensions.Logging; + +namespace Jellyfin.Server.Migrations.Routines; + +/// <summary> +/// Properly set playlist owner. +/// </summary> +internal class FixPlaylistOwner : IMigrationRoutine +{ + private readonly ILogger<RemoveDuplicateExtras> _logger; + private readonly ILibraryManager _libraryManager; + private readonly IPlaylistManager _playlistManager; + + public FixPlaylistOwner( + ILogger<RemoveDuplicateExtras> logger, + ILibraryManager libraryManager, + IPlaylistManager playlistManager) + { + _logger = logger; + _libraryManager = libraryManager; + _playlistManager = playlistManager; + } + + /// <inheritdoc/> + public Guid Id => Guid.Parse("{615DFA9E-2497-4DBB-A472-61938B752C5B}"); + + /// <inheritdoc/> + public string Name => "FixPlaylistOwner"; + + /// <inheritdoc/> + public bool PerformOnNewInstall => false; + + /// <inheritdoc/> + public void Perform() + { + var playlists = _libraryManager.GetItemList(new InternalItemsQuery + { + IncludeItemTypes = new[] { BaseItemKind.Playlist } + }) + .Cast<Playlist>() + .Where(x => x.OwnerUserId.Equals(Guid.Empty)) + .ToArray(); + + if (playlists.Length > 0) + { + foreach (var playlist in playlists) + { + var shares = playlist.Shares; + var firstEditShare = shares.First(x => x.CanEdit); + if (firstEditShare is not null && Guid.TryParse(firstEditShare.UserId, out var guid)) + { + playlist.OwnerUserId = guid; + playlist.Shares = shares.Where(x => x != firstEditShare).ToArray(); + + _playlistManager.UpdatePlaylistAsync(playlist).GetAwaiter().GetResult(); + } + } + } + } +} |
