mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Adding the episode registering.
This commit is contained in:
parent
9706c840c9
commit
9200c2b00e
@ -61,12 +61,16 @@ namespace Kyoo.InternalAPI
|
||||
|
||||
Debug.WriteLine("&ShowPath: " + showPath + " Show: " + showName + " season: " + seasonNumber + " episode: " + episodeNumber);
|
||||
|
||||
string showProviderIDs;
|
||||
if (!libraryManager.IsShowRegistered(showPath, out long showID))
|
||||
{
|
||||
Debug.WriteLine("&Should register show: " + showName);
|
||||
Show show = await metadataProvider.GetShowFromName(showName, showPath);
|
||||
showProviderIDs = show.ExternalIDs;
|
||||
showID = libraryManager.RegisterShow(show);
|
||||
}
|
||||
else
|
||||
showProviderIDs = libraryManager.GetShowExternalIDs(showID);
|
||||
|
||||
Debug.WriteLine("&Show ID: " + showID);
|
||||
|
||||
@ -79,6 +83,11 @@ namespace Kyoo.InternalAPI
|
||||
}
|
||||
|
||||
Debug.WriteLine("&Season ID: " + seasonID);
|
||||
|
||||
Episode episode = await metadataProvider.GetEpisode(showProviderIDs, seasonNumber, episodeNumber);
|
||||
episode.ShowID = showID;
|
||||
episode.SeasonID = seasonID;
|
||||
libraryManager.RegisterEpisode(episode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,8 @@ namespace Kyoo.InternalAPI
|
||||
{
|
||||
public interface ILibraryManager
|
||||
{
|
||||
//Public value reading
|
||||
//Read values
|
||||
string GetShowExternalIDs(long showID);
|
||||
IEnumerable<Show> QueryShows(string selection);
|
||||
|
||||
//Check if value exists
|
||||
@ -18,5 +19,6 @@ namespace Kyoo.InternalAPI
|
||||
//Register values
|
||||
long RegisterShow(Show show);
|
||||
long RegisterSeason(Season season);
|
||||
long RegisterEpisode(Episode episode);
|
||||
}
|
||||
}
|
||||
|
@ -164,6 +164,20 @@ namespace Kyoo.InternalAPI
|
||||
}
|
||||
|
||||
#region Read the database
|
||||
public string GetShowExternalIDs(long showID)
|
||||
{
|
||||
string query = string.Format("SELECT 1 FROM shows WHERE showID = {0};", showID);
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
reader.Read();
|
||||
return Show.FromReader(reader).ExternalIDs;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public IEnumerable<Show> QueryShows(string selection)
|
||||
{
|
||||
string query = "SELECT * FROM shows;";
|
||||
@ -290,6 +304,28 @@ namespace Kyoo.InternalAPI
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
}
|
||||
|
||||
public long RegisterEpisode(Episode episode)
|
||||
{
|
||||
string query = "INSERT INTO episodes (showID, seasonID, episodeNumber, title, overview, releaseDate, runtime, imgPrimary, externalIDs) VALUES($showID, $seasonID, $episodeNumber, $title, $overview, $releaseDate, $runtime, $imgPrimary, $externalIDs);";
|
||||
Debug.WriteLine("&SQL QUERY:: " + query);
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$showID", episode.ShowID);
|
||||
cmd.Parameters.AddWithValue("seasonID", episode.SeasonID);
|
||||
cmd.Parameters.AddWithValue("episodeNumber", episode.episodeNumber);
|
||||
cmd.Parameters.AddWithValue("$title", episode.Title);
|
||||
cmd.Parameters.AddWithValue("$overview", episode.Overview);
|
||||
cmd.Parameters.AddWithValue("$releaseDate", episode.ReleaseDate);
|
||||
cmd.Parameters.AddWithValue("$runtime", episode.Runtime);
|
||||
cmd.Parameters.AddWithValue("$imgPrimary", episode.ImgPrimary);
|
||||
cmd.Parameters.AddWithValue("$externalIDs", episode.ExternalIDs);
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
cmd.CommandText = "SELECT LAST_INSERT_ROWID()";
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -7,14 +7,14 @@ namespace Kyoo.InternalAPI
|
||||
{
|
||||
//For the show
|
||||
Task<Show> GetShowByID(string id);
|
||||
|
||||
Task<Show> GetShowFromName(string showName, string showPath);
|
||||
|
||||
Task<Show> GetImages(Show show);
|
||||
|
||||
//For the seasons
|
||||
Task<Season> GetSeason(string showName, long seasonNumber);
|
||||
|
||||
Task<string> GetSeasonImage(string showName, long seasonNumber);
|
||||
|
||||
//For the episodes
|
||||
Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber);
|
||||
}
|
||||
}
|
||||
|
@ -256,7 +256,9 @@ namespace Kyoo.InternalAPI.MetadataProvider
|
||||
return show;
|
||||
}
|
||||
|
||||
public Task<Season> GetSeason(string showName, long seasonNumber)
|
||||
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||
public async Task<Season> GetSeason(string showName, long seasonNumber)
|
||||
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||
{
|
||||
return new Season(-1, -1, seasonNumber, "Season " + seasonNumber, null, null, null, null);
|
||||
}
|
||||
@ -265,5 +267,62 @@ namespace Kyoo.InternalAPI.MetadataProvider
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber)
|
||||
{
|
||||
string id = GetID(externalIDs);
|
||||
|
||||
if (id == null)
|
||||
return null;
|
||||
|
||||
string token = await Authentificate();
|
||||
|
||||
if (token == null)
|
||||
return null;
|
||||
|
||||
long page = episodeNumber / 100 + 1;
|
||||
long index = episodeNumber % 100;
|
||||
|
||||
WebRequest request = WebRequest.Create("https://api.thetvdb.com/series/" + id + "/episodes?page=" + page);
|
||||
request.Method = "GET";
|
||||
request.Timeout = 12000;
|
||||
request.ContentType = "application/json";
|
||||
request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token);
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
|
||||
|
||||
if (response.StatusCode == HttpStatusCode.OK)
|
||||
{
|
||||
Stream stream = response.GetResponseStream();
|
||||
using (StreamReader reader = new StreamReader(stream))
|
||||
{
|
||||
string content = await reader.ReadToEndAsync();
|
||||
stream.Close();
|
||||
response.Close();
|
||||
|
||||
dynamic data = JsonConvert.DeserializeObject(content);
|
||||
dynamic episode = data.data[index];
|
||||
|
||||
Debug.WriteLine("&Date: " + (string)episode.firstAired);
|
||||
return new Episode(episodeNumber, episode.episodeName, episode.overview, DateTime.Parse(episode.firstAired), -1, "https://www.thetvdb.com/banners/" + episode.filename, string.Format("TvDB={0}|", episode.id));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine("&TheTvDB Provider couldn't work for the episode number: " + episodeNumber + ".\nError Code: " + response.StatusCode + " Message: " + response.StatusDescription);
|
||||
response.Close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
Debug.WriteLine("&TheTvDB Provider couldn't work for the episode number: " + episodeNumber + ".\nError Code: " + ex.Status);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ using Kyoo.Models;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
@ -96,5 +95,10 @@ namespace Kyoo.InternalAPI
|
||||
{
|
||||
return providers[0].GetSeasonImage(showName, seasonNumber);
|
||||
}
|
||||
|
||||
public Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber)
|
||||
{
|
||||
return providers[0].GetEpisode(externalIDs, seasonNumber, episodeNumber);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,8 +5,8 @@ namespace Kyoo.Models
|
||||
public class Episode
|
||||
{
|
||||
public readonly long id;
|
||||
public readonly long ShowID;
|
||||
public readonly long SeasonID;
|
||||
public long ShowID;
|
||||
public long SeasonID;
|
||||
|
||||
public long episodeNumber;
|
||||
public string Title;
|
||||
@ -25,5 +25,36 @@ namespace Kyoo.Models
|
||||
return Runtime / 60;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Episode() { }
|
||||
|
||||
public Episode(long episodeNumber, string title, string overview, DateTime releaseDate, long runtime, string imgPrimary, string externalIDs)
|
||||
{
|
||||
id = -1;
|
||||
ShowID = -1;
|
||||
SeasonID = -1;
|
||||
this.episodeNumber = episodeNumber;
|
||||
Title = title;
|
||||
Overview = overview;
|
||||
ReleaseDate = releaseDate;
|
||||
Runtime = runtime;
|
||||
ImgPrimary = imgPrimary;
|
||||
ExternalIDs = externalIDs;
|
||||
}
|
||||
|
||||
public Episode(long id, long showID, long seasonID, long episodeNumber, string title, string overview, DateTime releaseDate, long runtime, string imgPrimary, string externalIDs)
|
||||
{
|
||||
this.id = id;
|
||||
ShowID = showID;
|
||||
SeasonID = seasonID;
|
||||
this.episodeNumber = episodeNumber;
|
||||
Title = title;
|
||||
Overview = overview;
|
||||
ReleaseDate = releaseDate;
|
||||
Runtime = runtime;
|
||||
ImgPrimary = imgPrimary;
|
||||
ExternalIDs = externalIDs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user