mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Reworking external ids hadnling
This commit is contained in:
parent
86e188f985
commit
da12eae0a2
@ -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);
|
||||
|
33
Kyoo.Common/Models/MetadataID.cs
Normal file
33
Kyoo.Common/Models/MetadataID.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user