aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations')
-rw-r--r--Emby.Server.Implementations/Playlists/PlaylistManager.cs62
1 files changed, 52 insertions, 10 deletions
diff --git a/Emby.Server.Implementations/Playlists/PlaylistManager.cs b/Emby.Server.Implementations/Playlists/PlaylistManager.cs
index 2717c392b..6176879b6 100644
--- a/Emby.Server.Implementations/Playlists/PlaylistManager.cs
+++ b/Emby.Server.Implementations/Playlists/PlaylistManager.cs
@@ -135,16 +135,8 @@ namespace Emby.Server.Implementations.Playlists
{
Name = name,
Path = path,
- Shares = new[]
- {
- new Share
- {
- UserId = options.UserId.Equals(default)
- ? null
- : options.UserId.ToString("N", CultureInfo.InvariantCulture),
- CanEdit = true
- }
- }
+ OwnerUserId = options.UserId,
+ Shares = options.Shares ?? Array.Empty<Share>()
};
playlist.SetMediaType(options.MediaType);
@@ -537,5 +529,55 @@ namespace Emby.Server.Implementations.Playlists
return _libraryManager.RootFolder.Children.OfType<Folder>().FirstOrDefault(i => string.Equals(i.GetType().Name, TypeName, StringComparison.Ordinal)) ??
_libraryManager.GetUserRootFolder().Children.OfType<Folder>().FirstOrDefault(i => string.Equals(i.GetType().Name, TypeName, StringComparison.Ordinal));
}
+
+ /// <inheritdoc />
+ public async Task RemovePlaylistsAsync(Guid userId)
+ {
+ var playlists = GetPlaylists(userId);
+ foreach (var playlist in playlists)
+ {
+ // Update owner if shared
+ var rankedShares = playlist.Shares.OrderByDescending(x => x.CanEdit).ToArray();
+ if (rankedShares.Length > 0 && Guid.TryParse(rankedShares[0].UserId, out var guid))
+ {
+ playlist.OwnerUserId = guid;
+ playlist.Shares = rankedShares.Skip(1).ToArray();
+ await playlist.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+
+ if (playlist.IsFile)
+ {
+ SavePlaylistFile(playlist);
+ }
+ }
+ else
+ {
+ // Remove playlist if not shared
+ _libraryManager.DeleteItem(
+ playlist,
+ new DeleteOptions
+ {
+ DeleteFileLocation = false,
+ DeleteFromExternalProvider = false
+ },
+ playlist.GetParent(),
+ false);
+ }
+ }
+ }
+
+ /// <inheritdoc />
+ public async Task UpdatePlaylistAsync(Playlist playlist)
+ {
+ var currentPlaylist = (Playlist)_libraryManager.GetItemById(playlist.Id);
+ currentPlaylist.OwnerUserId = playlist.OwnerUserId;
+ currentPlaylist.Shares = playlist.Shares;
+
+ await playlist.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+
+ if (currentPlaylist.IsFile)
+ {
+ SavePlaylistFile(currentPlaylist);
+ }
+ }
}
}