Media server entities into abstract classes

This commit is contained in:
Florian Dupret 2022-01-11 15:11:18 +01:00
commit aeeba5b22d
11 changed files with 90 additions and 107 deletions

View file

@ -914,10 +914,10 @@ namespace Ombi.Schedule.Jobs.Ombi
var series = new List<PlexServerContent>(); var series = new List<PlexServerContent>();
foreach (var plexEpisode in plexContent) foreach (var plexEpisode in plexContent)
{ {
var alreadyAdded = series.FirstOrDefault(x => x.Key == plexEpisode.Series.Key); var alreadyAdded = series.FirstOrDefault(x => x.Key == plexEpisode.PlexSeries.Key);
if (alreadyAdded != null) if (alreadyAdded != null)
{ {
var episodeExists = alreadyAdded.Episodes.Any(x => x.Key == plexEpisode.Key); var episodeExists = alreadyAdded.PlexEpisodes.Any(x => x.Key == plexEpisode.Key);
if (!episodeExists) if (!episodeExists)
{ {
alreadyAdded.Episodes.Add(plexEpisode); alreadyAdded.Episodes.Add(plexEpisode);
@ -925,8 +925,8 @@ namespace Ombi.Schedule.Jobs.Ombi
} }
else else
{ {
plexEpisode.Series.Episodes = new List<PlexEpisode> { plexEpisode }; plexEpisode.Series.Episodes = new List<IMediaServerEpisode> { plexEpisode };
series.Add(plexEpisode.Series); series.Add(plexEpisode.PlexSeries);
} }
} }
@ -1042,18 +1042,18 @@ namespace Ombi.Schedule.Jobs.Ombi
var series = new List<EmbyContent>(); var series = new List<EmbyContent>();
foreach (var episode in embyContent) foreach (var episode in embyContent)
{ {
var alreadyAdded = series.FirstOrDefault(x => x.EmbyId == episode.Series.EmbyId); var alreadyAdded = series.FirstOrDefault(x => x.EmbyId == episode.EmbySeries.EmbyId);
if (alreadyAdded != null) if (alreadyAdded != null)
{ {
alreadyAdded.Episodes.Add(episode); alreadyAdded.Episodes.Add(episode);
} }
else else
{ {
episode.Series.Episodes = new List<EmbyEpisode> episode.Series.Episodes = new List<IMediaServerEpisode>
{ {
episode episode
}; };
series.Add(episode.Series); series.Add(episode.EmbySeries);
} }
} }
@ -1145,18 +1145,18 @@ namespace Ombi.Schedule.Jobs.Ombi
var series = new List<JellyfinContent>(); var series = new List<JellyfinContent>();
foreach (var episode in jellyfinContent) foreach (var episode in jellyfinContent)
{ {
var alreadyAdded = series.FirstOrDefault(x => x.JellyfinId == episode.Series.JellyfinId); var alreadyAdded = series.FirstOrDefault(x => x.JellyfinId == episode.JellyfinSeries.JellyfinId);
if (alreadyAdded != null) if (alreadyAdded != null)
{ {
alreadyAdded.Episodes.Add(episode); alreadyAdded.Episodes.Add(episode);
} }
else else
{ {
episode.Series.Episodes = new List<JellyfinEpisode> episode.Series.Episodes = new List<IMediaServerEpisode>
{ {
episode episode
}; };
series.Add(episode.Series); series.Add(episode.JellyfinSeries);
} }
} }

View file

@ -106,7 +106,7 @@ namespace Ombi.Schedule.Jobs.Plex
// Let's try and match the series by name // Let's try and match the series by name
seriesEpisodes = plexEpisodes.Where(x => seriesEpisodes = plexEpisodes.Where(x =>
x.Series.Title == child.Title && x.Series.Title == child.Title &&
x.Series.ReleaseYear == child.ParentRequest.ReleaseDate.Year.ToString()); x.PlexSeries.ReleaseYear == child.ParentRequest.ReleaseDate.Year.ToString());
} }

