diff --git a/Kyoo.Common/Controllers/IRepository.cs b/Kyoo.Common/Controllers/IRepository.cs index cdcc9359..e2e5a2c0 100644 --- a/Kyoo.Common/Controllers/IRepository.cs +++ b/Kyoo.Common/Controllers/IRepository.cs @@ -68,7 +68,7 @@ namespace Kyoo.Controllers } } - public interface IRepository : IDisposable, IAsyncDisposable where T : IRessource + public interface IRepository : IDisposable, IAsyncDisposable where T : IResource { Task Get(int id); Task Get(string slug); diff --git a/Kyoo.Common/Models/Ressources/LibraryItem.cs b/Kyoo.Common/Models/LibraryItem.cs similarity index 97% rename from Kyoo.Common/Models/Ressources/LibraryItem.cs rename to Kyoo.Common/Models/LibraryItem.cs index 176c056f..4264a469 100644 --- a/Kyoo.Common/Models/Ressources/LibraryItem.cs +++ b/Kyoo.Common/Models/LibraryItem.cs @@ -10,7 +10,7 @@ namespace Kyoo.Models Collection } - public class LibraryItem : IRessource + public class LibraryItem : IResource { public int ID { get; set; } public string Slug { get; set; } diff --git a/Kyoo.Common/Models/Page.cs b/Kyoo.Common/Models/Page.cs index 5d4505e7..f91e94d8 100644 --- a/Kyoo.Common/Models/Page.cs +++ b/Kyoo.Common/Models/Page.cs @@ -3,7 +3,7 @@ using System.Linq; namespace Kyoo.Models { - public class Page where T : IRessource + public class Page where T : IResource { public string This { get; set; } public string First { get; set; } diff --git a/Kyoo.Common/Models/PeopleLink.cs b/Kyoo.Common/Models/PeopleLink.cs index d36f90bd..f095d802 100644 --- a/Kyoo.Common/Models/PeopleLink.cs +++ b/Kyoo.Common/Models/PeopleLink.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json; namespace Kyoo.Models { - public class PeopleLink : IRessource + public class PeopleLink : IResource { [JsonIgnore] public int ID { get; set; } [JsonIgnore] public int PeopleID { get; set; } diff --git a/Kyoo.Common/Models/Ressources/Collection.cs b/Kyoo.Common/Models/Resources/Collection.cs similarity index 96% rename from Kyoo.Common/Models/Ressources/Collection.cs rename to Kyoo.Common/Models/Resources/Collection.cs index e6fcee84..eb932de2 100644 --- a/Kyoo.Common/Models/Ressources/Collection.cs +++ b/Kyoo.Common/Models/Resources/Collection.cs @@ -5,7 +5,7 @@ using Kyoo.Models.Attributes; namespace Kyoo.Models { - public class Collection : IRessource + public class Collection : IResource { [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } diff --git a/Kyoo.Common/Models/Ressources/Episode.cs b/Kyoo.Common/Models/Resources/Episode.cs similarity index 98% rename from Kyoo.Common/Models/Ressources/Episode.cs rename to Kyoo.Common/Models/Resources/Episode.cs index c9725fe3..a512ed75 100644 --- a/Kyoo.Common/Models/Ressources/Episode.cs +++ b/Kyoo.Common/Models/Resources/Episode.cs @@ -5,7 +5,7 @@ using Kyoo.Models.Attributes; namespace Kyoo.Models { - public class Episode : IRessource, IOnMerge + public class Episode : IResource, IOnMerge { [JsonIgnore] public int ID { get; set; } [JsonIgnore] public int ShowID { get; set; } diff --git a/Kyoo.Common/Models/Ressources/Genre.cs b/Kyoo.Common/Models/Resources/Genre.cs similarity index 96% rename from Kyoo.Common/Models/Ressources/Genre.cs rename to Kyoo.Common/Models/Resources/Genre.cs index fe4a2533..2fe7c3a3 100644 --- a/Kyoo.Common/Models/Ressources/Genre.cs +++ b/Kyoo.Common/Models/Resources/Genre.cs @@ -5,7 +5,7 @@ using Newtonsoft.Json; namespace Kyoo.Models { - public class Genre : IRessource + public class Genre : IResource { [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } diff --git a/Kyoo.Common/Models/Ressources/IRessource.cs b/Kyoo.Common/Models/Resources/IResource.cs similarity index 76% rename from Kyoo.Common/Models/Ressources/IRessource.cs rename to Kyoo.Common/Models/Resources/IResource.cs index 6f86a4af..7ef6c4df 100644 --- a/Kyoo.Common/Models/Ressources/IRessource.cs +++ b/Kyoo.Common/Models/Resources/IResource.cs @@ -1,6 +1,6 @@ namespace Kyoo.Models { - public interface IRessource + public interface IResource { public int ID { get; set; } public string Slug { get; } diff --git a/Kyoo.Common/Models/Ressources/Library.cs b/Kyoo.Common/Models/Resources/Library.cs similarity index 97% rename from Kyoo.Common/Models/Ressources/Library.cs rename to Kyoo.Common/Models/Resources/Library.cs index 3b192df8..11526f43 100644 --- a/Kyoo.Common/Models/Ressources/Library.cs +++ b/Kyoo.Common/Models/Resources/Library.cs @@ -5,7 +5,7 @@ using Newtonsoft.Json; namespace Kyoo.Models { - public class Library : IRessource + public class Library : IResource { [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } diff --git a/Kyoo.Common/Models/Ressources/People.cs b/Kyoo.Common/Models/Resources/People.cs similarity index 94% rename from Kyoo.Common/Models/Ressources/People.cs rename to Kyoo.Common/Models/Resources/People.cs index 02c967b0..b2bc658e 100644 --- a/Kyoo.Common/Models/Ressources/People.cs +++ b/Kyoo.Common/Models/Resources/People.cs @@ -4,7 +4,7 @@ using Newtonsoft.Json; namespace Kyoo.Models { - public class People : IRessource + public class People : IResource { public int ID { get; set; } public string Slug { get; set; } diff --git a/Kyoo.Common/Models/Ressources/ProviderID.cs b/Kyoo.Common/Models/Resources/ProviderID.cs similarity index 92% rename from Kyoo.Common/Models/Ressources/ProviderID.cs rename to Kyoo.Common/Models/Resources/ProviderID.cs index 12753fe2..387376fa 100644 --- a/Kyoo.Common/Models/Ressources/ProviderID.cs +++ b/Kyoo.Common/Models/Resources/ProviderID.cs @@ -2,7 +2,7 @@ using Newtonsoft.Json; namespace Kyoo.Models { - public class ProviderID : IRessource + public class ProviderID : IResource { [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } diff --git a/Kyoo.Common/Models/Ressources/Season.cs b/Kyoo.Common/Models/Resources/Season.cs similarity index 96% rename from Kyoo.Common/Models/Ressources/Season.cs rename to Kyoo.Common/Models/Resources/Season.cs index 1307bab3..2bd62a6a 100644 --- a/Kyoo.Common/Models/Ressources/Season.cs +++ b/Kyoo.Common/Models/Resources/Season.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json; namespace Kyoo.Models { - public class Season : IRessource + public class Season : IResource { [JsonIgnore] public int ID { get; set; } [JsonIgnore] public int ShowID { get; set; } diff --git a/Kyoo.Common/Models/Ressources/Show.cs b/Kyoo.Common/Models/Resources/Show.cs similarity index 98% rename from Kyoo.Common/Models/Ressources/Show.cs rename to Kyoo.Common/Models/Resources/Show.cs index 3a129b65..aabfc697 100644 --- a/Kyoo.Common/Models/Ressources/Show.cs +++ b/Kyoo.Common/Models/Resources/Show.cs @@ -5,7 +5,7 @@ using Kyoo.Models.Attributes; namespace Kyoo.Models { - public class Show : IRessource, IOnMerge + public class Show : IResource, IOnMerge { [JsonIgnore] public int ID { get; set; } diff --git a/Kyoo.Common/Models/Ressources/Studio.cs b/Kyoo.Common/Models/Resources/Studio.cs similarity index 94% rename from Kyoo.Common/Models/Ressources/Studio.cs rename to Kyoo.Common/Models/Resources/Studio.cs index 02d61c77..8936bf66 100644 --- a/Kyoo.Common/Models/Ressources/Studio.cs +++ b/Kyoo.Common/Models/Resources/Studio.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json; namespace Kyoo.Models { - public class Studio : IRessource + public class Studio : IResource { [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } diff --git a/Kyoo.Common/Models/Ressources/Track.cs b/Kyoo.Common/Models/Resources/Track.cs similarity index 98% rename from Kyoo.Common/Models/Ressources/Track.cs rename to Kyoo.Common/Models/Resources/Track.cs index 61209807..88953eb2 100644 --- a/Kyoo.Common/Models/Ressources/Track.cs +++ b/Kyoo.Common/Models/Resources/Track.cs @@ -53,7 +53,7 @@ namespace Kyoo.Models } } - public class Track : Stream, IRessource + public class Track : Stream, IResource { [JsonIgnore] public int ID { get; set; } [JsonIgnore] public int EpisodeID { get; set; } diff --git a/Kyoo.CommonAPI/CrudApi.cs b/Kyoo.CommonAPI/CrudApi.cs index 8cca2f79..d029659e 100644 --- a/Kyoo.CommonAPI/CrudApi.cs +++ b/Kyoo.CommonAPI/CrudApi.cs @@ -12,7 +12,7 @@ using Microsoft.Extensions.Configuration; namespace Kyoo.CommonApi { [ApiController] - public class CrudApi : ControllerBase where T : IRessource + public class CrudApi : ControllerBase where T : IResource { private readonly IRepository _repository; private readonly string _baseURL; @@ -73,7 +73,7 @@ namespace Kyoo.CommonApi } protected Page Page(ICollection ressources, int limit) - where TResult : IRessource + where TResult : IResource { return new Page(ressources, _baseURL + Request.Path, diff --git a/Kyoo.CommonAPI/LocalRepository.cs b/Kyoo.CommonAPI/LocalRepository.cs index 56381b6e..67442f12 100644 --- a/Kyoo.CommonAPI/LocalRepository.cs +++ b/Kyoo.CommonAPI/LocalRepository.cs @@ -11,7 +11,7 @@ using Npgsql; namespace Kyoo.Controllers { - public abstract class LocalRepository : IRepository where T : class, IRessource + public abstract class LocalRepository : IRepository where T : class, IResource { private readonly DbContext _database; @@ -76,9 +76,12 @@ namespace Kyoo.Controllers if (limit.AfterID != 0) { TValue after = await get(limit.AfterID); - object afterObj = sortKey.Compile()(after); + Expression sortExpression = sortKey.Body.NodeType == ExpressionType.Convert + ? ((UnaryExpression)sortKey.Body).Operand + : sortKey.Body; + Expression key = Expression.Constant(sortKey.Compile()(after), sortExpression.Type); query = query.Where(Expression.Lambda>( - ApiHelper.StringCompatibleExpression(Expression.GreaterThan, sortKey.Body, Expression.Constant(afterObj)), + ApiHelper.StringCompatibleExpression(Expression.GreaterThan, sortExpression, key), sortKey.Parameters.First() )); } diff --git a/Kyoo/Tasks/Crawler.cs b/Kyoo/Tasks/Crawler.cs index bc3b2eeb..387bd3af 100644 --- a/Kyoo/Tasks/Crawler.cs +++ b/Kyoo/Tasks/Crawler.cs @@ -309,7 +309,9 @@ namespace Kyoo.Controllers private async Task> GetTracks(Episode episode) { IEnumerable tracks = await _transcoder.GetTrackInfo(episode.Path); - List epTracks = tracks.Where(x => x.Type != StreamType.Subtitle).Concat(GetExtractedSubtitles(episode)).ToList(); + List epTracks = tracks.Where(x => x.Type != StreamType.Subtitle) + .Concat(GetExtractedSubtitles(episode)) + .ToList(); if (epTracks.Count(x => !x.IsExternal) < tracks.Count()) epTracks.AddRange(await _transcoder.ExtractSubtitles(episode.Path)); episode.Tracks = epTracks; @@ -329,26 +331,58 @@ namespace Kyoo.Controllers foreach (string sub in Directory.EnumerateFiles(path, "", SearchOption.AllDirectories)) { string episodeLink = Path.GetFileNameWithoutExtension(episode.Path); - - if (!sub.Contains(episodeLink!)) + string subName = Path.GetFileName(sub); + + if (episodeLink == null + || subName?.Contains(episodeLink) == false + || subName.Length < episodeLink.Length + 5) continue; - string language = sub.Substring(Path.GetDirectoryName(sub).Length + episodeLink.Length + 2, 3); + string language = subName.Substring(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 }; + Track track = new Track(StreamType.Subtitle, null, language, isDefault, isForced, null, false, sub) + { + EpisodeID = episode.ID, + Codec = Path.GetExtension(sub) switch + { + ".ass" => "ass", + ".srt" => "subrip", + _ => null + } + }; - if (Path.GetExtension(sub) == ".ass") - track.Codec = "ass"; - else if (Path.GetExtension(sub) == ".srt") - track.Codec = "subrip"; - else - track.Codec = null; tracks.Add(track); } return tracks; } - 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" + }; private static bool IsVideo(string filePath) { diff --git a/Kyoo/Views/WebClient b/Kyoo/Views/WebClient index fffb6690..45afdbb4 160000 --- a/Kyoo/Views/WebClient +++ b/Kyoo/Views/WebClient @@ -1 +1 @@ -Subproject commit fffb6690fc5db161767753d1fc554be04eb732d4 +Subproject commit 45afdbb44ed28b5ee408923b6d4d13534e284517