mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-29 13:26:44 +01:00
Fixed AncestorIds and applied review comments
This commit is contained in:
@@ -83,7 +83,7 @@ public sealed class BaseItemRepository(IDbContextFactory<JellyfinDbContext> dbPr
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
|
||||
context.ItemValues.Where(e => e.Type == 6).ExecuteDelete();
|
||||
context.ItemValues.AddRange(context.ItemValues.Where(e => e.Type == 4).Select(e => new Data.Entities.ItemValue()
|
||||
context.ItemValues.AddRange(context.ItemValues.Where(e => e.Type == 4).Select(e => new ItemValue()
|
||||
{
|
||||
CleanValue = e.CleanValue,
|
||||
ItemId = e.ItemId,
|
||||
@@ -93,7 +93,7 @@ public sealed class BaseItemRepository(IDbContextFactory<JellyfinDbContext> dbPr
|
||||
}));
|
||||
|
||||
context.ItemValues.AddRange(
|
||||
context.AncestorIds.Where(e => e.AncestorIdText != null).Join(context.ItemValues.Where(e => e.Value != null && e.Type == 4), e => e.Id, e => e.ItemId, (e, f) => new Data.Entities.ItemValue()
|
||||
context.AncestorIds.Join(context.ItemValues.Where(e => e.Value != null && e.Type == 4), e => e.ParentItemId, e => e.ItemId, (e, f) => new ItemValue()
|
||||
{
|
||||
CleanValue = f.CleanValue,
|
||||
ItemId = e.ItemId,
|
||||
@@ -893,31 +893,31 @@ public sealed class BaseItemRepository(IDbContextFactory<JellyfinDbContext> dbPr
|
||||
if (!string.IsNullOrWhiteSpace(filter.HasNoAudioTrackWithLanguage))
|
||||
{
|
||||
baseQuery = baseQuery
|
||||
.Where(e => !e.MediaStreams!.Any(e => e.StreamType == "Audio" && e.Language == filter.HasNoAudioTrackWithLanguage));
|
||||
.Where(e => !e.MediaStreams!.Any(e => e.StreamType == MediaStreamTypeEntity.Audio && e.Language == filter.HasNoAudioTrackWithLanguage));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.HasNoInternalSubtitleTrackWithLanguage))
|
||||
{
|
||||
baseQuery = baseQuery
|
||||
.Where(e => !e.MediaStreams!.Any(e => e.StreamType == "Subtitle" && !e.IsExternal && e.Language == filter.HasNoInternalSubtitleTrackWithLanguage));
|
||||
.Where(e => !e.MediaStreams!.Any(e => e.StreamType == MediaStreamTypeEntity.Subtitle && !e.IsExternal && e.Language == filter.HasNoInternalSubtitleTrackWithLanguage));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.HasNoExternalSubtitleTrackWithLanguage))
|
||||
{
|
||||
baseQuery = baseQuery
|
||||
.Where(e => !e.MediaStreams!.Any(e => e.StreamType == "Subtitle" && e.IsExternal && e.Language == filter.HasNoExternalSubtitleTrackWithLanguage));
|
||||
.Where(e => !e.MediaStreams!.Any(e => e.StreamType == MediaStreamTypeEntity.Subtitle && e.IsExternal && e.Language == filter.HasNoExternalSubtitleTrackWithLanguage));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.HasNoSubtitleTrackWithLanguage))
|
||||
{
|
||||
baseQuery = baseQuery
|
||||
.Where(e => !e.MediaStreams!.Any(e => e.StreamType == "Subtitle" && e.Language == filter.HasNoSubtitleTrackWithLanguage));
|
||||
.Where(e => !e.MediaStreams!.Any(e => e.StreamType == MediaStreamTypeEntity.Subtitle && e.Language == filter.HasNoSubtitleTrackWithLanguage));
|
||||
}
|
||||
|
||||
if (filter.HasSubtitles.HasValue)
|
||||
{
|
||||
baseQuery = baseQuery
|
||||
.Where(e => e.MediaStreams!.Any(e => e.StreamType == "Subtitle") == filter.HasSubtitles.Value);
|
||||
.Where(e => e.MediaStreams!.Any(e => e.StreamType == MediaStreamTypeEntity.Subtitle) == filter.HasSubtitles.Value);
|
||||
}
|
||||
|
||||
if (filter.HasChapterImages.HasValue)
|
||||
@@ -1062,7 +1062,7 @@ public sealed class BaseItemRepository(IDbContextFactory<JellyfinDbContext> dbPr
|
||||
|
||||
if (filter.AncestorIds.Length > 0)
|
||||
{
|
||||
baseQuery = baseQuery.Where(e => e.AncestorIds!.Any(f => filter.AncestorIds.Contains(f.Id)));
|
||||
baseQuery = baseQuery.Where(e => e.AncestorIds!.Any(f => filter.AncestorIds.Contains(f.ParentItemId)));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.AncestorWithPresentationUniqueKey))
|
||||
@@ -1273,9 +1273,7 @@ public sealed class BaseItemRepository(IDbContextFactory<JellyfinDbContext> dbPr
|
||||
{
|
||||
entity.AncestorIds.Add(new AncestorId()
|
||||
{
|
||||
Item = entity,
|
||||
AncestorIdText = ancestorId.ToString(),
|
||||
Id = ancestorId,
|
||||
ParentItemId = ancestorId,
|
||||
ItemId = entity.Id
|
||||
});
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ public class MediaAttachmentRepository(IDbContextFactory<JellyfinDbContext> dbPr
|
||||
query = query.Where(e => e.Index == filter.Index);
|
||||
}
|
||||
|
||||
return query.ToList().Select(Map).ToImmutableArray();
|
||||
return query.AsEnumerable().Select(Map).ToImmutableArray();
|
||||
}
|
||||
|
||||
private MediaAttachment Map(AttachmentStreamInfo attachment)
|
||||
|
||||
@@ -70,7 +70,8 @@ public class MediaStreamRepository(IDbContextFactory<JellyfinDbContext> dbProvid
|
||||
|
||||
if (filter.Type.HasValue)
|
||||
{
|
||||
query = query.Where(e => e.StreamType == filter.Type.ToString());
|
||||
var typeValue = (MediaStreamTypeEntity)filter.Type.Value;
|
||||
query = query.Where(e => e.StreamType!.Value == typeValue);
|
||||
}
|
||||
|
||||
return query;
|
||||
@@ -82,7 +83,7 @@ public class MediaStreamRepository(IDbContextFactory<JellyfinDbContext> dbProvid
|
||||
dto.Index = entity.StreamIndex;
|
||||
if (entity.StreamType != null)
|
||||
{
|
||||
dto.Type = Enum.Parse<MediaStreamType>(entity.StreamType);
|
||||
dto.Type = (MediaStreamType)entity.StreamType;
|
||||
}
|
||||
|
||||
dto.IsAVC = entity.IsAvc;
|
||||
@@ -151,7 +152,7 @@ public class MediaStreamRepository(IDbContextFactory<JellyfinDbContext> dbProvid
|
||||
Item = null!,
|
||||
ItemId = itemId,
|
||||
StreamIndex = dto.Index,
|
||||
StreamType = dto.Type.ToString(),
|
||||
StreamType = (MediaStreamTypeEntity)dto.Type,
|
||||
IsAvc = dto.IsAVC.GetValueOrDefault(),
|
||||
|
||||
Codec = dto.Codec,
|
||||
|
||||
@@ -34,7 +34,7 @@ public class PeopleRepository(IDbContextFactory<JellyfinDbContext> dbProvider) :
|
||||
dbQuery = dbQuery.Take(filter.Limit);
|
||||
}
|
||||
|
||||
return dbQuery.ToList().Select(Map).ToImmutableArray();
|
||||
return dbQuery.AsEnumerable().Select(Map).ToImmutableArray();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
1536
Jellyfin.Server.Implementations/Migrations/20241009231203_FixedAncestorIds.Designer.cs
generated
Normal file
1536
Jellyfin.Server.Implementations/Migrations/20241009231203_FixedAncestorIds.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,89 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Jellyfin.Server.Implementations.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class FixedAncestorIds : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_AncestorIds_BaseItems_ItemId",
|
||||
table: "AncestorIds");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_AncestorIds_ItemId_AncestorIdText",
|
||||
table: "AncestorIds");
|
||||
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "AncestorIdText",
|
||||
table: "AncestorIds",
|
||||
newName: "BaseItemEntityId");
|
||||
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "Id",
|
||||
table: "AncestorIds",
|
||||
newName: "ParentItemId");
|
||||
|
||||
migrationBuilder.RenameIndex(
|
||||
name: "IX_AncestorIds_Id",
|
||||
table: "AncestorIds",
|
||||
newName: "IX_AncestorIds_ParentItemId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_AncestorIds_BaseItemEntityId",
|
||||
table: "AncestorIds",
|
||||
column: "BaseItemEntityId");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_AncestorIds_BaseItems_BaseItemEntityId",
|
||||
table: "AncestorIds",
|
||||
column: "BaseItemEntityId",
|
||||
principalTable: "BaseItems",
|
||||
principalColumn: "Id");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_AncestorIds_BaseItems_BaseItemEntityId",
|
||||
table: "AncestorIds");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_AncestorIds_BaseItemEntityId",
|
||||
table: "AncestorIds");
|
||||
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "BaseItemEntityId",
|
||||
table: "AncestorIds",
|
||||
newName: "AncestorIdText");
|
||||
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "ParentItemId",
|
||||
table: "AncestorIds",
|
||||
newName: "Id");
|
||||
|
||||
migrationBuilder.RenameIndex(
|
||||
name: "IX_AncestorIds_ParentItemId",
|
||||
table: "AncestorIds",
|
||||
newName: "IX_AncestorIds_Id");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_AncestorIds_ItemId_AncestorIdText",
|
||||
table: "AncestorIds",
|
||||
columns: new[] { "ItemId", "AncestorIdText" });
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_AncestorIds_BaseItems_ItemId",
|
||||
table: "AncestorIds",
|
||||
column: "ItemId",
|
||||
principalTable: "BaseItems",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
}
|
||||
}
|
||||
1536
Jellyfin.Server.Implementations/Migrations/20241009231912_FixedStreamType.Designer.cs
generated
Normal file
1536
Jellyfin.Server.Implementations/Migrations/20241009231912_FixedStreamType.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,36 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Jellyfin.Server.Implementations.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class FixedStreamType : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<int>(
|
||||
name: "StreamType",
|
||||
table: "MediaStreamInfos",
|
||||
type: "INTEGER",
|
||||
nullable: true,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "TEXT",
|
||||
oldNullable: true);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "StreamType",
|
||||
table: "MediaStreamInfos",
|
||||
type: "TEXT",
|
||||
nullable: true,
|
||||
oldClrType: typeof(int),
|
||||
oldType: "INTEGER",
|
||||
oldNullable: true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -95,17 +95,17 @@ namespace Jellyfin.Server.Implementations.Migrations
|
||||
b.Property<Guid>("ItemId")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<Guid>("Id")
|
||||
b.Property<Guid>("ParentItemId")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("AncestorIdText")
|
||||
b.Property<Guid?>("BaseItemEntityId")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasKey("ItemId", "Id");
|
||||
b.HasKey("ItemId", "ParentItemId");
|
||||
|
||||
b.HasIndex("Id");
|
||||
b.HasIndex("BaseItemEntityId");
|
||||
|
||||
b.HasIndex("ItemId", "AncestorIdText");
|
||||
b.HasIndex("ParentItemId");
|
||||
|
||||
b.ToTable("AncestorIds");
|
||||
});
|
||||
@@ -865,8 +865,8 @@ namespace Jellyfin.Server.Implementations.Migrations
|
||||
b.Property<int>("SampleRate")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("StreamType")
|
||||
.HasColumnType("TEXT");
|
||||
b.Property<int?>("StreamType")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("TimeBase")
|
||||
.IsRequired()
|
||||
@@ -1304,13 +1304,9 @@ namespace Jellyfin.Server.Implementations.Migrations
|
||||
|
||||
modelBuilder.Entity("Jellyfin.Data.Entities.AncestorId", b =>
|
||||
{
|
||||
b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", "Item")
|
||||
b.HasOne("Jellyfin.Data.Entities.BaseItemEntity", null)
|
||||
.WithMany("AncestorIds")
|
||||
.HasForeignKey("ItemId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Item");
|
||||
.HasForeignKey("BaseItemEntityId");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Jellyfin.Data.Entities.AttachmentStreamInfo", b =>
|
||||
|
||||
@@ -13,8 +13,7 @@ public class AncestorIdConfiguration : IEntityTypeConfiguration<AncestorId>
|
||||
/// <inheritdoc/>
|
||||
public void Configure(EntityTypeBuilder<AncestorId> builder)
|
||||
{
|
||||
builder.HasKey(e => new { e.ItemId, e.Id });
|
||||
builder.HasIndex(e => e.Id);
|
||||
builder.HasIndex(e => new { e.ItemId, e.AncestorIdText });
|
||||
builder.HasKey(e => new { e.ItemId, e.ParentItemId });
|
||||
builder.HasIndex(e => e.ParentItemId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user