mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Making app support absolute paths.
This commit is contained in:
parent
b3824b3b03
commit
ab630b9b84
@ -132,6 +132,26 @@ namespace Kyoo.InternalAPI
|
||||
string showName = match.Groups["ShowTitle"].Value;
|
||||
bool seasonSuccess = long.TryParse(match.Groups["Season"].Value, out long seasonNumber);
|
||||
bool episodeSucess = long.TryParse(match.Groups["Episode"].Value, out long episodeNumber);
|
||||
long absoluteNumber = -1;
|
||||
|
||||
if(!seasonSuccess || !episodeSucess)
|
||||
{
|
||||
//Considering that the episode is using absolute path.
|
||||
seasonNumber = -1;
|
||||
episodeNumber = -1;
|
||||
|
||||
regex = new Regex(config.GetValue<string>("absoluteRegex"));
|
||||
match = regex.Match(path);
|
||||
|
||||
showName = match.Groups["ShowTitle"].Value;
|
||||
bool absoluteSucess = long.TryParse(match.Groups["AbsoluteNumber"].Value, out absoluteNumber);
|
||||
|
||||
if (!absoluteSucess)
|
||||
{
|
||||
Debug.WriteLine("&Couldn't find basic data for the episode (regexs didn't match) at " + path);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
string showProviderIDs;
|
||||
if (!libraryManager.IsShowRegistered(showPath, out long showID))
|
||||
@ -146,15 +166,30 @@ namespace Kyoo.InternalAPI
|
||||
else
|
||||
showProviderIDs = libraryManager.GetShowExternalIDs(showID);
|
||||
|
||||
if (!libraryManager.IsSeasonRegistered(showID, seasonNumber, out long seasonID))
|
||||
long seasonID = -1;
|
||||
if (seasonNumber != -1)
|
||||
{
|
||||
Season season = await metadataProvider.GetSeason(showName, seasonNumber);
|
||||
season.ShowID = showID;
|
||||
seasonID = libraryManager.RegisterSeason(season);
|
||||
if (!libraryManager.IsSeasonRegistered(showID, seasonNumber, out seasonID))
|
||||
{
|
||||
Season season = await metadataProvider.GetSeason(showName, seasonNumber);
|
||||
season.ShowID = showID;
|
||||
seasonID = libraryManager.RegisterSeason(season);
|
||||
}
|
||||
}
|
||||
|
||||
Episode episode = await metadataProvider.GetEpisode(showProviderIDs, seasonNumber, episodeNumber, path);
|
||||
Episode episode = await metadataProvider.GetEpisode(showProviderIDs, seasonNumber, episodeNumber, absoluteNumber, path);
|
||||
episode.ShowID = showID;
|
||||
|
||||
if(seasonID == -1)
|
||||
{
|
||||
if (!libraryManager.IsSeasonRegistered(showID, episode.seasonNumber, out seasonID))
|
||||
{
|
||||
Season season = await metadataProvider.GetSeason(showName, episode.seasonNumber);
|
||||
season.ShowID = showID;
|
||||
seasonID = libraryManager.RegisterSeason(season);
|
||||
}
|
||||
}
|
||||
|
||||
episode.SeasonID = seasonID;
|
||||
long episodeID = libraryManager.RegisterEpisode(episode);
|
||||
episode.id = episodeID;
|
||||
|
@ -60,6 +60,7 @@ namespace Kyoo.InternalAPI
|
||||
seasonID INTEGER,
|
||||
seasonNumber INTEGER,
|
||||
episodeNumber INTEGER,
|
||||
absoluteNumber INTEGER,
|
||||
path TEXT,
|
||||
title TEXT,
|
||||
overview TEXT,
|
||||
@ -707,13 +708,14 @@ namespace Kyoo.InternalAPI
|
||||
|
||||
public long RegisterEpisode(Episode episode)
|
||||
{
|
||||
string query = "INSERT INTO episodes (showID, seasonID, seasonNumber, episodeNumber, path, title, overview, releaseDate, runtime, imgPrimary, externalIDs) VALUES($showID, $seasonID, $seasonNumber,$episodeNumber, $path, $title, $overview, $releaseDate, $runtime, $imgPrimary, $externalIDs);";
|
||||
string query = "INSERT INTO episodes (showID, seasonID, seasonNumber, episodeNumber, absoluteNumber, path, title, overview, releaseDate, runtime, imgPrimary, externalIDs) VALUES($showID, $seasonID, $seasonNumber, $episodeNumber, $absoluteNumber, $path, $title, $overview, $releaseDate, $runtime, $imgPrimary, $externalIDs);";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$showID", episode.ShowID);
|
||||
cmd.Parameters.AddWithValue("$seasonID", episode.SeasonID);
|
||||
cmd.Parameters.AddWithValue("$seasonNUmber", episode.seasonNumber);
|
||||
cmd.Parameters.AddWithValue("$episodeNumber", episode.episodeNumber);
|
||||
cmd.Parameters.AddWithValue("$absoluteNumber", episode.absoluteNumber);
|
||||
cmd.Parameters.AddWithValue("$path", episode.Path);
|
||||
cmd.Parameters.AddWithValue("$title", episode.Title);
|
||||
cmd.Parameters.AddWithValue("$overview", episode.Overview);
|
||||
|
@ -17,6 +17,6 @@ namespace Kyoo.InternalAPI
|
||||
Task<string> GetSeasonImage(string showName, long seasonNumber);
|
||||
|
||||
//For the episodes
|
||||
Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, string episodePath);
|
||||
Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, long absoluteNumber, string episodePath);
|
||||
}
|
||||
}
|
||||
|
@ -271,19 +271,24 @@ namespace Kyoo.InternalAPI.MetadataProvider
|
||||
return null;
|
||||
}
|
||||
|
||||
public async Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, string episodePath)
|
||||
public async Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, long absoluteNumber, string episodePath)
|
||||
{
|
||||
string id = GetID(externalIDs);
|
||||
|
||||
if (id == null)
|
||||
return new Episode(seasonNumber, episodeNumber, null, null, null, -1, null, externalIDs);
|
||||
return new Episode(seasonNumber, episodeNumber, absoluteNumber, null, null, null, -1, null, externalIDs);
|
||||
|
||||
string token = await Authentificate();
|
||||
|
||||
if (token == null)
|
||||
return new Episode(seasonNumber, episodeNumber, null, null, null, -1, null, externalIDs);
|
||||
return new Episode(seasonNumber, episodeNumber, absoluteNumber, null, null, null, -1, null, externalIDs);
|
||||
|
||||
WebRequest request;
|
||||
if(absoluteNumber != -1)
|
||||
request = WebRequest.Create("https://api.thetvdb.com/series/" + id + "/episodes/query?absoluteNumber=" + absoluteNumber);
|
||||
else
|
||||
request = WebRequest.Create("https://api.thetvdb.com/series/" + id + "/episodes/query?airedSeason=" + seasonNumber + "&airedEpisode=" + episodeNumber);
|
||||
|
||||
WebRequest request = WebRequest.Create("https://api.thetvdb.com/series/" + id + "/episodes/query?airedSeason=" + seasonNumber + "&airedEpisode=" + episodeNumber);
|
||||
request.Method = "GET";
|
||||
request.Timeout = 12000;
|
||||
request.ContentType = "application/json";
|
||||
@ -306,20 +311,30 @@ namespace Kyoo.InternalAPI.MetadataProvider
|
||||
dynamic episode = data.data[0];
|
||||
|
||||
DateTime dateTime = DateTime.ParseExact((string)episode.firstAired, "yyyy-MM-dd", CultureInfo.InvariantCulture);
|
||||
return new Episode(seasonNumber, episodeNumber, (string)episode.episodeName, (string)episode.overview, dateTime, -1, "https://www.thetvdb.com/banners/" + episode.filename, string.Format("TvDB={0}|", episode.id));
|
||||
|
||||
if (absoluteNumber == -1)
|
||||
absoluteNumber = episode.absoluteNumber as long? ?? -1;
|
||||
else
|
||||
{
|
||||
seasonNumber = episode.airedSeason;
|
||||
episodeNumber = episode.airedEpisodeNumber;
|
||||
}
|
||||
|
||||
|
||||
return new Episode(seasonNumber, episodeNumber, absoluteNumber, (string)episode.episodeName, (string)episode.overview, dateTime, -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 new Episode(seasonNumber, episodeNumber, null, null, null, -1, null, externalIDs);
|
||||
return new Episode(seasonNumber, episodeNumber, absoluteNumber, null, null, null, -1, null, externalIDs);
|
||||
}
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
Debug.WriteLine("&TheTvDB Provider couldn't work for the episode number: " + episodeNumber + ".\nError Code: " + ex.Status);
|
||||
return new Episode(seasonNumber, episodeNumber, null, null, null, -1, null, externalIDs);
|
||||
return new Episode(seasonNumber, episodeNumber, absoluteNumber, null, null, null, -1, null, externalIDs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -136,12 +136,12 @@ namespace Kyoo.InternalAPI
|
||||
return providers[0].GetSeasonImage(showName, seasonNumber);
|
||||
}
|
||||
|
||||
public async Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, string episodePath)
|
||||
public async Task<Episode> GetEpisode(string externalIDs, long seasonNumber, long episodeNumber, long absoluteNumber, string episodePath)
|
||||
{
|
||||
List<Episode> datas = new List<Episode>();
|
||||
for (int i = 0; i < providers.Count; i++)
|
||||
{
|
||||
datas.Add(await providers[i].GetEpisode(externalIDs, seasonNumber, episodeNumber, episodePath));
|
||||
datas.Add(await providers[i].GetEpisode(externalIDs, seasonNumber, episodeNumber, absoluteNumber, episodePath));
|
||||
}
|
||||
|
||||
Episode episode = Merge(datas);
|
||||
|
@ -11,6 +11,7 @@ namespace Kyoo.Models
|
||||
|
||||
public long seasonNumber;
|
||||
public long episodeNumber;
|
||||
public long absoluteNumber;
|
||||
[JsonIgnore] public string Path;
|
||||
public string Title;
|
||||
public string Overview;
|
||||
@ -27,13 +28,14 @@ namespace Kyoo.Models
|
||||
|
||||
public Episode() { }
|
||||
|
||||
public Episode(long seasonNumber, long episodeNumber, string title, string overview, DateTime? releaseDate, long runtime, string imgPrimary, string externalIDs)
|
||||
public Episode(long seasonNumber, long episodeNumber, long absoluteNumber, string title, string overview, DateTime? releaseDate, long runtime, string imgPrimary, string externalIDs)
|
||||
{
|
||||
id = -1;
|
||||
ShowID = -1;
|
||||
SeasonID = -1;
|
||||
this.seasonNumber = seasonNumber;
|
||||
this.episodeNumber = episodeNumber;
|
||||
this.absoluteNumber = absoluteNumber;
|
||||
Title = title;
|
||||
Overview = overview;
|
||||
ReleaseDate = releaseDate;
|
||||
@ -42,13 +44,14 @@ namespace Kyoo.Models
|
||||
ExternalIDs = externalIDs;
|
||||
}
|
||||
|
||||
public Episode(long id, long showID, long seasonID, long seasonNumber, long episodeNumber, string path, string title, string overview, DateTime? releaseDate, long runtime, string imgPrimary, string externalIDs)
|
||||
public Episode(long id, long showID, long seasonID, long seasonNumber, long episodeNumber, long absoluteNumber, string path, string title, string overview, DateTime? releaseDate, long runtime, string imgPrimary, string externalIDs)
|
||||
{
|
||||
this.id = id;
|
||||
ShowID = showID;
|
||||
SeasonID = seasonID;
|
||||
this.seasonNumber = seasonNumber;
|
||||
this.episodeNumber = episodeNumber;
|
||||
this.absoluteNumber = absoluteNumber;
|
||||
Path = path;
|
||||
Title = title;
|
||||
Overview = overview;
|
||||
@ -65,6 +68,7 @@ namespace Kyoo.Models
|
||||
(long)reader["seasonID"],
|
||||
(long)reader["seasonNumber"],
|
||||
(long)reader["episodeNumber"],
|
||||
(long)reader["absoluteNumber"],
|
||||
reader["path"] as string,
|
||||
reader["title"] as string,
|
||||
reader["overview"] as string,
|
||||
|
@ -7,5 +7,6 @@
|
||||
"libraryPaths": [
|
||||
"\\\\sdg\\video\\Anime"
|
||||
],
|
||||
"regex": ".*\\\\(?<ShowTitle>.+?) S(?<Season>\\d+)E(?<Episode>\\d+)"
|
||||
"regex": ".*\\\\(?<ShowTitle>.+?) S(?<Season>\\d+)E(?<Episode>\\d+)",
|
||||
"absoluteRegex": ".*\\\\(?<ShowTitle>.+?) (?<AbsoluteNumber>\\d+)"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user