Implement episode metadata management: add functionality to refresh episode metadata from external sources, including new API endpoints and UI integration. Enhance Show and Episode models to support additional metadata fields, and update database schema accordingly. Update ShowDetail and ShowMetadataCard components to display refreshed episode information and provide user feedback on metadata updates.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
namespace TeleWave.Domain.Library;
|
||||
|
||||
/// <summary>Одна серия шоу — ссылка на медиа-ассет и позиция в порядке показа.</summary>
|
||||
/// <summary>Одна серия шоу — ссылка на медиа-ассет и позиция в порядке показа + метаданные.</summary>
|
||||
public class ShowEpisode
|
||||
{
|
||||
public Guid Id { get; private set; }
|
||||
@@ -10,6 +10,18 @@ public class ShowEpisode
|
||||
/// <summary>Порядковый номер внутри шоу (может иметь разрывы после удалений).</summary>
|
||||
public int Position { get; private set; }
|
||||
|
||||
/// <summary>Распознанные сезон/серия (из имени файла) — база для довыгрузки метаданных.</summary>
|
||||
public int? Season { get; private set; }
|
||||
public int? Episode { get; private set; }
|
||||
|
||||
// ── Метаданные серии ──
|
||||
public string? Title { get; private set; }
|
||||
public string? Overview { get; private set; }
|
||||
|
||||
/// <summary>Относительный путь локального кадра или null.</summary>
|
||||
public string? StillPath { get; private set; }
|
||||
public DateOnly? AirDate { get; private set; }
|
||||
|
||||
public DateTimeOffset CreatedAt { get; private set; }
|
||||
|
||||
private ShowEpisode() { }
|
||||
@@ -23,4 +35,29 @@ public class ShowEpisode
|
||||
Position = position,
|
||||
CreatedAt = DateTimeOffset.UtcNow,
|
||||
};
|
||||
|
||||
/// <summary>Проставить распознанные номера сезона/серии.</summary>
|
||||
public void SetNumbers(int? season, int? episode)
|
||||
{
|
||||
Season = season;
|
||||
Episode = episode;
|
||||
}
|
||||
|
||||
/// <summary>Применить метаданные серии (кадр — уже скачанный локально — может быть null).</summary>
|
||||
public void ApplyMetadata(string? title, string? overview, string? stillPath, DateOnly? airDate)
|
||||
{
|
||||
Title = title;
|
||||
Overview = overview;
|
||||
if (stillPath is not null)
|
||||
StillPath = stillPath;
|
||||
AirDate = airDate;
|
||||
}
|
||||
|
||||
public void ClearMetadata()
|
||||
{
|
||||
Title = null;
|
||||
Overview = null;
|
||||
StillPath = null;
|
||||
AirDate = null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user