Implement image management enhancements: add functionality to relocate legacy images during startup, update image handling in show metadata, and refactor related API endpoints to utilize the new image storage system. Adjust database schema to support image references and update UI components for improved image selection and display.

This commit is contained in:
Leonid Pershin
2026-07-25 11:43:17 +03:00
parent 149cd153b9
commit a970eae7d2
30 changed files with 1231 additions and 172 deletions
+10 -10
View File
@@ -29,8 +29,8 @@ public class Show
public int? Year { get; private set; }
/// <summary>Относительный путь локального постера от корня хранилища или null.</summary>
public string? PosterPath { get; private set; }
/// <summary>Постер шоу — ссылка на запись общего реестра изображений (<c>Domain/Images</c>) или null.</summary>
public Guid? PosterImageId { get; private set; }
/// <summary>Серии шоу (backing-field для EF). Порядок показа — по <see cref="ShowEpisode.Position"/>;
/// потребители сортируют явно (см. загрузчик планировщика).</summary>
@@ -86,13 +86,13 @@ public class Show
public bool CanAddEpisode => Kind != ShowKind.Single || _episodes.Count == 0;
/// <summary>Применить метаданные из внешнего источника. Постер (уже скачанный локально) может быть null.</summary>
/// <summary>Применить метаданные из внешнего источника. Постер (уже зарегистрирован в реестре) может быть null.</summary>
public void ApplyMetadata(
string provider,
string externalId,
string? description,
int? year,
string? posterPath
Guid? posterImageId
)
{
MetadataProvider = provider;
@@ -100,8 +100,8 @@ public class Show
if (!string.IsNullOrWhiteSpace(description))
Description = description;
Year = year;
if (posterPath is not null)
PosterPath = posterPath;
if (posterImageId is not null)
PosterImageId = posterImageId;
}
/// <summary>Ручная правка метаданных (без внешнего источника).</summary>
@@ -113,16 +113,16 @@ public class Show
Year = year;
}
/// <summary>Задать/снять локальный постер (после скачивания/загрузки/удаления файла).</summary>
public void SetPosterPath(string? path) => PosterPath = path;
/// <summary>Привязать/снять постер шоу (ссылка на запись реестра изображений).</summary>
public void SetPosterImage(Guid? imageId) => PosterImageId = imageId;
/// <summary>Сбросить все метаданные и постер (файл удаляет вызывающий по старому PosterPath).</summary>
/// <summary>Сбросить все метаданные и отвязать постер (сама картинка остаётся в галерее).</summary>
public void ClearMetadata()
{
MetadataProvider = null;
MetadataExternalId = null;
Year = null;
PosterPath = null;
PosterImageId = null;
Description = null;
}
}