„1080p" ist eine Angabe für den, der eine Stufe einstellt. Wer sich fragt,
ob es sich lohnt, dafür den Fernseher anzumachen, liest „Full HD". Die
Zeile sagt jetzt das Wort, der Tooltip den genauen Wert und die gemessene
Grösse: `1080p · 1920 × 800`.
**Es gab zwei Leitern, und sie waren sich uneinig.** `Benennung.AusHoehe`
machte aus 2160 ein „2160p", `FileNames.FassungAusHoehe` ein „4K" — auf
derselben Detailseite stand beides übereinander, ein paar Zeilen
auseinander. Die zweite ist weg; sie hatte ausserdem nur die Höhe und
vergab sich damit beim Kinoformat.
Gemessen an zwei echten Dateien: 1920×800 heisst „Full HD" (nur an der
Höhe gemessen hiesse es „HD", und daneben stünde ein 1280×720 mit
demselben Wort), 720×576 heisst „SD".
**1440p fällt unter Full HD.** „QHD" kennt kaum jemand, und ein fünftes
Wort für etwas zwischen zwei bekannten hilft beim Entscheiden nicht.
„8K" steht nur da, damit eine 8K-Datei nicht als 4K gemeldet wird.
**Der Client zerlegt nichts mehr.** Er las die Stufe bisher mit
`display.split(' · ')[0]` heraus — richtig, solange vor der Auflösung nie
etwas anderes steht. Jetzt kommen Wort und genauer Wert als eigene Felder.
**Die Fassung wird nicht mehr gespeichert, sondern gerechnet.** Sie stand
in der Spalte und war damit das, was beim letzten Scan galt: ein neues
Wort hätte keine bestehende Zeile erreicht. Jetzt hält die Spalte nur
noch, was im Dateinamen stand („Mobil"), und die Messung kommt frisch
dazu. Eine Migration räumt die alten gerechneten Werte weg.
**Nicht angefasst:** was eine *gewählte* Stufe ist statt einer gemessenen
— die Umkodierleiter, der Qualitätswähler im Spieler, die Stufen in den
Apps. Wer eine Stufe wählt, wählt eine Zahl.
Die Apps rechnen sich das Wort ohnehin selbst aus und sagen seit jeher
„4K" und „Full HD"; der Server ist ihnen jetzt angeglichen, nicht
umgekehrt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1079 lines
36 KiB
C#
1079 lines
36 KiB
C#
// <auto-generated />
|
|
using System;
|
|
using Flaro.Data;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
using Microsoft.EntityFrameworkCore.Migrations;
|
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
|
|
#nullable disable
|
|
|
|
namespace Flaro.Data.Migrations
|
|
{
|
|
[DbContext(typeof(FlaroContext))]
|
|
[Migration("20261007150601_Fassungsnamen")]
|
|
partial class Fassungsnamen
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
{
|
|
#pragma warning disable 612, 618
|
|
modelBuilder.HasAnnotation("ProductVersion", "10.0.12");
|
|
|
|
modelBuilder.Entity("Flaro.Core.Auth.AuthCode", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("ApprovedByUserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Code")
|
|
.IsRequired()
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("ConsumedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("DeviceId")
|
|
.IsRequired()
|
|
.HasMaxLength(128)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("DeviceName")
|
|
.IsRequired()
|
|
.HasMaxLength(128)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("ExpiresAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("HandleFingerprint")
|
|
.IsRequired()
|
|
.HasMaxLength(64)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("Code");
|
|
|
|
b.HasIndex("HandleFingerprint")
|
|
.IsUnique();
|
|
|
|
b.ToTable("AuthCodes");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Auth.DeviceToken", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("DeviceId")
|
|
.IsRequired()
|
|
.HasMaxLength(128)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("DeviceName")
|
|
.IsRequired()
|
|
.HasMaxLength(128)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("LastSeenAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("RevokedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("TokenFingerprint")
|
|
.IsRequired()
|
|
.HasMaxLength(64)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("TokenFingerprint")
|
|
.IsUnique();
|
|
|
|
b.HasIndex("UserId");
|
|
|
|
b.ToTable("DeviceTokens");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Libraries.Library", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Kind")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(128)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Path")
|
|
.IsRequired()
|
|
.HasMaxLength(1024)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("ReviewNewItems")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("SortOrder")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.ToTable("Libraries");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Credit", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Character")
|
|
.HasMaxLength(256)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("MovieId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int>("Order")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid>("PersonId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Role")
|
|
.IsRequired()
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("SeriesId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("MovieId");
|
|
|
|
b.HasIndex("PersonId");
|
|
|
|
b.HasIndex("SeriesId");
|
|
|
|
b.ToTable("Credits");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Episode", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("AddedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("EpisodeNumber")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("MetadataLanguage")
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Overview")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("PublishAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("SeasonNumber")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid>("SeriesId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("StillImage")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Title")
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("SeriesId", "SeasonNumber", "EpisodeNumber")
|
|
.IsUnique();
|
|
|
|
b.ToTable("Episodes");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Genre", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(64)
|
|
.HasColumnType("TEXT")
|
|
.UseCollation("NOCASE");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("Name")
|
|
.IsUnique();
|
|
|
|
b.ToTable("Genres");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.GenreLink", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("GenreId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("MovieId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("SeriesId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("MovieId");
|
|
|
|
b.HasIndex("SeriesId");
|
|
|
|
b.HasIndex("GenreId", "MovieId")
|
|
.IsUnique()
|
|
.HasFilter("\"MovieId\" IS NOT NULL");
|
|
|
|
b.HasIndex("GenreId", "SeriesId")
|
|
.IsUnique()
|
|
.HasFilter("\"SeriesId\" IS NOT NULL");
|
|
|
|
b.ToTable("GenreLinks");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.ItemTranslation", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("EpisodeId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("FetchedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Language")
|
|
.IsRequired()
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("MovieId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Overview")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("SeriesId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Tagline")
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Title")
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("EpisodeId", "Language")
|
|
.IsUnique()
|
|
.HasFilter("\"EpisodeId\" IS NOT NULL");
|
|
|
|
b.HasIndex("MovieId", "Language")
|
|
.IsUnique()
|
|
.HasFilter("\"MovieId\" IS NOT NULL");
|
|
|
|
b.HasIndex("SeriesId", "Language")
|
|
.IsUnique()
|
|
.HasFilter("\"SeriesId\" IS NOT NULL");
|
|
|
|
b.ToTable("Translations");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.MediaFile", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("BitRate")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Container")
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("Duration")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid?>("EpisodeId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("LibraryId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("MissingSince")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long>("ModifiedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid?>("MovieId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Path")
|
|
.IsRequired()
|
|
.HasMaxLength(1024)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("ProbedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long>("SeenAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long>("SizeBytes")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("VersionLabel")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("EpisodeId");
|
|
|
|
b.HasIndex("MovieId");
|
|
|
|
b.HasIndex("LibraryId", "Path")
|
|
.IsUnique();
|
|
|
|
b.ToTable("MediaFiles");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.MediaStream", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int?>("Channels")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Codec")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int?>("Height")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("Index")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<bool>("IsDefault")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<bool>("IsForced")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Kind")
|
|
.IsRequired()
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Language")
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("MediaFileId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Title")
|
|
.HasMaxLength(256)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int?>("Width")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("MediaFileId", "Index")
|
|
.IsUnique();
|
|
|
|
b.ToTable("MediaStreams");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Meldung", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Art")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("EpisodeId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("ErledigtAm")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid?>("ErledigtVon")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("GemeldetAm")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Kommentar")
|
|
.IsRequired()
|
|
.HasMaxLength(2000)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("MovieId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int?>("SeasonNumber")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid?>("SeriesId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("Stelle")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("EpisodeId");
|
|
|
|
b.HasIndex("MovieId");
|
|
|
|
b.HasIndex("SeriesId");
|
|
|
|
b.HasIndex("ErledigtAm", "GemeldetAm");
|
|
|
|
b.HasIndex("UserId", "GemeldetAm");
|
|
|
|
b.ToTable("Meldungen");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Movie", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("AddedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("BackdropImage")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("BackdropPinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("ChangedSince")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("ContentRating")
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("ImdbId")
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("LibraryId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("LogoImage")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("LogoPinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<bool>("MatchLocked")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("MetadataLanguage")
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("OriginalTitle")
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Overview")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("ParsedTitle")
|
|
.IsRequired()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int?>("ParsedYear")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("PosterImage")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("PosterPinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("PublishAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<double?>("Rating")
|
|
.HasColumnType("REAL");
|
|
|
|
b.Property<int?>("RuntimeMinutes")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<bool>("SortTitlePinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("SortTitleValue")
|
|
.IsRequired()
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Tagline")
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Title")
|
|
.IsRequired()
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("TitlePinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int?>("TmdbId")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int?>("Year")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("LibraryId", "MetadataLanguage");
|
|
|
|
b.HasIndex("LibraryId", "SortTitleValue");
|
|
|
|
b.HasIndex("LibraryId", "TmdbId")
|
|
.IsUnique()
|
|
.HasFilter("\"TmdbId\" IS NOT NULL");
|
|
|
|
b.ToTable("Movies");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Person", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Image")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(256)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int>("TmdbId")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("TmdbId")
|
|
.IsUnique();
|
|
|
|
b.ToTable("People");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Series", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("AddedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("BackdropImage")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("BackdropPinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("ChangedSince")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("ContentRating")
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("ImdbId")
|
|
.HasMaxLength(32)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("LibraryId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("LogoImage")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("LogoPinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<bool>("MatchLocked")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("MetadataLanguage")
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("OriginalTitle")
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Overview")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("ParsedTitle")
|
|
.IsRequired()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int?>("ParsedYear")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("PosterImage")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("PosterPinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("PublishAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<double?>("Rating")
|
|
.HasColumnType("REAL");
|
|
|
|
b.Property<int?>("RuntimeMinutes")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<bool>("SortTitlePinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("SortTitleValue")
|
|
.IsRequired()
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Tagline")
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Title")
|
|
.IsRequired()
|
|
.HasMaxLength(512)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("TitlePinned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int?>("TmdbId")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int?>("Year")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("LibraryId", "MetadataLanguage");
|
|
|
|
b.HasIndex("LibraryId", "SortTitleValue");
|
|
|
|
b.HasIndex("LibraryId", "TmdbId")
|
|
.IsUnique()
|
|
.HasFilter("\"TmdbId\" IS NOT NULL");
|
|
|
|
b.ToTable("Series");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Playback.Sehtag", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("EpisodeId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid?>("MovieId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<double>("Sekunden")
|
|
.HasColumnType("REAL");
|
|
|
|
b.Property<int>("Tag")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("EpisodeId");
|
|
|
|
b.HasIndex("MovieId");
|
|
|
|
b.HasIndex("UserId", "Tag");
|
|
|
|
b.HasIndex("UserId", "Tag", "EpisodeId")
|
|
.IsUnique()
|
|
.HasFilter("\"EpisodeId\" IS NOT NULL");
|
|
|
|
b.HasIndex("UserId", "Tag", "MovieId")
|
|
.IsUnique()
|
|
.HasFilter("\"MovieId\" IS NOT NULL");
|
|
|
|
b.ToTable("Sehtage");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Playback.UserItemState", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("Dismissed")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid?>("EpisodeId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("Favourite")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<bool>("InProgress")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("LastPlayedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid?>("MovieId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int>("PlayCount")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long>("Position")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int?>("Rating")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("Runtime")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid?>("SeriesId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("UpdatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("Watched")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("EpisodeId");
|
|
|
|
b.HasIndex("MovieId");
|
|
|
|
b.HasIndex("SeriesId");
|
|
|
|
b.HasIndex("UserId", "EpisodeId")
|
|
.IsUnique()
|
|
.HasFilter("\"EpisodeId\" IS NOT NULL");
|
|
|
|
b.HasIndex("UserId", "MovieId")
|
|
.IsUnique()
|
|
.HasFilter("\"MovieId\" IS NOT NULL");
|
|
|
|
b.HasIndex("UserId", "SeriesId")
|
|
.IsUnique()
|
|
.HasFilter("\"SeriesId\" IS NOT NULL");
|
|
|
|
b.HasIndex("UserId", "InProgress", "UpdatedAt");
|
|
|
|
b.ToTable("UserItemStates");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.ServerSetting", b =>
|
|
{
|
|
b.Property<string>("Key")
|
|
.HasMaxLength(128)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Value")
|
|
.IsRequired()
|
|
.HasMaxLength(4096)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Key");
|
|
|
|
b.ToTable("Settings");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Users.User", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("AvatarImage")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<bool>("IsAdministrator")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Language")
|
|
.HasMaxLength(16)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("PasswordHash")
|
|
.IsRequired()
|
|
.HasMaxLength(256)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("UserName")
|
|
.IsRequired()
|
|
.HasMaxLength(64)
|
|
.HasColumnType("TEXT")
|
|
.UseCollation("NOCASE");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("UserName")
|
|
.IsUnique();
|
|
|
|
b.ToTable("Users");
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Auth.DeviceToken", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Users.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Credit", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Library.Movie", null)
|
|
.WithMany()
|
|
.HasForeignKey("MovieId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Library.Person", null)
|
|
.WithMany()
|
|
.HasForeignKey("PersonId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Flaro.Core.Library.Series", null)
|
|
.WithMany()
|
|
.HasForeignKey("SeriesId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Episode", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Library.Series", null)
|
|
.WithMany()
|
|
.HasForeignKey("SeriesId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.GenreLink", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Library.Genre", null)
|
|
.WithMany()
|
|
.HasForeignKey("GenreId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("Flaro.Core.Library.Movie", null)
|
|
.WithMany()
|
|
.HasForeignKey("MovieId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Library.Series", null)
|
|
.WithMany()
|
|
.HasForeignKey("SeriesId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.MediaFile", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Libraries.Library", null)
|
|
.WithMany()
|
|
.HasForeignKey("LibraryId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.MediaStream", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Library.MediaFile", null)
|
|
.WithMany()
|
|
.HasForeignKey("MediaFileId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Meldung", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Library.Episode", null)
|
|
.WithMany()
|
|
.HasForeignKey("EpisodeId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Library.Movie", null)
|
|
.WithMany()
|
|
.HasForeignKey("MovieId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Library.Series", null)
|
|
.WithMany()
|
|
.HasForeignKey("SeriesId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Users.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Movie", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Libraries.Library", null)
|
|
.WithMany()
|
|
.HasForeignKey("LibraryId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Library.Series", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Libraries.Library", null)
|
|
.WithMany()
|
|
.HasForeignKey("LibraryId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Playback.Sehtag", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Library.Episode", null)
|
|
.WithMany()
|
|
.HasForeignKey("EpisodeId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Library.Movie", null)
|
|
.WithMany()
|
|
.HasForeignKey("MovieId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Users.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("Flaro.Core.Playback.UserItemState", b =>
|
|
{
|
|
b.HasOne("Flaro.Core.Library.Episode", null)
|
|
.WithMany()
|
|
.HasForeignKey("EpisodeId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Library.Movie", null)
|
|
.WithMany()
|
|
.HasForeignKey("MovieId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Library.Series", null)
|
|
.WithMany()
|
|
.HasForeignKey("SeriesId")
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
b.HasOne("Flaro.Core.Users.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
#pragma warning restore 612, 618
|
|
}
|
|
}
|
|
}
|