mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-11-03 19:17:16 -05:00 
			
		
		
		
	Adding library items
This commit is contained in:
		
							parent
							
								
									6d29298073
								
							
						
					
					
						commit
						e69eda8df3
					
				
							
								
								
									
										84
									
								
								Kyoo.Common/Models/LibraryItem.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								Kyoo.Common/Models/LibraryItem.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,84 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Linq.Expressions;
 | 
			
		||||
 | 
			
		||||
namespace Kyoo.Models
 | 
			
		||||
{
 | 
			
		||||
	public enum ItemType
 | 
			
		||||
	{
 | 
			
		||||
		Show,
 | 
			
		||||
		Movie,
 | 
			
		||||
		Collection
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public class LibraryItem : IRessource
 | 
			
		||||
	{
 | 
			
		||||
		public int ID { get; set; }
 | 
			
		||||
		public string Slug { get; set; }
 | 
			
		||||
		public string Title { get; set; }
 | 
			
		||||
		public string Overview { get; set; }
 | 
			
		||||
		public Status? Status { get; set; }
 | 
			
		||||
		public string TrailerUrl { get; set; }
 | 
			
		||||
		public int? StartYear { get; set; }
 | 
			
		||||
		public int? EndYear { get; set; }
 | 
			
		||||
		public string Poster { get; set; }
 | 
			
		||||
		public ItemType Type { get; set; }
 | 
			
		||||
		
 | 
			
		||||
		public LibraryItem() {}
 | 
			
		||||
 | 
			
		||||
		public LibraryItem(Show show)
 | 
			
		||||
		{
 | 
			
		||||
			ID = show.ID;
 | 
			
		||||
			Slug = show.Slug;
 | 
			
		||||
			Title = show.Title;
 | 
			
		||||
			Overview = show.Overview;
 | 
			
		||||
			Status = show.Status;
 | 
			
		||||
			TrailerUrl = show.TrailerUrl;
 | 
			
		||||
			StartYear = show.StartYear;
 | 
			
		||||
			EndYear = show.EndYear;
 | 
			
		||||
			Poster = show.Poster;
 | 
			
		||||
			Type = show.IsMovie ? ItemType.Movie : ItemType.Show;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public LibraryItem(Collection collection)
 | 
			
		||||
		{
 | 
			
		||||
			ID = -collection.ID;
 | 
			
		||||
			Slug = collection.Slug;
 | 
			
		||||
			Title = collection.Name;
 | 
			
		||||
			Overview = collection.Overview;
 | 
			
		||||
			Status = Models.Status.Unknown;
 | 
			
		||||
			TrailerUrl = null;
 | 
			
		||||
			StartYear = null;
 | 
			
		||||
			EndYear = null;
 | 
			
		||||
			Poster = collection.Poster;
 | 
			
		||||
			Type = ItemType.Collection;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Expression<Func<Show, LibraryItem>> FromShow => x => new LibraryItem
 | 
			
		||||
		{
 | 
			
		||||
			ID = x.ID,
 | 
			
		||||
			Slug = x.Slug,
 | 
			
		||||
			Title = x.Title,
 | 
			
		||||
			Overview = x.Overview,
 | 
			
		||||
			Status = x.Status,
 | 
			
		||||
			TrailerUrl = x.TrailerUrl,
 | 
			
		||||
			StartYear = x.StartYear,
 | 
			
		||||
			EndYear = x.EndYear,
 | 
			
		||||
			Poster= x.Poster,
 | 
			
		||||
			Type = x.IsMovie ? ItemType.Movie : ItemType.Show
 | 
			
		||||
		};
 | 
			
		||||
		
 | 
			
		||||
		public static Expression<Func<Collection, LibraryItem>> FromCollection => x => new LibraryItem
 | 
			
		||||
		{
 | 
			
		||||
			ID = -x.ID,
 | 
			
		||||
			Slug = x.Slug,
 | 
			
		||||
			Title = x.Name,
 | 
			
		||||
			Overview = x.Overview,
 | 
			
		||||
			Status = Models.Status.Unknown,
 | 
			
		||||
			TrailerUrl = null,
 | 
			
		||||
			StartYear = null,
 | 
			
		||||
			EndYear = null,
 | 
			
		||||
			Poster= x.Poster,
 | 
			
		||||
			Type = ItemType.Collection
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -12,7 +12,6 @@ namespace Kyoo.Models
 | 
			
		||||
		public string Name { get; set; }
 | 
			
		||||
		public string Poster { get; set; }
 | 
			
		||||
		public string Overview { get; set; }
 | 
			
		||||
		[JsonIgnore] public string ImgPrimary { get; set; }
 | 
			
		||||
		[NotMergable] [JsonIgnore] public virtual IEnumerable<CollectionLink> Links { get; set; }
 | 
			
		||||
		public virtual IEnumerable<Show> Shows
 | 
			
		||||
		{
 | 
			
		||||
@ -30,20 +29,12 @@ namespace Kyoo.Models
 | 
			
		||||
 | 
			
		||||
		public Collection() { }
 | 
			
		||||
 | 
			
		||||
		public Collection(string slug, string name, string overview, string imgPrimary)
 | 
			
		||||
		public Collection(string slug, string name, string overview, string poster)
 | 
			
		||||
		{
 | 
			
		||||
			Slug = slug;
 | 
			
		||||
			Name = name;
 | 
			
		||||
			Overview = overview;
 | 
			
		||||
			ImgPrimary = imgPrimary;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public Show AsShow()
 | 
			
		||||
		{
 | 
			
		||||
			return new Show(Slug, Name, null, null, Overview, null, null, null, null, null, null)
 | 
			
		||||
			{
 | 
			
		||||
				IsCollection = true
 | 
			
		||||
			};
 | 
			
		||||
			Poster = poster;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,6 @@ namespace Kyoo.Models
 | 
			
		||||
 | 
			
		||||
		public bool IsMovie { get; set; }
 | 
			
		||||
		
 | 
			
		||||
		public bool IsCollection;
 | 
			
		||||
		
 | 
			
		||||
		public virtual IEnumerable<Genre> Genres
 | 
			
		||||
		{
 | 
			
		||||
@ -82,7 +81,6 @@ namespace Kyoo.Models
 | 
			
		||||
			StartYear = startYear;
 | 
			
		||||
			EndYear = endYear;
 | 
			
		||||
			ExternalIDs = externalIDs;
 | 
			
		||||
			IsCollection = false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public Show(string slug,
 | 
			
		||||
@ -112,7 +110,6 @@ namespace Kyoo.Models
 | 
			
		||||
			Logo = logo;
 | 
			
		||||
			Backdrop = backdrop;
 | 
			
		||||
			ExternalIDs = externalIDs;
 | 
			
		||||
			IsCollection = false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public string GetID(string provider)
 | 
			
		||||
@ -140,5 +137,5 @@ namespace Kyoo.Models
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public enum Status { Finished, Airing, Planned }
 | 
			
		||||
	public enum Status { Finished, Airing, Planned, Unknown }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -136,5 +136,29 @@ namespace Kyoo.Controllers
 | 
			
		||||
				throw new ItemNotFound();
 | 
			
		||||
			return libraries;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public async Task<ICollection<LibraryItem>> GetItems(string librarySlug, 
 | 
			
		||||
			Expression<Func<LibraryItem, bool>> where = null, 
 | 
			
		||||
			Sort<LibraryItem> sort = default, 
 | 
			
		||||
			Pagination limit = default)
 | 
			
		||||
		{
 | 
			
		||||
			IQueryable<LibraryItem> query = _database.Shows
 | 
			
		||||
				.Where(x => !_database.CollectionLinks.Any(y => y.ShowID == x.ID))
 | 
			
		||||
				.Select(LibraryItem.FromShow)
 | 
			
		||||
				.Concat(_database.Collections
 | 
			
		||||
					.Select(LibraryItem.FromCollection));
 | 
			
		||||
 | 
			
		||||
			ICollection<LibraryItem> items = await ApplyFilters(query,
 | 
			
		||||
				async id => id > 0
 | 
			
		||||
					? new LibraryItem(await _database.Shows.FirstOrDefaultAsync(x => x.ID == id)) 
 | 
			
		||||
					: new LibraryItem(await _database.Collections.FirstOrDefaultAsync(x => x.ID == -id)),
 | 
			
		||||
				x => x.Slug,
 | 
			
		||||
				where,
 | 
			
		||||
				sort,
 | 
			
		||||
				limit);
 | 
			
		||||
			if (!items.Any() && await Get(librarySlug) == null)
 | 
			
		||||
				throw new ItemNotFound();
 | 
			
		||||
			return items;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -46,9 +46,9 @@ namespace Kyoo
 | 
			
		||||
			services.AddDbContext<DatabaseContext>(options =>
 | 
			
		||||
			{
 | 
			
		||||
				options.UseLazyLoadingProxies()
 | 
			
		||||
					.UseNpgsql(_configuration.GetConnectionString("Database"));
 | 
			
		||||
				// .EnableSensitiveDataLogging()
 | 
			
		||||
				// .UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole()));
 | 
			
		||||
					.UseNpgsql(_configuration.GetConnectionString("Database"))
 | 
			
		||||
				 .EnableSensitiveDataLogging()
 | 
			
		||||
				 .UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole()));
 | 
			
		||||
			}, ServiceLifetime.Transient);
 | 
			
		||||
			
 | 
			
		||||
			services.AddDbContext<IdentityDatabase>(options =>
 | 
			
		||||
 | 
			
		||||
@ -167,38 +167,38 @@ namespace Kyoo.Api
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// [HttpGet("{id:int}/item")]
 | 
			
		||||
		// [HttpGet("{id:int}/items")]
 | 
			
		||||
		// [Authorize(Policy = "Read")]
 | 
			
		||||
		// public async Task<ActionResult<Page<Collection>>> GetItems(int id,
 | 
			
		||||
		// 	[FromQuery] string sortBy,
 | 
			
		||||
		// 	[FromQuery] int afterID,
 | 
			
		||||
		// 	[FromQuery] Dictionary<string, string> where,
 | 
			
		||||
		// 	[FromQuery] int limit = 50)
 | 
			
		||||
		// {
 | 
			
		||||
		// 	where.Remove("id");
 | 
			
		||||
		// 	where.Remove("sortBy");
 | 
			
		||||
		// 	where.Remove("limit");
 | 
			
		||||
		// 	where.Remove("afterID");
 | 
			
		||||
		//
 | 
			
		||||
		// 	try
 | 
			
		||||
		// 	{
 | 
			
		||||
		// 		ICollection<Collection> ressources = await _libraryManager.GetItemsFromLibrary(id,
 | 
			
		||||
		// 			ApiHelper.ParseWhere<Collection>(where),
 | 
			
		||||
		// 			new Sort<Collection>(sortBy),
 | 
			
		||||
		// 			new Pagination(limit, afterID));
 | 
			
		||||
		//
 | 
			
		||||
		// 		return Page(ressources, limit);
 | 
			
		||||
		// 	}
 | 
			
		||||
		// 	catch (ItemNotFound)
 | 
			
		||||
		// 	{
 | 
			
		||||
		// 		return NotFound();
 | 
			
		||||
		// 	}
 | 
			
		||||
		// 	catch (ArgumentException ex)
 | 
			
		||||
		// 	{
 | 
			
		||||
		// 		return BadRequest(new {Error = ex.Message});
 | 
			
		||||
		// 	}
 | 
			
		||||
		// }
 | 
			
		||||
		[HttpGet("{id:int}/item")]
 | 
			
		||||
		[HttpGet("{id:int}/items")]
 | 
			
		||||
		[Authorize(Policy = "Read")]
 | 
			
		||||
		public async Task<ActionResult<Page<LibraryItem>>> GetItems(int id,
 | 
			
		||||
			[FromQuery] string sortBy,
 | 
			
		||||
			[FromQuery] int afterID,
 | 
			
		||||
			[FromQuery] Dictionary<string, string> where,
 | 
			
		||||
			[FromQuery] int limit = 50)
 | 
			
		||||
		{
 | 
			
		||||
			where.Remove("id");
 | 
			
		||||
			where.Remove("sortBy");
 | 
			
		||||
			where.Remove("limit");
 | 
			
		||||
			where.Remove("afterID");
 | 
			
		||||
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ICollection<LibraryItem> ressources = await ((LibraryRepository)_libraryManager.LibraryRepository).GetItems("",
 | 
			
		||||
					ApiHelper.ParseWhere<LibraryItem>(where),
 | 
			
		||||
					new Sort<LibraryItem>(sortBy),
 | 
			
		||||
					new Pagination(limit, afterID));
 | 
			
		||||
 | 
			
		||||
				return Page(ressources, limit);
 | 
			
		||||
			}
 | 
			
		||||
			catch (ItemNotFound)
 | 
			
		||||
			{
 | 
			
		||||
				return NotFound();
 | 
			
		||||
			}
 | 
			
		||||
			catch (ArgumentException ex)
 | 
			
		||||
			{
 | 
			
		||||
				return BadRequest(new {Error = ex.Message});
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//
 | 
			
		||||
		// [HttpGet("{slug}/collection")]
 | 
			
		||||
		// [HttpGet("{slug}/collections")]
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user