Handling subtitle addition

This commit is contained in:
Zoe Roux 2019-12-29 05:16:07 +01:00
parent bf00c873ab
commit 877bebb0cb

View File

@ -8,6 +8,7 @@ using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Models.Watch;
namespace Kyoo.InternalAPI namespace Kyoo.InternalAPI
{ {
@ -249,15 +250,21 @@ namespace Kyoo.InternalAPI
episode.id = libraryManager.RegisterEpisode(episode); episode.id = libraryManager.RegisterEpisode(episode);
Track[] tracks = await transcoder.GetTrackInfo(episode.Path); Track[] tracks = await transcoder.GetTrackInfo(episode.Path);
int subcount = 0;
foreach (Track track in tracks) foreach (Track track in tracks)
{ {
if (track.Type == StreamType.Subtitle)
{
subcount++;
continue;
}
track.episodeID = episode.id; track.episodeID = episode.id;
libraryManager.RegisterTrack(track); libraryManager.RegisterTrack(track);
} }
if (episode.Path.EndsWith(".mkv")) if (episode.Path.EndsWith(".mkv"))
{ {
if (!FindExtractedSubtitles(episode)) if (CountExtractedSubtitles(episode) != subcount)
{ {
Track[] subtitles = await transcoder.ExtractSubtitles(episode.Path); Track[] subtitles = await transcoder.ExtractSubtitles(episode.Path);
if (subtitles != null) if (subtitles != null)
@ -272,48 +279,35 @@ namespace Kyoo.InternalAPI
} }
} }
private bool FindExtractedSubtitles(Episode episode) private int CountExtractedSubtitles(Episode episode)
{ {
string path = Path.Combine(Path.GetDirectoryName(episode.Path), "Subtitles"); string path = Path.Combine(Path.GetDirectoryName(episode.Path), "Subtitles");
if(Directory.Exists(path)) int subcount = 0;
if (!Directory.Exists(path))
return 0;
foreach (string sub in Directory.EnumerateFiles(path, "", SearchOption.AllDirectories))
{ {
bool ret = false; string episodeLink = Path.GetFileNameWithoutExtension(episode.Path);
foreach (string sub in Directory.EnumerateFiles(path, "", SearchOption.AllDirectories))
if (sub.Contains(episodeLink))
{ {
string episodeLink = Path.GetFileNameWithoutExtension(episode.Path); string language = sub.Substring(Path.GetDirectoryName(sub).Length + episodeLink.Length + 2, 3);
bool isDefault = sub.Contains("default");
bool isForced = sub.Contains("forced");
Track track = new Track(StreamType.Subtitle, null, language, isDefault, isForced, null, false, sub) { episodeID = episode.id };
if (sub.Contains(episodeLink)) if (Path.GetExtension(sub) == ".ass")
{ track.Codec = "ass";
string language = sub.Substring(Path.GetDirectoryName(sub).Length + episodeLink.Length + 2, 3); else if (Path.GetExtension(sub) == ".srt")
bool isDefault = sub.Contains("default"); track.Codec = "subrip";
bool isForced = sub.Contains("forced"); else
track.Codec = null;
string codec; libraryManager.RegisterTrack(track);
switch (Path.GetExtension(sub)) subcount++;
{
case ".ass":
codec = "ass";
break;
case ".srt":
codec = "subrip";
break;
default:
codec = null;
break;
}
Track track = new Track(Models.Watch.StreamType.Subtitle, null, language, isDefault, isForced, codec, false, sub) { episodeID = episode.id };
libraryManager.RegisterTrack(track);
ret = true;
}
} }
return ret;
} }
return subcount;
return false;
} }
private static readonly string[] VideoExtensions = { ".webm", ".mkv", ".flv", ".vob", ".ogg", ".ogv", ".avi", ".mts", ".m2ts", ".ts", ".mov", ".qt", ".asf", ".mp4", ".m4p", ".m4v", ".mpg", ".mp2", ".mpeg", ".mpe", ".mpv", ".m2v", ".3gp", ".3g2" }; private static readonly string[] VideoExtensions = { ".webm", ".mkv", ".flv", ".vob", ".ogg", ".ogv", ".avi", ".mts", ".m2ts", ".ts", ".mov", ".qt", ".asf", ".mp4", ".m4p", ".m4v", ".mpg", ".mp2", ".mpeg", ".mpe", ".mpv", ".m2v", ".3gp", ".3g2" };