diff --git a/Jellyfin.Plugin.MediaCleaner/Controllers/StateController.cs b/Jellyfin.Plugin.MediaCleaner/Controllers/StateController.cs new file mode 100644 index 0000000..c66c6be --- /dev/null +++ b/Jellyfin.Plugin.MediaCleaner/Controllers/StateController.cs @@ -0,0 +1,22 @@ +using Jellyfin.Plugin.MediaCleaner.Data; +using Jellyfin.Plugin.MediaCleaner.Models; +using Microsoft.AspNetCore.Mvc; + +namespace Jellyfin.Plugin.MediaCleaner.Controllers; + +[Route("mediacleaner/state")] +public class StateController : Controller +{ + private readonly PluginState _state; + public StateController(PluginState state) => _state = state; + + [HttpGet] + public IActionResult Get() => Ok(_state.GetSeriesInfo()); + + [HttpPost("add")] + public IActionResult AddSeriesInfo([FromBody] SeriesInfo seriesInfo) + { + _state.AddSeriesInfo(seriesInfo); + return Ok(); + } +} diff --git a/Jellyfin.Plugin.MediaCleaner/Data/PluginState.cs b/Jellyfin.Plugin.MediaCleaner/Data/PluginState.cs new file mode 100644 index 0000000..53f038f --- /dev/null +++ b/Jellyfin.Plugin.MediaCleaner/Data/PluginState.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using Jellyfin.Plugin.MediaCleaner.Models; + +namespace Jellyfin.Plugin.MediaCleaner.Data; + +public class PluginState +{ + private readonly object _lock = new(); + private List _seriesInfo = new List + { + new SeriesInfo { SeriesName = "TestName", Id = System.Guid.NewGuid() } + }; + + public void AddSeriesInfo(SeriesInfo seriesInfo) + { + lock (_lock) + { + _seriesInfo.Add(seriesInfo); + } + } + + public IEnumerable GetSeriesInfo() + { + lock (_lock) + { + return _seriesInfo; + } + } +} diff --git a/Jellyfin.Plugin.MediaCleaner/Jellyfin.Plugin.MediaCleaner.csproj b/Jellyfin.Plugin.MediaCleaner/Jellyfin.Plugin.MediaCleaner.csproj index aa5bdaa..68b496e 100644 --- a/Jellyfin.Plugin.MediaCleaner/Jellyfin.Plugin.MediaCleaner.csproj +++ b/Jellyfin.Plugin.MediaCleaner/Jellyfin.Plugin.MediaCleaner.csproj @@ -22,8 +22,8 @@ - - + + diff --git a/Jellyfin.Plugin.MediaCleaner/Pages/home.html b/Jellyfin.Plugin.MediaCleaner/Pages/home.html index 8d53c40..e5971e0 100644 --- a/Jellyfin.Plugin.MediaCleaner/Pages/home.html +++ b/Jellyfin.Plugin.MediaCleaner/Pages/home.html @@ -1,4 +1,5 @@ -
+
@@ -6,6 +7,15 @@ Settings

Media Cleaner

+ + + + + + + + +
IDSeries Name
diff --git a/Jellyfin.Plugin.MediaCleaner/Pages/media_cleaner_table.js b/Jellyfin.Plugin.MediaCleaner/Pages/media_cleaner_table.js new file mode 100644 index 0000000..a56f7ba --- /dev/null +++ b/Jellyfin.Plugin.MediaCleaner/Pages/media_cleaner_table.js @@ -0,0 +1,27 @@ +var table = document.getElementById("seriesTable"); + + + +const getMediaCleanerState = async () => { + const response = await fetch('/mediacleaner/state'); + + if(!response.ok){ + throw new Error(`Response status: ${response.status}`) + } + + return response.json(); +} + +var state = await getMediaCleanerState(); + +console.log("State: ", state); + +for(let i = 0; i < state.length; i++){ + var row = table.insertRow(-1); + var cell1 = row.insertCell(0); + var cell2 = row.insertCell(1); + var cell3 = row.insertCell(2); + cell1.innerHTML = state[i].Id; + cell2.innerHTML = state[i].SeriesName; + cell3.innerHTML = state[i].Seasons.length; +} diff --git a/Jellyfin.Plugin.MediaCleaner/Plugin.cs b/Jellyfin.Plugin.MediaCleaner/Plugin.cs index 170a572..5e4271d 100644 --- a/Jellyfin.Plugin.MediaCleaner/Plugin.cs +++ b/Jellyfin.Plugin.MediaCleaner/Plugin.cs @@ -2,11 +2,13 @@ using System; using System.Collections.Generic; using System.Globalization; using Jellyfin.Plugin.MediaCleaner.Configuration; +using Jellyfin.Plugin.MediaCleaner.Data; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Plugins; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Serialization; +using Microsoft.Extensions.DependencyInjection; namespace Jellyfin.Plugin.MediaCleaner; @@ -53,6 +55,11 @@ public class Plugin : BasePlugin, IHasWebPages EmbeddedResourcePath = string.Format(CultureInfo.InvariantCulture, "{0}.Pages.home.html", GetType().Namespace), EnableInMainMenu = true, }, + new PluginPageInfo + { + Name = "media_cleaner_table.js", + EmbeddedResourcePath = string.Format(CultureInfo.InvariantCulture, "{0}.Pages.media_cleaner_table.js", GetType().Namespace), + } ]; } } diff --git a/Jellyfin.Plugin.MediaCleaner/PluginServiceRegistrator.cs b/Jellyfin.Plugin.MediaCleaner/PluginServiceRegistrator.cs new file mode 100644 index 0000000..e5b2db9 --- /dev/null +++ b/Jellyfin.Plugin.MediaCleaner/PluginServiceRegistrator.cs @@ -0,0 +1,13 @@ +using Jellyfin.Plugin.MediaCleaner.Data; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Plugins; +using Microsoft.Extensions.DependencyInjection; + +namespace Jellyfin.Plugin.MediaCleaner; +public class PluginServiceRegistrator : IPluginServiceRegistrator +{ + public void RegisterServices(IServiceCollection serviceCollection, IServerApplicationHost applicationHost) + { + serviceCollection.AddSingleton(); + } +}