mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-10-31 10:37:13 -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