mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-11-03 19:17:16 -05: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;
 | 
			
		||||
@ -93,6 +94,7 @@ namespace Kyoo
 | 
			
		||||
			(l1, l2) => l1.SequenceEqual(l2),
 | 
			
		||||
			arr => arr.Aggregate(0, (i, s) => s.GetHashCode()));
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		protected override void OnModelCreating(ModelBuilder modelBuilder)
 | 
			
		||||
		{
 | 
			
		||||
			base.OnModelCreating(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