mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-11-04 03:27:14 -05: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);
 | 
					                    Debug.WriteLine("&ShowPath: " + showPath + " Show: " + showName + " season: " + seasonNumber + " episode: " + episodeNumber);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    string showProviderIDs;
 | 
				
			||||||
                    if (!libraryManager.IsShowRegistered(showPath, out long showID))
 | 
					                    if (!libraryManager.IsShowRegistered(showPath, out long showID))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        Debug.WriteLine("&Should register show: " + showName);
 | 
					                        Debug.WriteLine("&Should register show: " + showName);
 | 
				
			||||||
                        Show show = await metadataProvider.GetShowFromName(showName, showPath);
 | 
					                        Show show = await metadataProvider.GetShowFromName(showName, showPath);
 | 
				
			||||||
 | 
					                        showProviderIDs = show.ExternalIDs;
 | 
				
			||||||
                        showID = libraryManager.RegisterShow(show);
 | 
					                        showID = libraryManager.RegisterShow(show);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        showProviderIDs = libraryManager.GetShowExternalIDs(showID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    Debug.WriteLine("&Show ID: " + showID);
 | 
					                    Debug.WriteLine("&Show ID: " + showID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -79,6 +83,11 @@ namespace Kyoo.InternalAPI
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    Debug.WriteLine("&Season ID: " + seasonID);
 | 
					                    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 interface ILibraryManager
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        //Public value reading
 | 
					        //Read values
 | 
				
			||||||
 | 
					        string GetShowExternalIDs(long showID);
 | 
				
			||||||
        IEnumerable<Show> QueryShows(string selection);
 | 
					        IEnumerable<Show> QueryShows(string selection);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Check if value exists
 | 
					        //Check if value exists
 | 
				
			||||||
@ -18,5 +19,6 @@ namespace Kyoo.InternalAPI
 | 
				
			|||||||
        //Register values
 | 
					        //Register values
 | 
				
			||||||
        long RegisterShow(Show show);
 | 
					        long RegisterShow(Show show);
 | 
				
			||||||
        long RegisterSeason(Season season);
 | 
					        long RegisterSeason(Season season);
 | 
				
			||||||
 | 
					        long RegisterEpisode(Episode episode);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -164,6 +164,20 @@ namespace Kyoo.InternalAPI
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Read the database
 | 
					        #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)
 | 
					        public IEnumerable<Show> QueryShows(string selection)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            string query = "SELECT * FROM shows;";
 | 
					            string query = "SELECT * FROM shows;";
 | 
				
			||||||
@ -290,6 +304,28 @@ namespace Kyoo.InternalAPI
 | 
				
			|||||||
                return (long)cmd.ExecuteScalar();
 | 
					                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
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -7,14 +7,14 @@ namespace Kyoo.InternalAPI
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        //For the show
 | 
					        //For the show
 | 
				
			||||||
        Task<Show> GetShowByID(string id);
 | 
					        Task<Show> GetShowByID(string id);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        Task<Show> GetShowFromName(string showName, string showPath);
 | 
					        Task<Show> GetShowFromName(string showName, string showPath);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        Task<Show> GetImages(Show show);
 | 
					        Task<Show> GetImages(Show show);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //For the seasons
 | 
					        //For the seasons
 | 
				
			||||||
        Task<Season> GetSeason(string showName, long seasonNumber);
 | 
					        Task<Season> GetSeason(string showName, long seasonNumber);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        Task<string> GetSeasonImage(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;
 | 
					            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);
 | 
					            return new Season(-1, -1, seasonNumber, "Season " + seasonNumber, null, null, null, null);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -265,5 +267,62 @@ namespace Kyoo.InternalAPI.MetadataProvider
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            return null;
 | 
					            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 Microsoft.Extensions.Configuration;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Diagnostics;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Reflection;
 | 
					using System.Reflection;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -96,5 +95,10 @@ namespace Kyoo.InternalAPI
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            return providers[0].GetSeasonImage(showName, seasonNumber);
 | 
					            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 class Episode
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public readonly long id;
 | 
					        public readonly long id;
 | 
				
			||||||
        public readonly long ShowID;
 | 
					        public long ShowID;
 | 
				
			||||||
        public readonly long SeasonID;
 | 
					        public long SeasonID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public long episodeNumber;
 | 
					        public long episodeNumber;
 | 
				
			||||||
        public string Title;
 | 
					        public string Title;
 | 
				
			||||||
@ -25,5 +25,36 @@ namespace Kyoo.Models
 | 
				
			|||||||
                return Runtime / 60;
 | 
					                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