mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Fixing sort limit with native types (non boxed ones)
This commit is contained in:
parent
24355bac84
commit
d77cae6d2b
@ -68,7 +68,7 @@ namespace Kyoo.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
public interface IRepository<T> : IDisposable, IAsyncDisposable where T : IRessource
|
||||
public interface IRepository<T> : IDisposable, IAsyncDisposable where T : IResource
|
||||
{
|
||||
Task<T> Get(int id);
|
||||
Task<T> Get(string slug);
|
||||
|
@ -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; }
|
@ -3,7 +3,7 @@ using System.Linq;
|
||||
|
||||
namespace Kyoo.Models
|
||||
{
|
||||
public class Page<T> where T : IRessource
|
||||
public class Page<T> where T : IResource
|
||||
{
|
||||
public string This { get; set; }
|
||||
public string First { get; set; }
|
||||
|
@ -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; }
|
||||
|
@ -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; }
|
@ -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; }
|
@ -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; }
|
@ -1,6 +1,6 @@
|
||||
namespace Kyoo.Models
|
||||
{
|
||||
public interface IRessource
|
||||
public interface IResource
|
||||
{
|
||||
public int ID { get; set; }
|
||||
public string Slug { get; }
|
@ -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; }
|
@ -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; }
|
@ -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; }
|
@ -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; }
|
@ -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; }
|
||||
|
@ -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; }
|
@ -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; }
|
@ -12,7 +12,7 @@ using Microsoft.Extensions.Configuration;
|
||||
namespace Kyoo.CommonApi
|
||||
{
|
||||
[ApiController]
|
||||
public class CrudApi<T> : ControllerBase where T : IRessource
|
||||
public class CrudApi<T> : ControllerBase where T : IResource
|
||||
{
|
||||
private readonly IRepository<T> _repository;
|
||||
private readonly string _baseURL;
|
||||
@ -73,7 +73,7 @@ namespace Kyoo.CommonApi
|
||||
}
|
||||
|
||||
protected Page<TResult> Page<TResult>(ICollection<TResult> ressources, int limit)
|
||||
where TResult : IRessource
|
||||
where TResult : IResource
|
||||
{
|
||||
return new Page<TResult>(ressources,
|
||||
_baseURL + Request.Path,
|
||||
|
@ -11,7 +11,7 @@ using Npgsql;
|
||||
|
||||
namespace Kyoo.Controllers
|
||||
{
|
||||
public abstract class LocalRepository<T> : IRepository<T> where T : class, IRessource
|
||||
public abstract class LocalRepository<T> : IRepository<T> 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<Func<TValue, bool>>(
|
||||
ApiHelper.StringCompatibleExpression(Expression.GreaterThan, sortKey.Body, Expression.Constant(afterObj)),
|
||||
ApiHelper.StringCompatibleExpression(Expression.GreaterThan, sortExpression, key),
|
||||
sortKey.Parameters.First()
|
||||
));
|
||||
}
|
||||
|
@ -309,7 +309,9 @@ namespace Kyoo.Controllers
|
||||
private async Task<IEnumerable<Track>> GetTracks(Episode episode)
|
||||
{
|
||||
IEnumerable<Track> tracks = await _transcoder.GetTrackInfo(episode.Path);
|
||||
List<Track> epTracks = tracks.Where(x => x.Type != StreamType.Subtitle).Concat(GetExtractedSubtitles(episode)).ToList();
|
||||
List<Track> 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);
|
||||
string subName = Path.GetFileName(sub);
|
||||
|
||||
if (!sub.Contains(episodeLink!))
|
||||
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)
|
||||
{
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit fffb6690fc5db161767753d1fc554be04eb732d4
|
||||
Subproject commit 45afdbb44ed28b5ee408923b6d4d13534e284517
|
Loading…
x
Reference in New Issue
Block a user