Reworking handling of providers

This commit is contained in:
Zoe Roux 2020-04-23 21:58:35 +02:00
parent da12eae0a2
commit 9580056df1
9 changed files with 84 additions and 82 deletions

View File

@ -6,8 +6,8 @@ namespace Kyoo.Controllers
{
public interface IMetadataProvider
{
public string Name { get; }
ProviderID Provider { get; }
Task<Collection> GetCollectionFromName(string name);
Task<Show> GetShowByID(Show show);

View File

@ -11,7 +11,7 @@
<Company>SDG</Company>
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageVersion>1.0.15</PackageVersion>
<PackageVersion>1.0.17</PackageVersion>
</PropertyGroup>
<ItemGroup>

View File

@ -8,11 +8,11 @@ namespace Kyoo.Models
public string Slug { get; set; }
public string Name { get; set; }
public string[] Paths { get; set; }
public string[] Providers { get; set; }
public ProviderID[] Providers { get; set; }
public Library() { }
public Library(string slug, string name, string[] paths, string[] providers)
public Library(string slug, string name, string[] paths, ProviderID[] providers)
{
Slug = slug;
Name = name;

View File

@ -2,31 +2,21 @@ namespace Kyoo.Models
{
public class MetadataID
{
public string ProviderName;
public string ProviderLogo;
public string ID;
public string Link;
public long ID { get; set; }
public long ShowID { get; set; }
public virtual Show Show { get; set; }
public long ProviderID { get; set; }
public virtual ProviderID Provider {get; set; }
public string DataID { get; set; }
public string Link { get; set; }
public MetadataID() { }
public MetadataID(string providerValue)
public MetadataID(ProviderID provider, string dataID, string link)
{
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;
Provider = provider;
DataID = dataID;
Link = link;
}
}

View File

@ -0,0 +1,39 @@
namespace Kyoo.Models
{
public class ProviderID
{
public long ID { get; set; }
public string Name { get; set; }
public string Logo { get; set; }
public ProviderID() { }
public ProviderID(long id, string name, string logo)
{
ID = id;
Name = name;
Logo = logo;
}
protected bool Equals(ProviderID other)
{
return Name == other.Name;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
return false;
if (ReferenceEquals(this, obj))
return true;
if (obj.GetType() != this.GetType())
return false;
return Equals((ProviderID)obj);
}
public override int GetHashCode()
{
return Name != null ? Name.GetHashCode() : 0;
}
}
}

View File

@ -1,5 +1,4 @@
using System;
using Newtonsoft.Json;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
@ -103,7 +102,7 @@ namespace Kyoo.Models
public string GetID(string provider)
{
return ExternalIDs.FirstOrDefault(x => x.ProviderName == provider)?.ID;
return ExternalIDs.FirstOrDefault(x => x.Provider.Name == provider)?.DataID;
}
public Show Merge(Show other)
@ -127,7 +126,7 @@ namespace Kyoo.Models
ImgLogo ??= other.ImgLogo;
ImgBackdrop ??= other.ImgBackdrop;
Studio ??= other.Studio;
ExternalIDs = Utility.MergeLists(ExternalIDs, other.ExternalIDs, (x, y) => x.ProviderName == y.ProviderName);
ExternalIDs = Utility.MergeLists(ExternalIDs, other.ExternalIDs, (x, y) => x.Provider != y.Provider);
return this;
}
}

View File

@ -2,7 +2,6 @@
using Kyoo.Models;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Threading.Tasks;
namespace Kyoo.Controllers
@ -22,17 +21,17 @@ namespace Kyoo.Controllers
T ret = new T();
IEnumerable<IMetadataProvider> providers = library?.Providers != null
? _providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name))
? _providers.Where(x => library.Providers.Contains(x.Provider))
.OrderBy(provider => Array.IndexOf(library.Providers, provider.Provider))
: _providers;
foreach (IMetadataProvider provider in providers)
{
try
{
if (library?.Providers == null || library.Providers.Contains(provider.Name))
ret = ret.Merge(await providerCall(provider));
ret = ret.Merge(await providerCall(provider));
} catch (Exception ex) {
Console.Error.WriteLine($"\tThe provider {provider.Name} coudln't work for {what}. Exception: {ex.Message}");
Console.Error.WriteLine($"\tThe provider {provider.Provider.Name} coudln't work for {what}. Exception: {ex.Message}");
}
}
return ret;
@ -43,17 +42,17 @@ namespace Kyoo.Controllers
List<T> ret = new List<T>();
IEnumerable<IMetadataProvider> providers = library?.Providers != null
? _providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name))
? _providers.Where(x => library.Providers.Contains(x.Provider))
.OrderBy(provider => Array.IndexOf(library.Providers, provider.Provider))
: _providers;
foreach (IMetadataProvider provider in providers)
{
try
{
if (library?.Providers == null || library.Providers.Contains(provider.Name))
ret.AddRange(await providerCall(provider) ?? new List<T>());
ret.AddRange(await providerCall(provider) ?? new List<T>());
} catch (Exception ex) {
Console.Error.WriteLine($"\tThe provider {provider.Name} coudln't work for {what}. Exception: {ex.Message}");
Console.Error.WriteLine($"\tThe provider {provider.Provider.Name} coudln't work for {what}. Exception: {ex.Message}");
}
}
return ret;