View file

@ -1,4 +1,5 @@
using System.IO; using System.Collections.Generic;
using System.IO;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Ombi.Helpers; using Ombi.Helpers;
using Ombi.Store.Entities; using Ombi.Store.Entities;
@ -42,20 +43,20 @@ namespace Ombi.Store.Context
protected override void OnModelCreating(ModelBuilder builder) protected override void OnModelCreating(ModelBuilder builder)
{ {
builder.Entity<PlexServerContent>().HasMany(x => x.Episodes) builder.Entity<PlexServerContent>().HasMany(x => (ICollection<PlexEpisode>) x.Episodes)
.WithOne(x => x.Series) .WithOne(x => (PlexServerContent) x.Series)
.HasPrincipalKey(x => x.Key) .HasPrincipalKey(x => x.Key)
.HasForeignKey(x => x.GrandparentKey); .HasForeignKey(x => x.GrandparentKey);
builder.Entity<EmbyEpisode>() builder.Entity<EmbyEpisode>()
.HasOne(p => p.Series) .HasOne(p => (EmbyContent) p.Series)
.WithMany(b => b.Episodes) .WithMany(b => (ICollection<EmbyEpisode>) b.Episodes)
.HasPrincipalKey(x => x.EmbyId) .HasPrincipalKey(x => x.EmbyId)
.HasForeignKey(p => p.ParentId); .HasForeignKey(p => p.ParentId);
builder.Entity<JellyfinEpisode>() builder.Entity<JellyfinEpisode>()
.HasOne(p => p.Series) .HasOne(p => (JellyfinContent) p.Series)
.WithMany(b => b.Episodes) .WithMany(b => (ICollection<JellyfinEpisode>) b.Episodes)
.HasPrincipalKey(x => x.JellyfinId) .HasPrincipalKey(x => x.JellyfinId)
.HasForeignKey(p => p.ParentId); .HasForeignKey(p => p.ParentId);

View file

@ -32,34 +32,14 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Ombi.Store.Entities namespace Ombi.Store.Entities
{ {
[Table("EmbyContent")] [Table("EmbyContent")]
public class EmbyContent : Entity, IMediaServerContent<EmbyEpisode> public class EmbyContent : MediaServerContent
{ {
public string Title { get; set; }
/// <summary> /// <summary>
/// OBSOLETE, Cannot delete due to DB migration issues with SQLite /// OBSOLETE, Cannot delete due to DB migration issues with SQLite
/// </summary> /// </summary>
public string ProviderId { get; set; } public string ProviderId { get; set; }
public string EmbyId { get; set; } public string EmbyId { get; set; }
public MediaType Type { get; set; }
public DateTime AddedAt { get; set; }
public string ImdbId { get; set; }
public string TheMovieDbId { get; set; }
public string TvDbId { get; set; }
public string Url { get; set; }
public ICollection<EmbyEpisode> Episodes { get; set; }
[NotMapped]
public bool HasImdb => !string.IsNullOrEmpty(ImdbId);
[NotMapped]
public bool HasTvDb => !string.IsNullOrEmpty(TvDbId);
[NotMapped]
public bool HasTheMovieDb => !string.IsNullOrEmpty(TheMovieDbId);
} }
} }

View file

@ -32,12 +32,9 @@ using Microsoft.EntityFrameworkCore.Metadata;
namespace Ombi.Store.Entities namespace Ombi.Store.Entities
{ {
[Table("EmbyEpisode")] [Table("EmbyEpisode")]
public class EmbyEpisode : Entity, IMediaServerEpisode<EmbyContent> public class EmbyEpisode : MediaServerEpisode
{ {
public string Title { get; set; }
public string EmbyId { get; set; } public string EmbyId { get; set; }
public int EpisodeNumber { get; set; }
public int SeasonNumber { get; set; }
public string ParentId { get; set; } public string ParentId { get; set; }
/// <summary> /// <summary>
/// NOT USED /// NOT USED
@ -47,7 +44,11 @@ namespace Ombi.Store.Entities
public string TvDbId { get; set; } public string TvDbId { get; set; }
public string ImdbId { get; set; } public string ImdbId { get; set; }
public string TheMovieDbId { get; set; } public string TheMovieDbId { get; set; }
[NotMapped]
public EmbyContent Series { get; set; } public EmbyContent EmbySeries
{
get => (EmbyContent)Series;
set => Series = value;
}
} }
} }

View file

@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Ombi.Store.Entities namespace Ombi.Store.Entities
{ {
public interface IMediaServerContent<IMediaServerEpisode> public interface IMediaServerContent
{ {
public string Title { get; set; } public string Title { get; set; }
public string ImdbId { get; set; } public string ImdbId { get; set; }
@ -28,7 +28,7 @@ namespace Ombi.Store.Entities
public bool HasTheMovieDb => !string.IsNullOrEmpty(TheMovieDbId); public bool HasTheMovieDb => !string.IsNullOrEmpty(TheMovieDbId);
} }
public interface IMediaServerEpisode<IMediaServerContent> public interface IMediaServerEpisode
{ {
public int EpisodeNumber { get; set; } public int EpisodeNumber { get; set; }
public int SeasonNumber { get; set; } public int SeasonNumber { get; set; }

View file

@ -32,34 +32,14 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Ombi.Store.Entities namespace Ombi.Store.Entities
{ {
[Table("JellyfinContent")] [Table("JellyfinContent")]
public class JellyfinContent : Entity, IMediaServerContent<JellyfinEpisode> public class JellyfinContent : MediaServerContent
{ {
public string Title { get; set; }
/// <summary> /// <summary>
/// OBSOLETE, Cannot delete due to DB migration issues with SQLite /// OBSOLETE, Cannot delete due to DB migration issues with SQLite
/// </summary> /// </summary>
public string ProviderId { get; set; } public string ProviderId { get; set; }
public string JellyfinId { get; set; } public string JellyfinId { get; set; }
public MediaType Type { get; set; }
public DateTime AddedAt { get; set; }
public string ImdbId { get; set; }
public string TheMovieDbId { get; set; }
public string TvDbId { get; set; }
public string Url { get; set; }
public ICollection<JellyfinEpisode> Episodes { get; set; }
[NotMapped]
public bool HasImdb => !string.IsNullOrEmpty(ImdbId);
[NotMapped]
public bool HasTvDb => !string.IsNullOrEmpty(TvDbId);
[NotMapped]
public bool HasTheMovieDb => !string.IsNullOrEmpty(TheMovieDbId);
} }
} }

View file

@ -32,12 +32,9 @@ using Microsoft.EntityFrameworkCore.Metadata;
namespace Ombi.Store.Entities namespace Ombi.Store.Entities
{ {
[Table("JellyfinEpisode")] [Table("JellyfinEpisode")]
public class JellyfinEpisode : Entity, IMediaServerEpisode<JellyfinContent> public class JellyfinEpisode : MediaServerEpisode
{ {
public string Title { get; set; }
public string JellyfinId { get; set; } public string JellyfinId { get; set; }
public int EpisodeNumber { get; set; }
public int SeasonNumber { get; set; }
public string ParentId { get; set; } public string ParentId { get; set; }
/// <summary> /// <summary>
/// NOT USED /// NOT USED
@ -47,7 +44,11 @@ namespace Ombi.Store.Entities
public string TvDbId { get; set; } public string TvDbId { get; set; }
public string ImdbId { get; set; } public string ImdbId { get; set; }
public string TheMovieDbId { get; set; } public string TheMovieDbId { get; set; }
[NotMapped]
public JellyfinContent Series { get; set; } public JellyfinContent JellyfinSeries
{
get => (JellyfinContent)Series;
set => Series = value;
}
} }
} }

View file

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
namespace Ombi.Store.Entities
{
public abstract class MediaServerContent: Entity, IMediaServerContent
{
public string Title { get; set; }
public string ImdbId { get; set; }
public string TvDbId { get; set; }
public string TheMovieDbId { get; set; }
public MediaType Type { get; set; }
public string Url { get; set; }
public ICollection<IMediaServerEpisode> Episodes { get; set; }
public DateTime AddedAt { get; set; }
[NotMapped]
public bool HasImdb => !string.IsNullOrEmpty(ImdbId);
[NotMapped]
public bool HasTvDb => !string.IsNullOrEmpty(TvDbId);
[NotMapped]
public bool HasTheMovieDb => !string.IsNullOrEmpty(TheMovieDbId);
}
public abstract class MediaServerEpisode: Entity, IMediaServerEpisode
{
public int EpisodeNumber { get; set; }
public int SeasonNumber { get; set; }
public string Title { get; set; }
public IMediaServerContent Series { get; set; }
}
}

View file

@ -3,28 +3,22 @@
namespace Ombi.Store.Entities namespace Ombi.Store.Entities
{ {
[Table("PlexEpisode")] [Table("PlexEpisode")]
public class PlexEpisode : Entity, IMediaServerEpisode<PlexServerContent> public class PlexEpisode : MediaServerEpisode
{ {
public int EpisodeNumber { get; set; }
public int SeasonNumber { get; set; }
public int Key { get; set; } // RatingKey public int Key { get; set; } // RatingKey
public string Title { get; set; }
/// <summary>
/// The Season key
/// </summary>
/// <value> /// <value>
/// The parent key. /// The parent key.
/// </value> /// </value>
public int ParentKey { get; set; } public int ParentKey { get; set; }
/// <summary>
/// The Series key
/// </summary>
/// <value> /// <value>
/// The grandparent key. /// The grandparent key.
/// </value> /// </value>
public int GrandparentKey { get; set; } public int GrandparentKey { get; set; }
[NotMapped]
public PlexServerContent PlexSeries
public PlexServerContent Series { get; set; } {
get => (PlexServerContent)Series;
set => Series = value;
}
} }
} }

View file

@ -32,38 +32,25 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Ombi.Store.Entities namespace Ombi.Store.Entities
{ {
[Table("PlexServerContent")] [Table("PlexServerContent")]
public class PlexServerContent : Entity, IMediaServerContent<PlexEpisode> public class PlexServerContent : MediaServerContent
{ {
public string Title { get; set; }
public string ReleaseYear { get; set; } public string ReleaseYear { get; set; }
public string ImdbId { get; set; }
public string TvDbId { get; set; }
public string TheMovieDbId { get; set; }
public MediaType Type { get; set; }
public string Url { get; set; }
//public IMediaServerEpisode Episode { get; set; }
public ICollection<PlexEpisode> Episodes { get; set; }
public ICollection<PlexSeasonsContent> Seasons { get; set; } public ICollection<PlexSeasonsContent> Seasons { get; set; }
/// <summary> /// <summary>
/// Plex's internal ID for this item /// Plex's internal ID for this item
/// </summary> /// </summary>
public int Key { get; set; } public int Key { get; set; }
public DateTime AddedAt { get; set; }
public string Quality { get; set; } public string Quality { get; set; }
public int? RequestId { get; set; } public int? RequestId { get; set; }
[NotMapped] [NotMapped]
public bool HasImdb => !string.IsNullOrEmpty(ImdbId); public ICollection<PlexEpisode> PlexEpisodes
{
[NotMapped] get => (ICollection<PlexEpisode>)Episodes;
public bool HasTvDb => !string.IsNullOrEmpty(TvDbId); set => Episodes = (ICollection<IMediaServerEpisode>)value;
}
[NotMapped]
public bool HasTheMovieDb => !string.IsNullOrEmpty(TheMovieDbId);
} }
[Table("PlexSeasonsContent")] [Table("PlexSeasonsContent")]