fix disappearing collection tags (#1517)

This commit is contained in:
Jason Dove
2023-11-30 20:31:37 -06:00
committed by GitHub
parent c6ed258021
commit 24780cbe84
11 changed files with 8974 additions and 2 deletions
+2
View File
@@ -7,6 +7,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Fixed ### Fixed
- Fix playout builder crash with improperly configured pad filler preset - Fix playout builder crash with improperly configured pad filler preset
- Properly validate filler preset mode pad to require `filler pad to nearest minute` value - Properly validate filler preset mode pad to require `filler pad to nearest minute` value
- Fix bug where previously-synchronized collection tags would disappear
- This bug affected Jellyfin, Emby and Plex collections
## [0.8.3-beta] - 2023-11-22 ## [0.8.3-beta] - 2023-11-22
### Added ### Added
@@ -0,0 +1,28 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ErsatzTV.Infrastructure.MySql.Migrations
{
/// <inheritdoc />
public partial class Reset_ExternalCollectionEtag : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("UPDATE PlexCollection SET Etag = NULL");
migrationBuilder.Sql("UPDATE PlexMediaSource SET LastCollectionsScan = NULL");
migrationBuilder.Sql("UPDATE EmbyCollection SET Etag = NULL");
migrationBuilder.Sql("UPDATE EmbyMediaSource SET LastCollectionsScan = NULL");
migrationBuilder.Sql("UPDATE JellyfinCollection SET Etag = NULL");
migrationBuilder.Sql("UPDATE JellyfinMediaSource SET LastCollectionsScan = NULL");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}
@@ -16,7 +16,7 @@ namespace ErsatzTV.Infrastructure.MySql.Migrations
{ {
#pragma warning disable 612, 618 #pragma warning disable 612, 618
modelBuilder modelBuilder
.HasAnnotation("ProductVersion", "7.0.13") .HasAnnotation("ProductVersion", "7.0.14")
.HasAnnotation("Relational:MaxIdentifierLength", 64); .HasAnnotation("Relational:MaxIdentifierLength", 64);
modelBuilder.Entity("ErsatzTV.Core.Domain.Actor", b => modelBuilder.Entity("ErsatzTV.Core.Domain.Actor", b =>
@@ -0,0 +1,28 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ErsatzTV.Infrastructure.Sqlite.Migrations
{
/// <inheritdoc />
public partial class Reset_ExternalCollectionEtag : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("UPDATE PlexCollection SET Etag = NULL");
migrationBuilder.Sql("UPDATE PlexMediaSource SET LastCollectionsScan = NULL");
migrationBuilder.Sql("UPDATE EmbyCollection SET Etag = NULL");
migrationBuilder.Sql("UPDATE EmbyMediaSource SET LastCollectionsScan = NULL");
migrationBuilder.Sql("UPDATE JellyfinCollection SET Etag = NULL");
migrationBuilder.Sql("UPDATE JellyfinMediaSource SET LastCollectionsScan = NULL");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}
@@ -15,7 +15,7 @@ namespace ErsatzTV.Infrastructure.Sqlite.Migrations
protected override void BuildModel(ModelBuilder modelBuilder) protected override void BuildModel(ModelBuilder modelBuilder)
{ {
#pragma warning disable 612, 618 #pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "7.0.13"); modelBuilder.HasAnnotation("ProductVersion", "7.0.14");
modelBuilder.Entity("ErsatzTV.Core.Domain.Actor", b => modelBuilder.Entity("ErsatzTV.Core.Domain.Actor", b =>
{ {
@@ -733,6 +733,7 @@ public class EmbyTelevisionRepository : IEmbyTelevisionRepository
// tags // tags
foreach (Tag tag in metadata.Tags foreach (Tag tag in metadata.Tags
.Filter(g => incomingMetadata.Tags.All(g2 => g2.Name != g.Name)) .Filter(g => incomingMetadata.Tags.All(g2 => g2.Name != g.Name))
.Filter(g => g.ExternalCollectionId is null)
.ToList()) .ToList())
{ {
metadata.Tags.Remove(tag); metadata.Tags.Remove(tag);
@@ -737,6 +737,7 @@ public class JellyfinTelevisionRepository : IJellyfinTelevisionRepository
// tags // tags
foreach (Tag tag in metadata.Tags foreach (Tag tag in metadata.Tags
.Filter(g => incomingMetadata.Tags.All(g2 => g2.Name != g.Name)) .Filter(g => incomingMetadata.Tags.All(g2 => g2.Name != g.Name))
.Filter(g => g.ExternalCollectionId is null)
.ToList()) .ToList())
{ {
metadata.Tags.Remove(tag); metadata.Tags.Remove(tag);
@@ -318,6 +318,7 @@ public class PlexMovieLibraryScanner :
foreach (Tag tag in existingMetadata.Tags foreach (Tag tag in existingMetadata.Tags
.Filter(g => fullMetadata.Tags.All(g2 => g2.Name != g.Name)) .Filter(g => fullMetadata.Tags.All(g2 => g2.Name != g.Name))
.Filter(g => g.ExternalCollectionId is null)
.ToList()) .ToList())
{ {
existingMetadata.Tags.Remove(tag); existingMetadata.Tags.Remove(tag);
@@ -413,6 +413,7 @@ public class PlexTelevisionLibraryScanner :
foreach (Tag tag in existingMetadata.Tags foreach (Tag tag in existingMetadata.Tags
.Filter(g => fullMetadata.Tags.All(g2 => g2.Name != g.Name)) .Filter(g => fullMetadata.Tags.All(g2 => g2.Name != g.Name))
.Filter(g => g.ExternalCollectionId is null)
.ToList()) .ToList())
{ {
existingMetadata.Tags.Remove(tag); existingMetadata.Tags.Remove(tag);
@@ -479,6 +480,7 @@ public class PlexTelevisionLibraryScanner :
foreach (Tag tag in existingMetadata.Tags foreach (Tag tag in existingMetadata.Tags
.Filter(g => fullMetadata.Tags.All(g2 => g2.Name != g.Name)) .Filter(g => fullMetadata.Tags.All(g2 => g2.Name != g.Name))
.Filter(g => g.ExternalCollectionId is null)
.ToList()) .ToList())
{ {
existingMetadata.Tags.Remove(tag); existingMetadata.Tags.Remove(tag);
@@ -540,6 +542,7 @@ public class PlexTelevisionLibraryScanner :
foreach (Tag tag in existingMetadata.Tags foreach (Tag tag in existingMetadata.Tags
.Filter(g => fullMetadata.Tags.All(g2 => g2.Name != g.Name)) .Filter(g => fullMetadata.Tags.All(g2 => g2.Name != g.Name))
.Filter(g => g.ExternalCollectionId is null)
.ToList()) .ToList())
{ {
existingMetadata.Tags.Remove(tag); existingMetadata.Tags.Remove(tag);