diff --git a/src/Ombi.Store/Migrations/ExternalMySql/20201212014227_Jellyfin.Designer.cs b/src/Ombi.Store/Migrations/ExternalMySql/20201212014227_Jellyfin.Designer.cs
new file mode 100644
index 000000000..19189c2e0
--- /dev/null
+++ b/src/Ombi.Store/Migrations/ExternalMySql/20201212014227_Jellyfin.Designer.cs
@@ -0,0 +1,506 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Ombi.Store.Context.Sqlite;
+
+namespace Ombi.Store.Migrations.ExternalSqlite
+{
+ [DbContext(typeof(ExternalSqliteContext))]
+ [Migration("20201212014227_Jellyfin")]
+ partial class Jellyfin
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "5.0.1");
+
+ modelBuilder.Entity("Ombi.Store.Entities.CouchPotatoCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("CouchPotatoCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.EmbyContent", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("AddedAt")
+ .HasColumnType("TEXT");
+
+ b.Property("EmbyId")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("ImdbId")
+ .HasColumnType("TEXT");
+
+ b.Property("ProviderId")
+ .HasColumnType("TEXT");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("TvDbId")
+ .HasColumnType("TEXT");
+
+ b.Property("Type")
+ .HasColumnType("INTEGER");
+
+ b.Property("Url")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.ToTable("EmbyContent");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.EmbyEpisode", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("AddedAt")
+ .HasColumnType("TEXT");
+
+ b.Property("EmbyId")
+ .HasColumnType("TEXT");
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("ImdbId")
+ .HasColumnType("TEXT");
+
+ b.Property("ParentId")
+ .HasColumnType("TEXT");
+
+ b.Property("ProviderId")
+ .HasColumnType("TEXT");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("TvDbId")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ParentId");
+
+ b.ToTable("EmbyEpisode");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinContent", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("AddedAt")
+ .HasColumnType("TEXT");
+
+ b.Property("ImdbId")
+ .HasColumnType("TEXT");
+
+ b.Property("JellyfinId")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("ProviderId")
+ .HasColumnType("TEXT");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("TvDbId")
+ .HasColumnType("TEXT");
+
+ b.Property("Type")
+ .HasColumnType("INTEGER");
+
+ b.Property("Url")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.ToTable("JellyfinContent");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinEpisode", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("AddedAt")
+ .HasColumnType("TEXT");
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("ImdbId")
+ .HasColumnType("TEXT");
+
+ b.Property("JellyfinId")
+ .HasColumnType("TEXT");
+
+ b.Property("ParentId")
+ .HasColumnType("TEXT");
+
+ b.Property("ProviderId")
+ .HasColumnType("TEXT");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("TvDbId")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ParentId");
+
+ b.ToTable("JellyfinEpisode");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.LidarrAlbumCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("AddedAt")
+ .HasColumnType("TEXT");
+
+ b.Property("ArtistId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ForeignAlbumId")
+ .HasColumnType("TEXT");
+
+ b.Property("Monitored")
+ .HasColumnType("INTEGER");
+
+ b.Property("PercentOfTracks")
+ .HasColumnType("TEXT");
+
+ b.Property("ReleaseDate")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("TrackCount")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("LidarrAlbumCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.LidarrArtistCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("ArtistId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ArtistName")
+ .HasColumnType("TEXT");
+
+ b.Property("ForeignArtistId")
+ .HasColumnType("TEXT");
+
+ b.Property("Monitored")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("LidarrArtistCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexEpisode", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("GrandparentKey")
+ .HasColumnType("INTEGER");
+
+ b.Property("Key")
+ .HasColumnType("INTEGER");
+
+ b.Property("ParentKey")
+ .HasColumnType("INTEGER");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GrandparentKey");
+
+ b.ToTable("PlexEpisode");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexSeasonsContent", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("ParentKey")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlexContentId")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlexServerContentId")
+ .HasColumnType("INTEGER");
+
+ b.Property("SeasonKey")
+ .HasColumnType("INTEGER");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PlexServerContentId");
+
+ b.ToTable("PlexSeasonsContent");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexServerContent", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("AddedAt")
+ .HasColumnType("TEXT");
+
+ b.Property("ImdbId")
+ .HasColumnType("TEXT");
+
+ b.Property("Key")
+ .HasColumnType("INTEGER");
+
+ b.Property("Quality")
+ .HasColumnType("TEXT");
+
+ b.Property("ReleaseYear")
+ .HasColumnType("TEXT");
+
+ b.Property("RequestId")
+ .HasColumnType("INTEGER");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("TvDbId")
+ .HasColumnType("TEXT");
+
+ b.Property("Type")
+ .HasColumnType("INTEGER");
+
+ b.Property("Url")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.ToTable("PlexServerContent");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.RadarrCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("HasFile")
+ .HasColumnType("INTEGER");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("RadarrCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.SickRageCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("TvDbId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("SickRageCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.SickRageEpisodeCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("TvDbId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("SickRageEpisodeCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.SonarrCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("TvDbId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("SonarrCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.SonarrEpisodeCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("HasFile")
+ .HasColumnType("INTEGER");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("TvDbId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("SonarrEpisodeCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.EmbyEpisode", b =>
+ {
+ b.HasOne("Ombi.Store.Entities.EmbyContent", "Series")
+ .WithMany("Episodes")
+ .HasForeignKey("ParentId")
+ .HasPrincipalKey("EmbyId");
+
+ b.Navigation("Series");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinEpisode", b =>
+ {
+ b.HasOne("Ombi.Store.Entities.JellyfinContent", "Series")
+ .WithMany("Episodes")
+ .HasForeignKey("ParentId")
+ .HasPrincipalKey("JellyfinId");
+
+ b.Navigation("Series");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexEpisode", b =>
+ {
+ b.HasOne("Ombi.Store.Entities.PlexServerContent", "Series")
+ .WithMany("Episodes")
+ .HasForeignKey("GrandparentKey")
+ .HasPrincipalKey("Key")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Series");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexSeasonsContent", b =>
+ {
+ b.HasOne("Ombi.Store.Entities.PlexServerContent", null)
+ .WithMany("Seasons")
+ .HasForeignKey("PlexServerContentId");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.EmbyContent", b =>
+ {
+ b.Navigation("Episodes");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinContent", b =>
+ {
+ b.Navigation("Episodes");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexServerContent", b =>
+ {
+ b.Navigation("Episodes");
+
+ b.Navigation("Seasons");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/Ombi.Store/Migrations/ExternalMySql/20201212014227_Jellyfin.cs b/src/Ombi.Store/Migrations/ExternalMySql/20201212014227_Jellyfin.cs
new file mode 100644
index 000000000..f1eb6ebcf
--- /dev/null
+++ b/src/Ombi.Store/Migrations/ExternalMySql/20201212014227_Jellyfin.cs
@@ -0,0 +1,76 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+using System;
+using System.Collections.Generic;
+
+namespace Ombi.Store.Migrations.ExternalSqlite
+{
+ public partial class Jellyfin : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "JellyfinContent",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+ Title = table.Column(nullable: true),
+ ProviderId = table.Column(nullable: true),
+ JellyfinId = table.Column(nullable: false),
+ Type = table.Column(nullable: false),
+ AddedAt = table.Column(nullable: false),
+ ImdbId = table.Column(nullable: true),
+ TheMovieDbId = table.Column(nullable: true),
+ TvDbId = table.Column(nullable: true),
+ Url = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_JellyfinContent", x => x.Id);
+ table.UniqueConstraint("AK_JellyfinContent_JellyfinId", x => x.JellyfinId);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "JellyfinEpisode",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+ Title = table.Column(nullable: true),
+ JellyfinId = table.Column(nullable: true),
+ EpisodeNumber = table.Column(nullable: false),
+ SeasonNumber = table.Column(nullable: false),
+ ParentId = table.Column(nullable: true),
+ ProviderId = table.Column(nullable: true),
+ AddedAt = table.Column(nullable: false),
+ TvDbId = table.Column(nullable: true),
+ ImdbId = table.Column(nullable: true),
+ TheMovieDbId = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_JellyfinEpisode", x => x.Id);
+ table.ForeignKey(
+ name: "FK_JellyfinEpisode_JellyfinContent_ParentId",
+ column: x => x.ParentId,
+ principalTable: "JellyfinContent",
+ principalColumn: "JellyfinId",
+ onDelete: ReferentialAction.Restrict);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_JellyfinEpisode_ParentId",
+ table: "JellyfinEpisode",
+ column: "ParentId");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "JellyfinContent");
+
+ migrationBuilder.DropTable(
+ name: "JellyfinEpisode");
+ }
+ }
+}
diff --git a/src/Ombi.Store/Migrations/ExternalMySql/ExternalMySqlContextModelSnapshot.cs b/src/Ombi.Store/Migrations/ExternalMySql/ExternalMySqlContextModelSnapshot.cs
index 890e24b76..70312e542 100644
--- a/src/Ombi.Store/Migrations/ExternalMySql/ExternalMySqlContextModelSnapshot.cs
+++ b/src/Ombi.Store/Migrations/ExternalMySql/ExternalMySqlContextModelSnapshot.cs
@@ -113,6 +113,88 @@ namespace Ombi.Store.Migrations.ExternalMySql
b.ToTable("EmbyEpisode");
});
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinContent", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ b.Property("AddedAt")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ImdbId")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("JellyfinId")
+ .IsRequired()
+ .HasColumnType("varchar(255) CHARACTER SET utf8mb4");
+
+ b.Property("ProviderId")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("Title")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("TvDbId")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("Type")
+ .HasColumnType("int");
+
+ b.Property("Url")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.HasKey("Id");
+
+ b.ToTable("JellyfinContent");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinEpisode", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ b.Property("AddedAt")
+ .HasColumnType("dateime(6)");
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("int");
+
+ b.Property("ImdbId")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("JellyfinId")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("ParentId")
+ .HasColumnType("varchar(255) CHARACTER SET utf8mb4");
+
+ b.Property("ProviderId")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("int");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("Title")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.Property("TvDbId")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ParentId");
+
+ b.ToTable("JellyfinEpisode");
+ });
+
modelBuilder.Entity("Ombi.Store.Entities.LidarrAlbumCache", b =>
{
b.Property("Id")
@@ -368,6 +450,18 @@ namespace Ombi.Store.Migrations.ExternalMySql
.WithMany("Episodes")
.HasForeignKey("ParentId")
.HasPrincipalKey("EmbyId");
+
+ b.Navigation("Series");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinEpisode", b =>
+ {
+ b.HasOne("Ombi.Store.Entities.JellyfinContent", "Series")
+ .WithMany("Episodes")
+ .HasForeignKey("ParentId")
+ .HasPrincipalKey("JellyfinId");
+
+ b.Navigation("Series");
});
modelBuilder.Entity("Ombi.Store.Entities.PlexEpisode", b =>
@@ -378,6 +472,8 @@ namespace Ombi.Store.Migrations.ExternalMySql
.HasPrincipalKey("Key")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Series");
});
modelBuilder.Entity("Ombi.Store.Entities.PlexSeasonsContent", b =>
@@ -386,6 +482,23 @@ namespace Ombi.Store.Migrations.ExternalMySql
.WithMany("Seasons")
.HasForeignKey("PlexServerContentId");
});
+
+ modelBuilder.Entity("Ombi.Store.Entities.EmbyContent", b =>
+ {
+ b.Navigation("Episodes");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinContent", b =>
+ {
+ b.Navigation("Episodes");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexServerContent", b =>
+ {
+ b.Navigation("Episodes");
+
+ b.Navigation("Seasons");
+ });
#pragma warning restore 612, 618
}
}