Add media segments API (#12345)

* Added Media segment manager

* Added "HasSegments" to MediaSourceInfo when requesting though baseitem

* Fixed ordering of Media Segements

* Added media segment API controller

* Added .ConfigureAwait(false) on media segments manager

* renamed MediaSegmentsController
removed empty route

* Added Model layer for Media Segments
Fixed review comments Media segments

* Updated media segment naming
refactored api and manager usage

* Added mediaSegment type filter

* Fixed codesmell

* Fixed naming and typos

* Added EF Migration

* Added Identity Generation for MediaSegments
Made mediasegment filter optional

* Fixed optional filter parameter

* refactored segment namespace

* Added SegmentProviderId to MediaSegment

* Media segment comment indentation

* Added MediaSegmentManager query notracking
This commit is contained in:
JPVenson
2024-08-05 14:20:27 +02:00
committed by GitHub
parent 9a8298a84d
commit 00eb6c0d6f
13 changed files with 1124 additions and 3 deletions

View File

@@ -0,0 +1,42 @@
using System;
using System.ComponentModel.DataAnnotations.Schema;
using Jellyfin.Data.Enums;
namespace Jellyfin.Data.Entities;
/// <summary>
/// An entity representing the metadata for a group of trickplay tiles.
/// </summary>
public class MediaSegment
{
/// <summary>
/// Gets or sets the id of the media segment.
/// </summary>
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
/// <summary>
/// Gets or sets the id of the associated item.
/// </summary>
public Guid ItemId { get; set; }
/// <summary>
/// Gets or sets the Type of content this segment defines.
/// </summary>
public MediaSegmentType Type { get; set; }
/// <summary>
/// Gets or sets the end of the segment.
/// </summary>
public long EndTicks { get; set; }
/// <summary>
/// Gets or sets the start of the segment.
/// </summary>
public long StartTicks { get; set; }
/// <summary>
/// Gets or sets Id of the media segment provider this entry originates from.
/// </summary>
public required string SegmentProviderId { get; set; }
}

View File

@@ -0,0 +1,39 @@
using Jellyfin.Data.Entities;
namespace Jellyfin.Data.Enums;
/// <summary>
/// Defines the types of content an individual <see cref="MediaSegment"/> represents.
/// </summary>
public enum MediaSegmentType
{
/// <summary>
/// Default media type or custom one.
/// </summary>
Unknown = 0,
/// <summary>
/// Commercial.
/// </summary>
Commercial = 1,
/// <summary>
/// Preview.
/// </summary>
Preview = 2,
/// <summary>
/// Recap.
/// </summary>
Recap = 3,
/// <summary>
/// Outro.
/// </summary>
Outro = 4,
/// <summary>
/// Intro.
/// </summary>
Intro = 5
}