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;
+ }
}
}