mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Reworking handling of providers
This commit is contained in:
parent
da12eae0a2
commit
9580056df1
@ -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);
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
39
Kyoo.Common/Models/ProviderID.cs
Normal file
39
Kyoo.Common/Models/ProviderID.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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"))
|
||||
|
Loading…
x
Reference in New Issue
Block a user