diff --git a/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TubeArchivistApi.cs b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TubeArchivistApi.cs index f9585f3..30929d2 100644 --- a/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TubeArchivistApi.cs +++ b/Jellyfin.Plugin.TubeArchivistMetadata/TubeArchivist/TubeArchivistApi.cs @@ -6,6 +6,7 @@ using System.Net.Http; using System.Text; using System.Threading.Tasks; using Jellyfin.Plugin.TubeArchivistMetadata.Utilities; +using MediaBrowser.Model.Playlists; using Microsoft.Extensions.Logging; using Newtonsoft.Json; @@ -151,7 +152,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist } /// - /// Send video playback progress to TubeArchivist. + /// Sends video playback progress to TubeArchivist. /// /// Video id. /// Progress in seconds. @@ -168,7 +169,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist } /// - /// Send video playback progress to TubeArchivist. + /// Sends video playback progress to TubeArchivist. /// /// Video id. /// Video playback progress data. @@ -187,7 +188,7 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist } /// - /// Set video/channel/playlist as watched on TubeArchivist. + /// Sets video/channel/playlist as watched on TubeArchivist. /// /// Video/channel/playlist id. /// Whether the item has been watched or not. @@ -231,5 +232,49 @@ namespace Jellyfin.Plugin.TubeArchivistMetadata.TubeArchivist return playlists?.Data; } + + /// + /// Creates a new custom playlist. + /// + /// Playlist creation request. + /// The created . + public async Task CreateCustomPlaylist(CustomPlaylistCreation creationRequest) + { + Playlist? playlist = null; + var customPlaylistEndpoint = $"/api/playlist/custom/"; + var url = new Uri(Utils.SanitizeUrl(Plugin.Instance!.Configuration.TubeArchivistUrl + customPlaylistEndpoint)); + var body = JsonConvert.SerializeObject(creationRequest); + _logger.LogInformation("{Message}", body); + + var response = await client.PostAsync(url, new StringContent(body, Encoding.UTF8, "application/json")).ConfigureAwait(true); + _logger.LogInformation("POST {Message}", url + ": " + response.StatusCode); + + if (response.IsSuccessStatusCode) + { + string rawData = await response.Content.ReadAsStringAsync().ConfigureAwait(true); + playlist = JsonConvert.DeserializeObject(rawData); + } + + return playlist; + } + + /// + /// Creates a new custom playlist. + /// + /// Playlist id. + /// Playlist creation request. + /// The response . + public async Task CustomPlaylistEntryAction(string playlistId, CustomPlaylistEntryAction entryAction) + { + var customPlaylistEndpoint = $"/api/playlist/custom/"; + var url = new Uri(Utils.SanitizeUrl(Plugin.Instance!.Configuration.TubeArchivistUrl + customPlaylistEndpoint + playlistId)); + var body = JsonConvert.SerializeObject(entryAction); + _logger.LogDebug("CustomPlaylistEntryAction body: {Message}", body); + + var response = await client.PostAsync(url, new StringContent(body, Encoding.UTF8, "application/json")).ConfigureAwait(true); + _logger.LogDebug("Response code: {Message}", response.StatusCode); + + return response.StatusCode; + } } }