mirror of
https://github.com/zoriya/Kyoo.git
synced 2026-05-27 09:32:35 -04:00
Adding metadata to the stream object and getting back data from c++ to the managed code.
This commit is contained in:
@@ -8,7 +8,6 @@ using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Stream = Kyoo.Models.Watch.Stream;
|
||||
|
||||
namespace Kyoo.InternalAPI
|
||||
{
|
||||
@@ -145,8 +144,15 @@ namespace Kyoo.InternalAPI
|
||||
episode.SeasonID = seasonID;
|
||||
long episodeID = libraryManager.RegisterEpisode(episode);
|
||||
|
||||
Stream[] streams = transcoder.ExtractSubtitles(episode.Path);
|
||||
//libraryManager.RegisterStreams(episodeID, streams);
|
||||
if (episode.Path.EndsWith(".mkv"))
|
||||
{
|
||||
Track[] tracks = transcoder.ExtractSubtitles(episode.Path);
|
||||
foreach (Track track in tracks)
|
||||
{
|
||||
track.episodeID = episodeID;
|
||||
libraryManager.RegisterTrack(track);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@ namespace Kyoo.InternalAPI
|
||||
int GetSeasonCount(string showSlug, long seasonNumber);
|
||||
|
||||
//Internal HTML read
|
||||
(List<Stream> audios, List<Stream> subtitles) GetStreams(long episodeID);
|
||||
Stream GetSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag);
|
||||
(List<Track> audios, List<Track> subtitles) GetStreams(long episodeID);
|
||||
Track GetSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag);
|
||||
|
||||
//Public read
|
||||
IEnumerable<Library> GetLibraries();
|
||||
@@ -42,6 +42,7 @@ namespace Kyoo.InternalAPI
|
||||
long RegisterShow(Show show);
|
||||
long RegisterSeason(Season season);
|
||||
long RegisterEpisode(Episode episode);
|
||||
void RegisterTrack(Track track);
|
||||
|
||||
long GetOrCreateGenre(Genre genre);
|
||||
long GetOrCreateStudio(Studio studio);
|
||||
|
||||
@@ -70,11 +70,11 @@ namespace Kyoo.InternalAPI
|
||||
FOREIGN KEY(showID) REFERENCES shows(id),
|
||||
FOREIGN KEY(seasonID) REFERENCES seasons(id)
|
||||
);
|
||||
CREATE TABLE streams(
|
||||
CREATE TABLE tracks(
|
||||
id INTEGER PRIMARY KEY UNIQUE,
|
||||
episodeID INTEGER,
|
||||
streamType TEXT,
|
||||
tile TEXT,
|
||||
title TEXT,
|
||||
language TEXT,
|
||||
codec TEXT,
|
||||
isDefault BOOLEAN,
|
||||
@@ -189,35 +189,35 @@ namespace Kyoo.InternalAPI
|
||||
}
|
||||
|
||||
|
||||
public (List<Stream> audios, List<Stream> subtitles) GetStreams(long episodeID)
|
||||
public (List<Track> audios, List<Track> subtitles) GetStreams(long episodeID)
|
||||
{
|
||||
string query = "SELECT * FROM streams WHERE episodeID = $episodeID;";
|
||||
string query = "SELECT * FROM tracks WHERE episodeID = $episodeID;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$episodeID", episodeID);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
List<Stream> audios = new List<Stream>();
|
||||
List<Stream> subtitles = new List<Stream>();
|
||||
List<Track> audios = new List<Track>();
|
||||
List<Track> subtitles = new List<Track>();
|
||||
|
||||
while (reader.Read())
|
||||
{
|
||||
Stream stream = Stream.FromReader(reader);
|
||||
Track stream = Track.FromReader(reader);
|
||||
|
||||
//if (stream.type == StreamType.Audio)
|
||||
// audios.Add(stream);
|
||||
//else if (stream.type == StreamType.Subtitle)
|
||||
// subtitles.Add(stream);
|
||||
if (stream.type == StreamType.Audio)
|
||||
audios.Add(stream);
|
||||
else if (stream.type == StreamType.Subtitle)
|
||||
subtitles.Add(stream);
|
||||
}
|
||||
|
||||
return (audios, subtitles);
|
||||
}
|
||||
}
|
||||
|
||||
public Stream GetSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag)
|
||||
public Track GetSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag)
|
||||
{
|
||||
string query = "SELECT streams.* FROM streams JOIN episodes ON streams.episodeID = episodes.id JOIN shows ON episodes.showID = shows.id WHERE shows.showSlug = $showSlug AND episodes.seasonNumber = $seasonNumber AND episodes.episodeNumber = $episodeNumber AND streams.language = $languageTag;";
|
||||
string query = "SELECT tracks.* FROM tracks JOIN episodes ON tracks.episodeID = episodes.id JOIN shows ON episodes.showID = shows.id WHERE shows.showSlug = $showSlug AND episodes.seasonNumber = $seasonNumber AND episodes.episodeNumber = $episodeNumber AND tracks.language = $languageTag;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
@@ -228,7 +228,7 @@ namespace Kyoo.InternalAPI
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
if (reader.Read())
|
||||
return Stream.FromReader(reader);
|
||||
return Track.FromReader(reader);
|
||||
|
||||
return null;
|
||||
}
|
||||
@@ -685,6 +685,24 @@ namespace Kyoo.InternalAPI
|
||||
}
|
||||
}
|
||||
|
||||
public void RegisterTrack(Track track)
|
||||
{
|
||||
string query = "INSERT INTO tracks (episodeID, streamType, title, language, codec, isDefault, isForced, isExternal, path) VALUES($episodeID, $streamType, $title, $language, $codec, $isDefault, $isForced, $isExternal, $path);";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$episodeID", track.episodeID);
|
||||
cmd.Parameters.AddWithValue("$streamType", track.type);
|
||||
cmd.Parameters.AddWithValue("$title", track.Title);
|
||||
cmd.Parameters.AddWithValue("$language", track.Language);
|
||||
cmd.Parameters.AddWithValue("$codec", track.Codec);
|
||||
cmd.Parameters.AddWithValue("$isDefault", track.IsDefault);
|
||||
cmd.Parameters.AddWithValue("$isForced", track.IsForced);
|
||||
cmd.Parameters.AddWithValue("$isExternal", track.IsDefault);
|
||||
cmd.Parameters.AddWithValue("$path", track.Path);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
public void RegisterShowPeople(long showID, List<People> people)
|
||||
{
|
||||
string query = "INSERT INTO people (slug, name, imgPrimary, externalIDs) VALUES($slug, $name, $imgPrimary, $externalIDs);";
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using Kyoo.Models;
|
||||
using Kyoo.Models.Watch;
|
||||
|
||||
namespace Kyoo.InternalAPI
|
||||
@@ -11,6 +12,6 @@ namespace Kyoo.InternalAPI
|
||||
string Transcode(string path);
|
||||
|
||||
//Extract all subtitles of a video and save them in the subtitles sub-folder.
|
||||
Stream[] ExtractSubtitles(string path);
|
||||
Track[] ExtractSubtitles(string path);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Kyoo.InternalAPI.TranscoderLink;
|
||||
using Kyoo.Models;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using Stream = Kyoo.Models.Watch.Stream;
|
||||
|
||||
namespace Kyoo.InternalAPI
|
||||
{
|
||||
@@ -13,13 +13,13 @@ namespace Kyoo.InternalAPI
|
||||
Debug.WriteLine("&Api INIT: " + TranscoderAPI.Init());
|
||||
}
|
||||
|
||||
public Stream[] ExtractSubtitles(string path)
|
||||
public Track[] ExtractSubtitles(string path)
|
||||
{
|
||||
string output = Path.Combine(Path.GetDirectoryName(path), "Subtitles");
|
||||
Directory.CreateDirectory(output);
|
||||
TranscoderAPI.ExtractSubtitles(path, output, out Stream[] streams);
|
||||
TranscoderAPI.ExtractSubtitles(path, output, out Track[] tracks);
|
||||
|
||||
return streams;
|
||||
return tracks;
|
||||
}
|
||||
|
||||
public void GetVideo(string path)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using Kyoo.Models;
|
||||
using Kyoo.Models.Watch;
|
||||
|
||||
namespace Kyoo.InternalAPI.TranscoderLink
|
||||
@@ -14,23 +15,24 @@ namespace Kyoo.InternalAPI.TranscoderLink
|
||||
[DllImport(TranscoderPath, CallingConvention = CallingConvention.Cdecl)]
|
||||
private extern static IntPtr ExtractSubtitles(string path, string outPath, out int streams);
|
||||
|
||||
public static void ExtractSubtitles(string path, string outPath, out Stream[] streams)
|
||||
public static void ExtractSubtitles(string path, string outPath, out Track[] tracks)
|
||||
{
|
||||
int size = Marshal.SizeOf<Stream>();
|
||||
|
||||
IntPtr streamsPtr = ExtractSubtitles(path, outPath, out int length);
|
||||
if (length > 0)
|
||||
{
|
||||
streams = new Stream[length];
|
||||
tracks = new Track[length];
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
streams[i] = Marshal.PtrToStructure<Stream>(streamsPtr);
|
||||
tracks[i] = (Track)Marshal.PtrToStructure<Stream>(streamsPtr);
|
||||
tracks[i].type = StreamType.Subtitle;
|
||||
streamsPtr += size;
|
||||
}
|
||||
}
|
||||
else
|
||||
streams = null;
|
||||
tracks = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user