View File

@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using IdentityServer4.EntityFramework.Entities;
@ -77,6 +76,8 @@ namespace Kyoo
public DbSet<Genre> Genres { get; set; }
public DbSet<People> Peoples { get; set; }
public DbSet<Studio> Studios { get; set; }
public DbSet<ProviderID> ProviderIds { get; set; }
public DbSet<MetadataID> MetadataIds { get; set; }
public DbSet<LibraryLink> LibraryLinks { get; set; }
public DbSet<CollectionLink> CollectionLinks { get; set; }
@ -102,12 +103,6 @@ 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)

View File

@ -127,9 +127,9 @@ namespace Kyoo.Api
if (line == "")
{
lines.Add("");
List<string> processedBlock = ConvertBlock(lines);
for (int i = 0; i < processedBlock.Count; i++)
await writer.WriteLineAsync(processedBlock[i]);
IEnumerable<string> processedBlock = ConvertBlock(lines);
foreach (string t in processedBlock)
await writer.WriteLineAsync(t);
lines.Clear();
}
else
@ -141,44 +141,24 @@ namespace Kyoo.Api
await context.HttpContext.Response.Body.FlushAsync();
}
private static List<string> ConvertBlock(List<string> lines)
private static IEnumerable<string> ConvertBlock(IList<string> lines)
{
lines[1] = lines[1].Replace(',', '.');
if (lines[2].Length > 5)
{
switch (lines[2].Substring(0, 6))
lines[1] += lines[2].Substring(0, 6) switch
{
case "{\\an1}":
lines[1] += " line:93% position:15%";
break;
case "{\\an2}":
lines[1] += " line:93%";
break;
case "{\\an3}":
lines[1] += " line:93% position:85%";
break;
case "{\\an4}":
lines[1] += " line:50% position:15%";
break;
case "{\\an5}":
lines[1] += " line:50%";
break;
case "{\\an6}":
lines[1] += " line:50% position:85%";
break;
case "{\\an7}":
lines[1] += " line:7% position:15%";
break;
case "{\\an8}":
lines[1] += " line:7%";
break;
case "{\\an9}":
lines[1] += " line:7% position:85%";
break;
default:
lines[1] += " line:93%";
break;
}
"{\\an1}" => " line:93% position:15%",
"{\\an2}" => " line:93%",
"{\\an3}" => " line:93% position:85%",
"{\\an4}" => " line:50% position:15%",
"{\\an5}" => " line:50%",
"{\\an6}" => " line:50% position:85%",
"{\\an7}" => " line:7% position:15%",
"{\\an8}" => " line:7%",
"{\\an9}" => " line:7% position:85%",
_ => " line:93%"
};
}
if (lines[2].StartsWith("{\\an"))