Actually fix profile images

This commit is contained in:
Patrick Barron 2020-06-13 16:38:17 -04:00
parent 1e1386bbc6
commit 3278015444
7 changed files with 65 additions and 61 deletions

View File

@ -52,7 +52,6 @@ namespace Jellyfin.Data.Entities
/// </summary>
[XmlIgnore]
[Required]
[ForeignKey("Id")]
public Guid UserId { get; protected set; }
/// <summary>

View File

@ -17,6 +17,8 @@ namespace Jellyfin.Data.Entities
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; protected set; }
public Guid? UserId { get; protected set; }
[Required]
[MaxLength(512)]
[StringLength(512)]

View File

@ -324,6 +324,7 @@ namespace Jellyfin.Data.Entities
/// <summary>
/// Gets or sets the user's profile image. Can be <c>null</c>.
/// </summary>
// [ForeignKey("UserId")]
public virtual ImageInfo ProfileImage { get; set; }
[Required]

View File

@ -1,5 +1,4 @@
#pragma warning disable CS1591
#pragma warning disable SA1601
// <auto-generated />
using System;
@ -12,7 +11,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace Jellyfin.Server.Implementations.Migrations
{
[DbContext(typeof(JellyfinDb))]
[Migration("20200613155524_AddUsers")]
[Migration("20200613202153_AddUsers")]
partial class AddUsers
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -107,8 +106,14 @@ namespace Jellyfin.Server.Implementations.Migrations
.HasColumnType("TEXT")
.HasMaxLength(512);
b.Property<Guid?>("UserId")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("UserId")
.IsUnique();
b.ToTable("ImageInfos");
});
@ -239,9 +244,6 @@ namespace Jellyfin.Server.Implementations.Migrations
b.Property<bool>("PlayDefaultAudioTrack")
.HasColumnType("INTEGER");
b.Property<int?>("ProfileImageId")
.HasColumnType("INTEGER");
b.Property<bool>("RememberAudioSelections")
.HasColumnType("INTEGER");
@ -272,8 +274,6 @@ namespace Jellyfin.Server.Implementations.Migrations
b.HasKey("Id");
b.HasIndex("ProfileImageId");
b.ToTable("Users");
});
@ -286,6 +286,13 @@ namespace Jellyfin.Server.Implementations.Migrations
.IsRequired();
});
modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
{
b.HasOne("Jellyfin.Data.Entities.User", null)
.WithOne("ProfileImage")
.HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId");
});
modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
{
b.HasOne("Jellyfin.Data.Entities.User", null)
@ -299,13 +306,6 @@ namespace Jellyfin.Server.Implementations.Migrations
.WithMany("Preferences")
.HasForeignKey("Preference_Preferences_Guid");
});
modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
{
b.HasOne("Jellyfin.Data.Entities.ImageInfo", "ProfileImage")
.WithMany()
.HasForeignKey("ProfileImageId");
});
#pragma warning restore 612, 618
}
}

View File

