diff --git a/Kyoo/InternalAPI/LibraryManager/ILibraryManager.cs b/Kyoo/InternalAPI/LibraryManager/ILibraryManager.cs index a908a678..b9c6d4a4 100644 --- a/Kyoo/InternalAPI/LibraryManager/ILibraryManager.cs +++ b/Kyoo/InternalAPI/LibraryManager/ILibraryManager.cs @@ -12,10 +12,12 @@ namespace Kyoo.InternalAPI List GetDirectors(long showID); List GetPeople(long showID); List GetGenreForShow(long showID); + List GetSeasons(long showID); //Public read IEnumerable GetLibraries(); Show GetShowBySlug(string slug); + Season GetSeason(string showSlug, long seasonNumber); People GetPeopleBySlug(string slug); Genre GetGenreBySlug(string slug); Studio GetStudioBySlug(string slug); diff --git a/Kyoo/InternalAPI/LibraryManager/LibraryManager.cs b/Kyoo/InternalAPI/LibraryManager/LibraryManager.cs index 78490b55..b89d4ef6 100644 --- a/Kyoo/InternalAPI/LibraryManager/LibraryManager.cs +++ b/Kyoo/InternalAPI/LibraryManager/LibraryManager.cs @@ -223,7 +223,42 @@ namespace Kyoo.InternalAPI SQLiteDataReader reader = cmd.ExecuteReader(); if (reader.Read()) - return Show.FromReader(reader).SetGenres(this).SetStudio(this).SetDirectors(this).SetPeople(this); + return Show.FromReader(reader).SetGenres(this).SetStudio(this).SetDirectors(this).SetSeasons(this).SetPeople(this); + else + return null; + } + } + + public List GetSeasons(long showID) + { + string query = "SELECT * FROM seasons WHERE showID = $showID;"; + + using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection)) + { + cmd.Parameters.AddWithValue("$showID", showID); + SQLiteDataReader reader = cmd.ExecuteReader(); + + List seasons = new List(); + + while (reader.Read()) + seasons.Add(Season.FromReader(reader)); + + return seasons; + } + } + + public Season GetSeason(string showSlug, long seasonNumber) + { + string query = "SELECT * FROM seasons JOIN shows ON shows.id = seasons.showID WHERE shows.slug = $showSlug AND seasons.seasonNumber = $seasonNumber;"; + + using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection)) + { + cmd.Parameters.AddWithValue("$showSlug", showSlug); + cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber); + SQLiteDataReader reader = cmd.ExecuteReader(); + + if (reader.Read()) + return Season.FromReader(reader); else return null; } diff --git a/Kyoo/Models/Season.cs b/Kyoo/Models/Season.cs index 0f9bdedf..c555d932 100644 --- a/Kyoo/Models/Season.cs +++ b/Kyoo/Models/Season.cs @@ -28,5 +28,17 @@ namespace Kyoo.Models ImgPrimary = imgPrimary; ExternalIDs = externalIDs; } + + public static Season FromReader(System.Data.SQLite.SQLiteDataReader reader) + { + return new Season((long)reader["id"], + (long)reader["showID"], + (long)reader["seasonNumber"], + reader["title"] as string, + reader["overview"] as string, + reader["year"] as long?, + reader["imgPrimary"] as string, + reader["externalIDs"] as string); + } } } diff --git a/Kyoo/Models/Show.cs b/Kyoo/Models/Show.cs index 877a542b..02878e2c 100644 --- a/Kyoo/Models/Show.cs +++ b/Kyoo/Models/Show.cs @@ -30,6 +30,7 @@ namespace Kyoo.Models //Used in the rest API excusively. public Studio studio; public IEnumerable directors; + public IEnumerable seasons; public IEnumerable people; @@ -133,6 +134,12 @@ namespace Kyoo.Models people = manager.GetPeople(id); return this; } + + public Show SetSeasons(ILibraryManager manager) + { + seasons = manager.GetSeasons(id); + return this; + } } public enum Status { Finished, Airing }