From 4eedb5bb401853c64097799c28667b6c436a27d3 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Sun, 9 Nov 2025 13:29:59 -0600 Subject: [PATCH] fix removing tags from local libraries --- CHANGELOG.md | 2 ++ .../Data/Repositories/MetadataRepository.cs | 2 +- ErsatzTV/Pages/Schedules.razor | 3 ++- ErsatzTV/Shared/ScheduleItemsDialog.razor | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11201cad8..a079a5640 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix saving subtitle title changes to the database - This fixes e.g. where stream selection would continue to use the original title - This fix applies to all libraries (local and media server) +- Fix (3 year old) bug removing tags from local libraries when they are removed from NFO files (all content types) + - New scans will properly remove old tags; NFO files may need to be touched to force updating during a scan ### Changed - Use smaller batch size for search index updates (100, down from 1000) diff --git a/ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs index 6e93a7658..c7f1342c3 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs @@ -587,7 +587,7 @@ public class MetadataRepository(IDbContextFactory dbContextFactory) : { await using TvContext dbContext = await dbContextFactory.CreateDbContextAsync(); return await dbContext.Connection.ExecuteAsync( - "DELETE FROM Tag WHERE Id = @TagId AND ExternalCollectionId = @ExternalCollectionId", + "DELETE FROM Tag WHERE Id = @TagId AND ((ExternalCollectionId = @ExternalCollectionId) OR (ExternalCollectionId IS NULL AND @ExternalCollectionId IS NULL))", new { TagId = tag.Id, tag.ExternalCollectionId }) .Map(result => result > 0); } diff --git a/ErsatzTV/Pages/Schedules.razor b/ErsatzTV/Pages/Schedules.razor index bbb5668e6..5bf1c0eeb 100644 --- a/ErsatzTV/Pages/Schedules.razor +++ b/ErsatzTV/Pages/Schedules.razor @@ -223,7 +223,8 @@ Option> maybeResults = await Mediator.Send(new GetProgramScheduleItems(schedule.Id), _cts.Token); foreach (IEnumerable results in maybeResults) { - var parameters = new DialogParameters { { "Schedule", schedule }, { "Items", results } }; + var sorted = results.OrderBy(i => i.Index).ToList(); + var parameters = new DialogParameters { { "Schedule", schedule }, { "Items", sorted } }; var options = new DialogOptions { CloseButton = true, CloseOnEscapeKey = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; IDialogReference dialog = await Dialog.ShowAsync(schedule.Name, parameters, options); DialogResult _ = await dialog.Result; diff --git a/ErsatzTV/Shared/ScheduleItemsDialog.razor b/ErsatzTV/Shared/ScheduleItemsDialog.razor index e897a400a..a3eb320e5 100644 --- a/ErsatzTV/Shared/ScheduleItemsDialog.razor +++ b/ErsatzTV/Shared/ScheduleItemsDialog.razor @@ -30,7 +30,7 @@ public ProgramScheduleViewModel Schedule { get; set; } [Parameter] - public IEnumerable Items { get; set; } + public List Items { get; set; } private string _info; private ElementReference _infoView;