MyBookmark/Modules.Library.Domain/Entities/MediaContent/Items/Anime/AnimeEpisode.cs
2024-09-23 03:00:50 +03:00

81 lines
2.3 KiB
C#

namespace Modules.Library.Domain.Entities.MediaContent.Items.Anime;
public sealed class AnimeEpisode : AnimeItemSingle
{
public AnimeEpisodeType Type { get; private set; }
public int? Number { get; private set; }
private AnimeEpisode() : base() {}
private AnimeEpisode(Models.AnimeEpisode episode) : base(episode.Duration)
{
Id = episode.Id;
CommonProperties = MediaContent.CommonProperties.CommonProperties.New(episode.CommonProperties);
Deleted = episode.Deleted;
Type = episode.Type;
Number = episode.Number;
Order = episode.Order;
Variant = episode.Variant;
Completed = episode.Completed;
ExpirationTime = episode.ExpirationTime;
}
internal AnimeEpisode(AnimeTitle title, AnimeSeason? season, AnimeEpisodeType type, ushort order, ushort variant, int? number = null) : base(title, season)
{
Type = type;
Order = order;
Variant = variant;
Number = number;
}
internal AnimeEpisode(AnimeTitle title, AnimeSeason? season, AnimeEpisodeType type,
Guid nameOriginalLanguageId, string nameOriginal, ushort order, ushort variant, int? number = null) :
base(title, season, nameOriginalLanguageId, nameOriginal)
{
Type = type;
Order = order;
Variant = variant;
Number = number;
}
internal static AnimeEpisode New(Models.AnimeEpisode episode) => new(episode);
public void SetNumber(int? number) => Number = number;
public override void SetOrder(ushort order)
{
//structure action or not
if (_season == null) SetItemOrder(_title.Items, Order, order);
else SetItemOrder(_season.Episodes, Order, order);
}
public override void SetVariant(ushort variant)
{
if (_season == null) SetItemVariant(_title.Items, Order, Variant, variant);
else SetItemVariant(_season.Episodes, Order, Variant, variant);
}
/*
public override void Delete()
{
}
*/
/*
protected override IEnumerable<object?> GetEqualityComponents()
{
yield return Type;
yield return Number;
yield return base.GetEqualityComponents();
}
*/
}
public enum AnimeEpisodeType
{
Regilar,
FullLength,
Ova,
}