Add playlist ACL endpoints

This commit is contained in:
Shadowghost
2024-03-26 15:29:48 +01:00
parent 2e9aa146a5
commit 88b3490d17
6 changed files with 235 additions and 47 deletions

View File

@@ -59,6 +59,11 @@ namespace Emby.Server.Implementations.Playlists
_appConfig = appConfig;
}
public Playlist GetPlaylist(Guid userId, Guid playlistId)
{
return GetPlaylists(userId).Where(p => p.Id.Equals(playlistId)).FirstOrDefault();
}
public IEnumerable<Playlist> GetPlaylists(Guid userId)
{
var user = _userManager.GetUserById(userId);
@@ -160,7 +165,7 @@ namespace Emby.Server.Implementations.Playlists
}
}
private string GetTargetPath(string path)
private static string GetTargetPath(string path)
{
while (Directory.Exists(path))
{
@@ -231,13 +236,8 @@ namespace Emby.Server.Implementations.Playlists
// Update the playlist in the repository
playlist.LinkedChildren = newLinkedChildren;
await playlist.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
// Update the playlist on disk
if (playlist.IsFile)
{
SavePlaylistFile(playlist);
}
await UpdatePlaylist(playlist).ConfigureAwait(false);
// Refresh playlist metadata
_providerManager.QueueRefresh(
@@ -266,12 +266,7 @@ namespace Emby.Server.Implementations.Playlists
.Select(i => i.Item1)
.ToArray();
await playlist.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
if (playlist.IsFile)
{
SavePlaylistFile(playlist);
}
await UpdatePlaylist(playlist).ConfigureAwait(false);
_providerManager.QueueRefresh(
playlist.Id,
@@ -313,14 +308,9 @@ namespace Emby.Server.Implementations.Playlists
newList.Insert(newIndex, item);
}
playlist.LinkedChildren = newList.ToArray();
playlist.LinkedChildren = [.. newList];
await playlist.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
if (playlist.IsFile)
{
SavePlaylistFile(playlist);
}
await UpdatePlaylist(playlist).ConfigureAwait(false);
}
/// <inheritdoc />
@@ -430,8 +420,11 @@ namespace Emby.Server.Implementations.Playlists
}
else if (extension.Equals(".m3u8", StringComparison.OrdinalIgnoreCase))
{
var playlist = new M3uPlaylist();
playlist.IsExtended = true;
var playlist = new M3uPlaylist
{
IsExtended = true
};
foreach (var child in item.GetLinkedChildren())
{
var entry = new M3uPlaylistEntry()
@@ -481,7 +474,7 @@ namespace Emby.Server.Implementations.Playlists
}
}
private string NormalizeItemPath(string playlistPath, string itemPath)
private static string NormalizeItemPath(string playlistPath, string itemPath)
{
return MakeRelativePath(Path.GetDirectoryName(playlistPath), itemPath);
}
@@ -541,12 +534,7 @@ namespace Emby.Server.Implementations.Playlists
{
playlist.OwnerUserId = guid;
playlist.Shares = rankedShares.Skip(1).ToArray();
await playlist.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
if (playlist.IsFile)
{
SavePlaylistFile(playlist);
}
await UpdatePlaylist(playlist).ConfigureAwait(false);
}
else if (!playlist.OpenAccess)
{
@@ -563,5 +551,47 @@ namespace Emby.Server.Implementations.Playlists
}
}
}
public async Task ToggleOpenAccess(Guid playlistId, Guid userId)
{
var playlist = GetPlaylist(userId, playlistId);
playlist.OpenAccess = !playlist.OpenAccess;
await UpdatePlaylist(playlist).ConfigureAwait(false);
}
public async Task AddToShares(Guid playlistId, Guid userId, Share share)
{
var playlist = GetPlaylist(userId, playlistId);
var shares = playlist.Shares.ToList();
var existingUserShare = shares.FirstOrDefault(s => s.UserId?.Equals(share.UserId, StringComparison.OrdinalIgnoreCase) ?? false);
if (existingUserShare is not null)
{
shares.Remove(existingUserShare);
}
shares.Add(share);
playlist.Shares = shares;
await UpdatePlaylist(playlist).ConfigureAwait(false);
}
public async Task RemoveFromShares(Guid playlistId, Guid userId, Share share)
{
var playlist = GetPlaylist(userId, playlistId);
var shares = playlist.Shares.ToList();
shares.Remove(share);
playlist.Shares = shares;
await UpdatePlaylist(playlist).ConfigureAwait(false);
}
private async Task UpdatePlaylist(Playlist playlist)
{
await playlist.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
if (playlist.IsFile)
{
SavePlaylistFile(playlist);
}
}
}
}