@ -10,21 +10,6 @@ namespace Jellyfin.Server.Implementations.Migrations
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "ImageInfos",
schema: "jellyfin",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Path = table.Column<string>(maxLength: 512, nullable: false),
LastModified = table.Column<DateTime>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ImageInfos", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Users",
schema: "jellyfin",
@ -57,20 +42,12 @@ namespace Jellyfin.Server.Implementations.Migrations
MaxParentalAgeRating = table.Column<int>(nullable: true),
RemoteClientBitrateLimit = table.Column<int>(nullable: true),
InternalId = table.Column<long>(nullable: false),
ProfileImageId = table.Column<int>(nullable: true),
SyncPlayAccess = table.Column<int>(nullable: false),
RowVersion = table.Column<uint>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Users", x => x.Id);
table.ForeignKey(
name: "FK_Users_ImageInfos_ProfileImageId",
column: x => x.ProfileImageId,
principalSchema: "jellyfin",
principalTable: "ImageInfos",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
@ -97,6 +74,29 @@ namespace Jellyfin.Server.Implementations.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "ImageInfos",
schema: "jellyfin",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("Sqlite:Autoincrement", true),
UserId = table.Column<Guid>(nullable: true),
Path = table.Column<string>(maxLength: 512, nullable: false),
LastModified = table.Column<DateTime>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ImageInfos", x => x.Id);
table.ForeignKey(
name: "FK_ImageInfos_Users_UserId",
column: x => x.UserId,
principalSchema: "jellyfin",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "Permissions",
schema: "jellyfin",
@ -151,6 +151,13 @@ namespace Jellyfin.Server.Implementations.Migrations
table: "AccessSchedules",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_ImageInfos_UserId",
schema: "jellyfin",
table: "ImageInfos",
column: "UserId",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Permissions_Permission_Permissions_Guid",
schema: "jellyfin",
@ -162,12 +169,6 @@ namespace Jellyfin.Server.Implementations.Migrations
schema: "jellyfin",
table: "Preferences",
column: "Preference_Preferences_Guid");
migrationBuilder.CreateIndex(
name: "IX_Users_ProfileImageId",
schema: "jellyfin",
table: "Users",
column: "ProfileImageId");
}
protected override void Down(MigrationBuilder migrationBuilder)
@ -176,6 +177,10 @@ namespace Jellyfin.Server.Implementations.Migrations
name: "AccessSchedules",
schema: "jellyfin");
migrationBuilder.DropTable(
name: "ImageInfos",
schema: "jellyfin");
migrationBuilder.DropTable(
name: "Permissions",
schema: "jellyfin");
@ -187,10 +192,6 @@ namespace Jellyfin.Server.Implementations.Migrations
migrationBuilder.DropTable(
name: "Users",
schema: "jellyfin");
migrationBuilder.DropTable(
name: "ImageInfos",
schema: "jellyfin");
}
}
}

View File

@ -102,8 +102,14 @@ namespace Jellyfin.Server.Implementations.Migrations
.HasColumnType("TEXT")
.HasMaxLength(512);
b.Property<Guid?>("UserId")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("UserId")
.IsUnique();
b.ToTable("ImageInfos");
});
@ -234,9 +240,6 @@ namespace Jellyfin.Server.Implementations.Migrations
b.Property<bool>("PlayDefaultAudioTrack")
.HasColumnType("INTEGER");
b.Property<int?>("ProfileImageId")
.HasColumnType("INTEGER");
b.Property<bool>("RememberAudioSelections")
.HasColumnType("INTEGER");
@ -267,8 +270,6 @@ namespace Jellyfin.Server.Implementations.Migrations
b.HasKey("Id");
b.HasIndex("ProfileImageId");
b.ToTable("Users");
});
@ -281,6 +282,13 @@ namespace Jellyfin.Server.Implementations.Migrations
.IsRequired();
});
modelBuilder.Entity("Jellyfin.Data.Entities.ImageInfo", b =>
{
b.HasOne("Jellyfin.Data.Entities.User", null)
.WithOne("ProfileImage")
.HasForeignKey("Jellyfin.Data.Entities.ImageInfo", "UserId");
});
modelBuilder.Entity("Jellyfin.Data.Entities.Permission", b =>
{
b.HasOne("Jellyfin.Data.Entities.User", null)
@ -294,13 +302,6 @@ namespace Jellyfin.Server.Implementations.Migrations
.WithMany("Preferences")
.HasForeignKey("Preference_Preferences_Guid");
});
modelBuilder.Entity("Jellyfin.Data.Entities.User", b =>
{
b.HasOne("Jellyfin.Data.Entities.ImageInfo", "ProfileImage")
.WithMany()
.HasForeignKey("ProfileImageId");
});
#pragma warning restore 612, 618
}
}

View File

@ -671,7 +671,7 @@ namespace Jellyfin.Server.Implementations.Users
public void ClearProfileImage(User user)
{
var dbContext = _dbProvider.CreateContext();
dbContext.ImageInfos.Remove(user.ProfileImage);
dbContext.Remove(user.ProfileImage);
dbContext.SaveChanges();
}