diff --git a/plugin/Api/LessonsController.cs b/plugin/Api/LessonsController.cs new file mode 100644 index 0000000..aad1b18 --- /dev/null +++ b/plugin/Api/LessonsController.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Mvc; +using Jellyfin.Plugin.Lessons.Data; + +namespace Jellyfin.Plugin.Lessons.Api; + +[ApiController] +[Route("Plugins/Lessons")] +public class LessonsController : ControllerBase +{ + private readonly LessonStore _store; + + public LessonsController(LessonStore store) + { + _store = store; + } + + [HttpGet("List")] + public IActionResult List() + { + var lessons = _store.GetAllLessons(); + + var summaries = lessons.Select(l => new + { + id = l.Id, + title = l.Title, + grade = l.Grade, + subject = l.Subject, + lessonDate = l.LessonDate, + description = l.Description + }); + + return Ok(summaries); + } +} diff --git a/plugin/Configuration/lessonsPage.html b/plugin/Configuration/lessonsPage.html new file mode 100644 index 0000000..30034e4 --- /dev/null +++ b/plugin/Configuration/lessonsPage.html @@ -0,0 +1,152 @@ + + + + + + Lessons + + + +
+

📚 Lessons

+
Loading lessons…
+
+ + + + diff --git a/plugin/Jellyfin.Plugin.Lessons.csproj b/plugin/Jellyfin.Plugin.Lessons.csproj index faba00e..5682323 100644 --- a/plugin/Jellyfin.Plugin.Lessons.csproj +++ b/plugin/Jellyfin.Plugin.Lessons.csproj @@ -3,6 +3,8 @@ net9.0 JellyfinLessons jellyfin-lessons + enable + enable @@ -16,4 +18,12 @@ runtime + + + + + + + + diff --git a/plugin/Plugin.cs b/plugin/Plugin.cs index 59f6f42..52c4269 100644 --- a/plugin/Plugin.cs +++ b/plugin/Plugin.cs @@ -1,12 +1,14 @@ +using System; +using System.Collections.Generic; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Plugins; using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Serialization; -using Microsoft.Extensions.Logging; using Jellyfin.Plugin.Lessons.Configuration; namespace Jellyfin.Plugin.Lessons; -public class Plugin : BasePlugin +public class Plugin : BasePlugin, IHasWebPages { public Plugin(IApplicationPaths appPaths, IXmlSerializer xmlSerializer) : base(appPaths, xmlSerializer) @@ -18,4 +20,20 @@ public class Plugin : BasePlugin public override Guid Id => Guid.Parse("a1b2c3d4-e5f6-7890-abcd-ef1234567890"); public override string Description => "Homeschool lesson plans with embedded media"; + + public IEnumerable GetPages() + { + return new[] + { + new PluginPageInfo + { + Name = Name, + DisplayName = "Lessons", + EmbeddedResourcePath = GetType().Namespace + ".Configuration.lessonsPage.html", + EnableInMainMenu = true, + MenuSection = "plugins", + MenuIcon = "book" + } + }; + } } diff --git a/plugin/ServiceRegistrator.cs b/plugin/ServiceRegistrator.cs index cae7cc3..378341e 100644 --- a/plugin/ServiceRegistrator.cs +++ b/plugin/ServiceRegistrator.cs @@ -1,11 +1,15 @@ -using MediaBrowser.Common.Plugins; +using Jellyfin.Plugin.Lessons.Data; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Plugins; using Microsoft.Extensions.DependencyInjection; namespace Jellyfin.Plugin.Lessons; public class ServiceRegistrator : IPluginServiceRegistrator { - public void RegisterServices(IServiceCollection services) + public void RegisterServices(IServiceCollection services, IServerApplicationHost appHost) { + services.AddSingleton(sp => + new LessonStore("~/.local/share/jellyfin-lessons/lessons.db")); } }