Finishing the library support.

This commit is contained in:
Zoe Roux 2019-10-19 19:37:56 +02:00
parent 8b0dca8fbf
commit 8c7bdcebc6
9 changed files with 80 additions and 11 deletions

View File

@ -27,7 +27,7 @@ export class LibraryResolverService implements Resolve<Show[]>
} }
else else
{ {
return this.http.get<Show[]>("api/library/" + slug).pipe(catchError((error: HttpErrorResponse) => return this.http.get<Show[]>("api/libraries/" + slug).pipe(catchError((error: HttpErrorResponse) =>
{ {
console.log(error.status + " - " + error.message); console.log(error.status + " - " + error.message);
if (error.status == 404) if (error.status == 404)

View File

@ -21,5 +21,16 @@ namespace Kyoo.Controllers
{ {
return libraryManager.GetLibraries(); return libraryManager.GetLibraries();
} }
[HttpGet("{librarySlug}")]
public ActionResult<IEnumerable<Show>> GetShows(string librarySlug)
{
Library library = libraryManager.GetLibrary(librarySlug);
if (library == null)
return NotFound();
return libraryManager.GetShowsInLibrary(library.id);
}
} }
} }

View File

@ -19,7 +19,7 @@ namespace Kyoo.Controllers
[HttpGet] [HttpGet]
public IEnumerable<Show> GetShows() public IEnumerable<Show> GetShows()
{ {
return libraryManager.QueryShows(null); return libraryManager.GetShows();
} }
[HttpGet("{slug}")] [HttpGet("{slug}")]

View File

@ -8,7 +8,7 @@ namespace Kyoo.InternalAPI
{ {
//Read values //Read values
string GetShowExternalIDs(long showID); string GetShowExternalIDs(long showID);
IEnumerable<Show> QueryShows(string selection); IEnumerable<Show> GetShows();
Studio GetStudio(long showID); Studio GetStudio(long showID);
List<People> GetDirectors(long showID); List<People> GetDirectors(long showID);
List<People> GetPeople(long showID); List<People> GetPeople(long showID);
@ -16,6 +16,7 @@ namespace Kyoo.InternalAPI
List<Season> GetSeasons(long showID); List<Season> GetSeasons(long showID);
int GetSeasonCount(string showSlug, long seasonNumber); int GetSeasonCount(string showSlug, long seasonNumber);
IEnumerable<Show> GetShowsInCollection(long collectionID); IEnumerable<Show> GetShowsInCollection(long collectionID);
List<Show> GetShowsInLibrary(long libraryID);
IEnumerable<Show> GetShowsByPeople(long peopleID); IEnumerable<Show> GetShowsByPeople(long peopleID);
IEnumerable<string> GetLibrariesPath(); IEnumerable<string> GetLibrariesPath();
@ -24,6 +25,7 @@ namespace Kyoo.InternalAPI
Track GetSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag, bool forced); Track GetSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag, bool forced);
//Public read //Public read
Library GetLibrary(string librarySlug);
IEnumerable<Library> GetLibraries(); IEnumerable<Library> GetLibraries();
Show GetShowBySlug(string slug); Show GetShowBySlug(string slug);
Season GetSeason(string showSlug, long seasonNumber); Season GetSeason(string showSlug, long seasonNumber);

View File

@ -271,7 +271,23 @@ namespace Kyoo.InternalAPI
} }
public IEnumerable<Show> QueryShows(string selection) public Library GetLibrary(string librarySlug)
{
string query = "SELECT * FROM libraries WHERE slug = $slug;";
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
{
cmd.Parameters.AddWithValue("$slug", librarySlug);
SQLiteDataReader reader = cmd.ExecuteReader();
if (reader.Read())
return Library.FromReader(reader);
else
return null;
}
}
public IEnumerable<Show> GetShows()
{ {
List<Show> shows = new List<Show>(); List<Show> shows = new List<Show>();
SQLiteDataReader reader; SQLiteDataReader reader;
@ -580,6 +596,22 @@ namespace Kyoo.InternalAPI
} }
} }
public List<Show> GetShowsInLibrary(long libraryID)
{
List<Show> shows = new List<Show>();
SQLiteDataReader reader;
string query = "SELECT id, slug, title, startYear, endYear, '0' FROM (SELECT id, slug, title, startYear, endYear, '0' FROM shows JOIN librariesLinks lb ON lb.showID = id WHERE lb.libraryID = $libraryID) LEFT JOIN collectionsLinks l ON l.showID = id WHERE l.showID IS NULL UNION SELECT id, slug, name, startYear, endYear, '1' FROM collections JOIN collectionsLinks l ON l.collectionID = collections.id JOIN librariesLinks lb ON lb.showID = l.showID WHERE lb.libraryID = $libraryID ORDER BY title;";
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
{
cmd.Parameters.AddWithValue("$libraryID", libraryID);
reader = cmd.ExecuteReader();
while (reader.Read())
shows.Add(Show.FromQueryReader(reader));
}
return shows;
}
public IEnumerable<Show> GetShowsByPeople(long peopleID) public IEnumerable<Show> GetShowsByPeople(long peopleID)
{ {
string query = "SELECT * FROM shows JOIN peopleLinks l ON l.showID = shows.id WHERE l.peopleID = $id;"; string query = "SELECT * FROM shows JOIN peopleLinks l ON l.showID = shows.id WHERE l.peopleID = $id;";

View File

@ -2,7 +2,7 @@
namespace Kyoo.Models namespace Kyoo.Models
{ {
public struct Library public class Library
{ {
[JsonIgnore] public readonly long id; [JsonIgnore] public readonly long id;
public string Slug; public string Slug;

View File

@ -99,7 +99,7 @@ namespace Kyoo.Models
Title = reader["title"] as string, Title = reader["title"] as string,
StartYear = reader["startYear"] as long?, StartYear = reader["startYear"] as long?,
EndYear = reader["endYear"] as long?, EndYear = reader["endYear"] as long?,
IsCollection = reader[4] as string == "1" IsCollection = reader["'0'"] as string == "1"
}; };
} }

View File

@ -0,0 +1,26 @@
using Kyoo.InternalAPI;
using Kyoo.Models;
using Microsoft.Extensions.Configuration;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UnitTests.Kyoo_InternalAPI
{
public class LibraryTests
{
private IConfiguration config;
private ILibraryManager libraryManager;
[SetUp]
public void Setup()
{
config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
libraryManager = new LibraryManager(config);
}
}
}

View File

@ -1,8 +1,6 @@
using Kyoo; using Kyoo.InternalAPI;
using Kyoo.InternalAPI;
using Kyoo.InternalAPI.ThumbnailsManager; using Kyoo.InternalAPI.ThumbnailsManager;
using Kyoo.Models; using Kyoo.Models;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using NUnit.Framework; using NUnit.Framework;
using System.Diagnostics; using System.Diagnostics;
@ -12,7 +10,7 @@ using System.Threading.Tasks;
namespace UnitTests.Kyoo_InternalAPI namespace UnitTests.Kyoo_InternalAPI
{ {
public class Tests public class ThumbnailsTests
{ {
private IConfiguration config; private IConfiguration config;
@ -29,7 +27,7 @@ namespace UnitTests.Kyoo_InternalAPI
{ {
LibraryManager library = new LibraryManager(config); LibraryManager library = new LibraryManager(config);
ThumbnailsManager manager = new ThumbnailsManager(config); ThumbnailsManager manager = new ThumbnailsManager(config);
Show show = library.GetShowBySlug(library.QueryShows(null).FirstOrDefault().Slug); Show show = library.GetShowBySlug(library.GetShows().FirstOrDefault().Slug);
Debug.WriteLine("&Show: " + show.Path); Debug.WriteLine("&Show: " + show.Path);
string posterPath = Path.Combine(show.Path, "poster.jpg"); string posterPath = Path.Combine(show.Path, "poster.jpg");
File.Delete(posterPath); File.Delete(posterPath);