Reworking external ids hadnling

This commit is contained in:
Zoe Roux 2020-04-22 03:37:02 +02:00
parent 86e188f985
commit da12eae0a2
5 changed files with 68 additions and 29 deletions

View File

@ -6,7 +6,6 @@ namespace Kyoo.Controllers
public interface ILibraryManager
{
//Read values
string GetShowExternalIDs(long showID);
Studio GetStudio(long showID);
IEnumerable<PeopleLink> GetPeople(long showID);
IEnumerable<Genre> GetGenreForShow(long showID);

View File

@ -0,0 +1,33 @@
namespace Kyoo.Models
{
public class MetadataID
{
public string ProviderName;
public string ProviderLogo;
public string ID;
public string Link;
public MetadataID() { }
public MetadataID(string providerValue)
{
string[] values = providerValue.Split('=');
ProviderName = values[0];
ID = values[1];
}
public MetadataID(string providerName, string id)
{
ProviderName = providerName;
ID = id;
}
public MetadataID(string providerName, string providerLogo, string id, string link)
{
ProviderName = providerName;
ProviderLogo = providerLogo;
ID = id;
Link = link;
}
}
}

View File

@ -25,7 +25,7 @@ namespace Kyoo.Models
[JsonIgnore] public string ImgLogo { get; set; }
[JsonIgnore] public string ImgBackdrop { get; set; }
public string ExternalIDs { get; set; }
public IEnumerable<MetadataID> ExternalIDs { get; set; }
public bool IsMovie { get; set; }
@ -42,21 +42,18 @@ namespace Kyoo.Models
[JsonIgnore] public virtual IEnumerable<Season> Seasons { get; set; }
[JsonIgnore] public virtual IEnumerable<Episode> Episodes { get; set; }
public string GetAliases()
{
return Aliases == null ? null : string.Join('|', Aliases);
}
public string GetGenres()
{
return Genres == null ? null : string.Join('|', Genres);
}
public Show() { }
public Show(string slug, string title, IEnumerable<string> aliases, string path, string overview, string trailerUrl, IEnumerable<Genre> genres, Status? status, long? startYear, long? endYear, string externalIDs)
public Show(string slug,
string title,
IEnumerable<string> aliases,
string path, string overview,
string trailerUrl,
IEnumerable<Genre> genres,
Status? status,
long? startYear,
long? endYear,
IEnumerable<MetadataID> externalIDs)
{
Slug = slug;
Title = title;
@ -72,7 +69,20 @@ namespace Kyoo.Models
IsCollection = false;
}
public Show(string slug, string title, IEnumerable<string> aliases, string path, string overview, string trailerUrl, Status? status, long? startYear, long? endYear, string imgPrimary, string imgThumb, string imgLogo, string imgBackdrop, string externalIDs)
public Show(string slug,
string title,
IEnumerable<string> aliases,
string path,
string overview,
string trailerUrl,
Status? status,
long? startYear,
long? endYear,
string imgPrimary,
string imgThumb,
string imgLogo,
string imgBackdrop,
IEnumerable<MetadataID> externalIDs)
{
Slug = slug;
Title = title;
@ -93,12 +103,7 @@ namespace Kyoo.Models
public string GetID(string provider)
{
if (ExternalIDs?.Contains(provider) != true)
return null;
int startIndex = ExternalIDs.IndexOf(provider, StringComparison.Ordinal) + provider.Length + 1; //The + 1 is for the '='
if (ExternalIDs.IndexOf('|', startIndex) == -1)
return ExternalIDs.Substring(startIndex);
return ExternalIDs.Substring(startIndex, ExternalIDs.IndexOf('|', startIndex) - startIndex);
return ExternalIDs.FirstOrDefault(x => x.ProviderName == provider)?.ID;
}
public Show Merge(Show other)
@ -122,7 +127,7 @@ namespace Kyoo.Models
ImgLogo ??= other.ImgLogo;
ImgBackdrop ??= other.ImgBackdrop;
Studio ??= other.Studio;
ExternalIDs = string.Join('|', new [] { ExternalIDs, other.ExternalIDs }.Where(x => !string.IsNullOrEmpty(x)));
ExternalIDs = Utility.MergeLists(ExternalIDs, other.ExternalIDs, (x, y) => x.ProviderName == y.ProviderName);
return this;
}
}

View File

@ -35,12 +35,6 @@ namespace Kyoo.Controllers
return Enumerable.Aggregate(_database.Libraries, paths, (current, lib) => current.Concat(lib.Paths));
}
public string GetShowExternalIDs(long showID)
{
return (from show in _database.Shows where show.ID == showID select show.ExternalIDs).FirstOrDefault();
}
public (Track video, IEnumerable<Track> audios, IEnumerable<Track> subtitles) GetStreams(long episodeID, string episodeSlug)
{
IEnumerable<Track> tracks = _database.Tracks.Where(track => track.EpisodeID == episodeID);

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using IdentityServer4.EntityFramework.Entities;
@ -92,6 +93,7 @@ namespace Kyoo
private ValueComparer<string[]> stringArrayComparer = new ValueComparer<string[]>(
(l1, l2) => l1.SequenceEqual(l2),
arr => arr.Aggregate(0, (i, s) => s.GetHashCode()));
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
@ -100,6 +102,12 @@ namespace Kyoo
modelBuilder.Entity<Library>().Property(e => e.Paths).HasConversion(stringArrayConverter).Metadata.SetValueComparer(stringArrayComparer);
modelBuilder.Entity<Library>().Property(e => e.Providers).HasConversion(stringArrayConverter).Metadata.SetValueComparer(stringArrayComparer);
modelBuilder.Entity<Show>().Property(e => e.Aliases).HasConversion(stringArrayConverter).Metadata.SetValueComparer(stringArrayComparer);
modelBuilder.Entity<Show>().Property(e => e.ExternalIDs).HasConversion(new ValueConverter<IEnumerable<MetadataID>, string>(
ids => string.Join("|", ids.Select(x => $"{x.ProviderName}={x.ID}")),
ids => ids.Split('|', StringSplitOptions.None).Select(x => new MetadataID(x))))
.Metadata.SetValueComparer( new ValueComparer<IEnumerable<MetadataID>>(
(l1, l2) => l1.SequenceEqual(l2),
arr => arr.Aggregate(0, (i, s) => s.GetHashCode())));
modelBuilder.Entity<Track>()
.Property(t => t.IsDefault)