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;
|
string showName = match.Groups["ShowTitle"].Value;
|
||||||
bool seasonSuccess = long.TryParse(match.Groups["Season"].Value, out long seasonNumber);
|
bool seasonSuccess = long.TryParse(match.Groups["Season"].Value, out long seasonNumber);
|
||||||
bool episodeSucess = long.TryParse(match.Groups["Episode"].Value, out long episodeNumber);
|
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;
|
string showProviderIDs;
|
||||||
if (!libraryManager.IsShowRegistered(showPath, out long showID))
|
if (!libraryManager.IsShowRegistered(showPath, out long showID))
|
||||||
@ -146,15 +166,30 @@ namespace Kyoo.InternalAPI
|
|||||||
else
|
else
|
||||||
showProviderIDs = libraryManager.GetShowExternalIDs(showID);
|
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);
|
if (!libraryManager.IsSeasonRegistered(showID, seasonNumber, out seasonID))
|
||||||
season.ShowID = showID;
|
{
|
||||||
seasonID = libraryManager.RegisterSeason(season);
|
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;
|
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;
|
episode.SeasonID = seasonID;
|
||||||
long episodeID = libraryManager.RegisterEpisode(episode);
|
long episodeID = libraryManager.RegisterEpisode(episode);
|
||||||
episode.id = episodeID;
|
episode.id = episodeID;
|
||||||
|
@ -60,6 +60,7 @@ namespace Kyoo.InternalAPI
|
|||||||
seasonID INTEGER,
|
seasonID INTEGER,
|
||||||
seasonNumber INTEGER,
|
seasonNumber INTEGER,
|
||||||
episodeNumber INTEGER,
|
episodeNumber INTEGER,
|
||||||
|
absoluteNumber INTEGER,
|
||||||
path TEXT,
|
path TEXT,
|
||||||
title TEXT,
|
title TEXT,
|
||||||
overview TEXT,
|
overview TEXT,
|
||||||
@ -707,13 +708,14 @@ namespace Kyoo.InternalAPI
|
|||||||
|
|
||||||
public long RegisterEpisode(Episode episode)
|
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))
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||||
{
|
{
|
||||||
cmd.Parameters.AddWithValue("$showID", episode.ShowID);
|
cmd.Parameters.AddWithValue("$showID", episode.ShowID);
|
||||||
cmd.Parameters.AddWithValue("$seasonID", episode.SeasonID);
|
cmd.Parameters.AddWithValue("$seasonID", episode.SeasonID);
|
||||||
cmd.Parameters.AddWithValue("$seasonNUmber", episode.seasonNumber);
|
cmd.Parameters.AddWithValue("$seasonNUmber", episode.seasonNumber);
|
||||||
cmd.Parameters.AddWithValue("$episodeNumber", episode.episodeNumber);
|
cmd.Parameters.AddWithValue("$episodeNumber", episode.episodeNumber);
|
||||||
|
cmd.Parameters.AddWithValue("$absoluteNumber", episode.absoluteNumber);
|
||||||
cmd.Parameters.AddWithValue("$path", episode.Path);
|
cmd.Parameters.AddWithValue("$path", episode.Path);
|
||||||
cmd.Parameters.AddWithValue("$title", episode.Title);
|
cmd.Parameters.AddWithValue("$title", episode.Title);
|
||||||
cmd.Parameters.AddWithValue("$overview", episode.Overview);
|
cmd.Parameters.AddWithValue("$overview", episode.Overview);
|
||||||
|
@ -17,6 +17,6 @@ namespace Kyoo.InternalAPI
|
|||||||
Task<string> GetSeasonImage(string showName, long seasonNumber);
|
Task<string> GetSeasonImage(string showName, long seasonNumber);
|
||||||
|
|
||||||
//For the episodes
|
//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;
|
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);
|
string id = GetID(externalIDs);
|
||||||
|
|
||||||
if (id == null)
|
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();
|
string token = await Authentificate();
|
||||||
|
|
||||||
if (token == null)
|
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.Method = "GET";
|
||||||
request.Timeout = 12000;
|
request.Timeout = 12000;
|
||||||
request.ContentType = "application/json";
|
request.ContentType = "application/json";
|
||||||
@ -306,20 +311,30 @@ namespace Kyoo.InternalAPI.MetadataProvider
|
|||||||
dynamic episode = data.data[0];
|
dynamic episode = data.data[0];
|
||||||
|
|
||||||
DateTime dateTime = DateTime.ParseExact((string)episode.firstAired, "yyyy-MM-dd", CultureInfo.InvariantCulture);
|
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
|
else
|
||||||
{
|
{
|
||||||
Debug.WriteLine("&TheTvDB Provider couldn't work for the episode number: " + episodeNumber + ".\nError Code: " + response.StatusCode + " Message: " + response.StatusDescription);
|
Debug.WriteLine("&TheTvDB Provider couldn't work for the episode number: " + episodeNumber + ".\nError Code: " + response.StatusCode + " Message: " + response.StatusDescription);
|
||||||
response.Close();
|
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)
|
catch (WebException ex)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("&TheTvDB Provider couldn't work for the episode number: " + episodeNumber + ".\nError Code: " + ex.Status);
|
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);
|
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>();
|
List<Episode> datas = new List<Episode>();
|
||||||
for (int i = 0; i < providers.Count; i++)
|
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);
|
Episode episode = Merge(datas);
|
||||||
|
@ -11,6 +11,7 @@ namespace Kyoo.Models
|
|||||||
|
|
||||||
public long seasonNumber;
|
public long seasonNumber;
|
||||||
public long episodeNumber;
|
public long episodeNumber;
|
||||||
|
public long absoluteNumber;
|
||||||
[JsonIgnore] public string Path;
|
[JsonIgnore] public string Path;
|
||||||
public string Title;
|
public string Title;
|
||||||
public string Overview;
|
public string Overview;
|
||||||
@ -27,13 +28,14 @@ namespace Kyoo.Models
|
|||||||
|
|
||||||
public Episode() { }
|
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;
|
id = -1;
|
||||||
ShowID = -1;
|
ShowID = -1;
|
||||||
SeasonID = -1;
|
SeasonID = -1;
|
||||||
this.seasonNumber = seasonNumber;
|
this.seasonNumber = seasonNumber;
|
||||||
this.episodeNumber = episodeNumber;
|
this.episodeNumber = episodeNumber;
|
||||||
|
this.absoluteNumber = absoluteNumber;
|
||||||
Title = title;
|
Title = title;
|
||||||
Overview = overview;
|
Overview = overview;
|
||||||
ReleaseDate = releaseDate;
|
ReleaseDate = releaseDate;
|
||||||
@ -42,13 +44,14 @@ namespace Kyoo.Models
|
|||||||
ExternalIDs = externalIDs;
|
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;
|
this.id = id;
|
||||||
ShowID = showID;
|
ShowID = showID;
|
||||||
SeasonID = seasonID;
|
SeasonID = seasonID;
|
||||||
this.seasonNumber = seasonNumber;
|
this.seasonNumber = seasonNumber;
|
||||||
this.episodeNumber = episodeNumber;
|
this.episodeNumber = episodeNumber;
|
||||||
|
this.absoluteNumber = absoluteNumber;
|
||||||
Path = path;
|
Path = path;
|
||||||
Title = title;
|
Title = title;
|
||||||
Overview = overview;
|
Overview = overview;
|
||||||
@ -65,6 +68,7 @@ namespace Kyoo.Models
|
|||||||
(long)reader["seasonID"],
|
(long)reader["seasonID"],
|
||||||
(long)reader["seasonNumber"],
|
(long)reader["seasonNumber"],
|
||||||
(long)reader["episodeNumber"],
|
(long)reader["episodeNumber"],
|
||||||
|
(long)reader["absoluteNumber"],
|
||||||
reader["path"] as string,
|
reader["path"] as string,
|
||||||
reader["title"] as string,
|
reader["title"] as string,
|
||||||
reader["overview"] as string,
|
reader["overview"] as string,
|
||||||
|
@ -7,5 +7,6 @@
|
|||||||
"libraryPaths": [
|
"libraryPaths": [
|
||||||
"\\\\sdg\\video\\Anime"
|
"\\\\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