aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server.Implementations/Item/ChapterManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Server.Implementations/Item/ChapterManager.cs')
-rw-r--r--Jellyfin.Server.Implementations/Item/ChapterManager.cs51
1 files changed, 51 insertions, 0 deletions
diff --git a/Jellyfin.Server.Implementations/Item/ChapterManager.cs b/Jellyfin.Server.Implementations/Item/ChapterManager.cs
new file mode 100644
index 000000000..273cc96ba
--- /dev/null
+++ b/Jellyfin.Server.Implementations/Item/ChapterManager.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Jellyfin.Data.Entities;
+using MediaBrowser.Model.Entities;
+using Microsoft.EntityFrameworkCore;
+using BaseItemDto = MediaBrowser.Controller.Entities.BaseItem;
+
+namespace Jellyfin.Server.Implementations.Item;
+
+public class ChapterManager
+{
+ private readonly IDbContextFactory<JellyfinDbContext> _dbProvider;
+
+ public ChapterManager(IDbContextFactory<JellyfinDbContext> dbProvider)
+ {
+ _dbProvider = dbProvider;
+ }
+
+ public IReadOnlyList<ChapterInfo> GetChapters(BaseItemDto baseItemDto)
+ {
+ using var context = _dbProvider.CreateDbContext();
+ return context.Chapters.Where(e => e.ItemId.Equals(baseItemDto.Id)).Select(Map).ToList();
+ }
+
+ private Chapter Map(ChapterInfo chapterInfo, int index, Guid itemId)
+ {
+ return new Chapter()
+ {
+ ChapterIndex = index,
+ StartPositionTicks = chapterInfo.StartPositionTicks,
+ ImageDateModified = chapterInfo.ImageDateModified,
+ ImagePath = chapterInfo.ImagePath,
+ ItemId = itemId,
+ Name = chapterInfo.Name
+ };
+ }
+
+ private ChapterInfo Map(Chapter chapterInfo, BaseItemDto baseItem)
+ {
+ var info = new ChapterInfo()
+ {
+ StartPositionTicks = chapterInfo.StartPositionTicks,
+ ImageDateModified = chapterInfo.ImageDateModified.GetValueOrDefault(),
+ ImagePath = chapterInfo.ImagePath,
+ Name = chapterInfo.Name,
+ };
+ info.ImageTag = _imageProcessor.GetImageCacheTag(baseItem, info);
+ return info;
+ }
+}