mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-04 22:24:14 -04:00
CodingStyle: Fixing remaining warnings
This commit is contained in:
parent
5ab8e6ee4e
commit
61439695a8
@ -6,119 +6,9 @@ using System.Threading.Tasks;
|
|||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Kyoo.Abstractions.Models;
|
using Kyoo.Abstractions.Models;
|
||||||
using Kyoo.Abstractions.Models.Exceptions;
|
using Kyoo.Abstractions.Models.Exceptions;
|
||||||
using Kyoo.Utils;
|
|
||||||
|
|
||||||
namespace Kyoo.Abstractions.Controllers
|
namespace Kyoo.Abstractions.Controllers
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Information about the pagination. How many items should be displayed and where to start.
|
|
||||||
/// </summary>
|
|
||||||
public readonly struct Pagination
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The count of items to return.
|
|
||||||
/// </summary>
|
|
||||||
public int Count { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Where to start? Using the given sort.
|
|
||||||
/// </summary>
|
|
||||||
public int AfterID { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Create a new <see cref="Pagination"/> instance.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="count">Set the <see cref="Count"/> value</param>
|
|
||||||
/// <param name="afterID">Set the <see cref="AfterID"/> value. If not specified, it will start from the start</param>
|
|
||||||
public Pagination(int count, int afterID = 0)
|
|
||||||
{
|
|
||||||
Count = count;
|
|
||||||
AfterID = afterID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Implicitly create a new pagination from a limit number.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="limit">Set the <see cref="Count"/> value</param>
|
|
||||||
/// <returns>A new <see cref="Pagination"/> instance</returns>
|
|
||||||
public static implicit operator Pagination(int limit) => new(limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Information about how a query should be sorted. What factor should decide the sort and in which order.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="T">For witch type this sort applies</typeparam>
|
|
||||||
public readonly struct Sort<T>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The sort key. This member will be used to sort the results.
|
|
||||||
/// </summary>
|
|
||||||
public Expression<Func<T, object>> Key { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// If this is set to true, items will be sorted in descend order else, they will be sorted in ascendant order.
|
|
||||||
/// </summary>
|
|
||||||
public bool Descendant { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Create a new <see cref="Sort{T}"/> instance.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="key">The sort key given. It is assigned to <see cref="Key"/>.</param>
|
|
||||||
/// <param name="descendant">Should this be in descendant order? The default is false.</param>
|
|
||||||
/// <exception cref="ArgumentException">If the given key is not a member.</exception>
|
|
||||||
public Sort(Expression<Func<T, object>> key, bool descendant = false)
|
|
||||||
{
|
|
||||||
Key = key;
|
|
||||||
Descendant = descendant;
|
|
||||||
|
|
||||||
if (!Utility.IsPropertyExpression(Key))
|
|
||||||
throw new ArgumentException("The given sort key is not valid.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Create a new <see cref="Sort{T}"/> instance from a key's name (case insensitive).
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sortBy">A key name with an optional order specifier. Format: "key:asc", "key:desc" or "key".</param>
|
|
||||||
/// <exception cref="ArgumentException">An invalid key or sort specifier as been given.</exception>
|
|
||||||
public Sort(string sortBy)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(sortBy))
|
|
||||||
{
|
|
||||||
Key = null;
|
|
||||||
Descendant = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string key = sortBy.Contains(':') ? sortBy[..sortBy.IndexOf(':')] : sortBy;
|
|
||||||
string order = sortBy.Contains(':') ? sortBy[(sortBy.IndexOf(':') + 1)..] : null;
|
|
||||||
|
|
||||||
ParameterExpression param = Expression.Parameter(typeof(T), "x");
|
|
||||||
MemberExpression property = Expression.Property(param, key);
|
|
||||||
Key = property.Type.IsValueType
|
|
||||||
? Expression.Lambda<Func<T, object>>(Expression.Convert(property, typeof(object)), param)
|
|
||||||
: Expression.Lambda<Func<T, object>>(property, param);
|
|
||||||
|
|
||||||
Descendant = order switch
|
|
||||||
{
|
|
||||||
"desc" => true,
|
|
||||||
"asc" => false,
|
|
||||||
null => false,
|
|
||||||
_ => throw new ArgumentException($"The sort order, if set, should be :asc or :desc but it was :{order}.")
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A base class for repositories. Every service implementing this will be handled by the <see cref="ILibraryManager"/>.
|
|
||||||
/// </summary>
|
|
||||||
public interface IBaseRepository
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The type for witch this repository is responsible or null if non applicable.
|
|
||||||
/// </summary>
|
|
||||||
Type RepositoryType { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A common repository for every resources.
|
/// A common repository for every resources.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -276,6 +166,17 @@ namespace Kyoo.Abstractions.Controllers
|
|||||||
Task DeleteAll([NotNull] Expression<Func<T, bool>> where);
|
Task DeleteAll([NotNull] Expression<Func<T, bool>> where);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A base class for repositories. Every service implementing this will be handled by the <see cref="ILibraryManager"/>.
|
||||||
|
/// </summary>
|
||||||
|
public interface IBaseRepository
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The type for witch this repository is responsible or null if non applicable.
|
||||||
|
/// </summary>
|
||||||
|
Type RepositoryType { get; }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A repository to handle shows.
|
/// A repository to handle shows.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Kyoo.Abstractions.Models.Attributes
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Remove a property from the deserialization pipeline. The user can't input value for this property.
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
|
||||||
|
public class DeserializeIgnoreAttribute : Attribute { }
|
||||||
|
}
|
@ -1,19 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Kyoo.Abstractions.Models.Attributes
|
namespace Kyoo.Abstractions.Models.Attributes
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Remove an property from the serialization pipeline. It will simply be skipped.
|
|
||||||
/// </summary>
|
|
||||||
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
|
|
||||||
public class SerializeIgnoreAttribute : Attribute { }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Remove a property from the deserialization pipeline. The user can't input value for this property.
|
|
||||||
/// </summary>
|
|
||||||
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
|
|
||||||
public class DeserializeIgnoreAttribute : Attribute { }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Change the way the field is serialized. It allow one to use a string format like formatting instead of the default value.
|
/// Change the way the field is serialized. It allow one to use a string format like formatting instead of the default value.
|
||||||
/// This can be disabled for a request by setting the "internal" query string parameter to true.
|
/// This can be disabled for a request by setting the "internal" query string parameter to true.
|
@ -0,0 +1,10 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Kyoo.Abstractions.Models.Attributes
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Remove an property from the serialization pipeline. It will simply be skipped.
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
|
||||||
|
public class SerializeIgnoreAttribute : Attribute { }
|
||||||
|
}
|
@ -16,7 +16,7 @@ namespace Kyoo.Abstractions.Models
|
|||||||
Show,
|
Show,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The <see cref="LibraryItem"/> is a Movie (a <see cref="Show"/> with <see cref="Show.IsMovie"/> equals to true).
|
/// The <see cref="LibraryItem"/> is a Movie (a <see cref="Show"/> with <see cref="Models.Show.IsMovie"/> equals to true).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Movie,
|
Movie,
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
namespace Kyoo.Abstractions.Models
|
||||||
|
|
||||||
namespace Kyoo.Abstractions.Models
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Metadata of episode currently watching by an user
|
/// Metadata of episode currently watching by an user
|
||||||
|
36
Kyoo.Abstractions/Models/Utils/Pagination.cs
Normal file
36
Kyoo.Abstractions/Models/Utils/Pagination.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
namespace Kyoo.Abstractions.Controllers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Information about the pagination. How many items should be displayed and where to start.
|
||||||
|
/// </summary>
|
||||||
|
public readonly struct Pagination
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The count of items to return.
|
||||||
|
/// </summary>
|
||||||
|
public int Count { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Where to start? Using the given sort.
|
||||||
|
/// </summary>
|
||||||
|
public int AfterID { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a new <see cref="Pagination"/> instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="count">Set the <see cref="Count"/> value</param>
|
||||||
|
/// <param name="afterID">Set the <see cref="AfterID"/> value. If not specified, it will start from the start</param>
|
||||||
|
public Pagination(int count, int afterID = 0)
|
||||||
|
{
|
||||||
|
Count = count;
|
||||||
|
AfterID = afterID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Implicitly create a new pagination from a limit number.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="limit">Set the <see cref="Count"/> value</param>
|
||||||
|
/// <returns>A new <see cref="Pagination"/> instance</returns>
|
||||||
|
public static implicit operator Pagination(int limit) => new(limit);
|
||||||
|
}
|
||||||
|
}
|
70
Kyoo.Abstractions/Models/Utils/Sort.cs
Normal file
70
Kyoo.Abstractions/Models/Utils/Sort.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using Kyoo.Utils;
|
||||||
|
|
||||||
|
namespace Kyoo.Abstractions.Controllers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Information about how a query should be sorted. What factor should decide the sort and in which order.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">For witch type this sort applies</typeparam>
|
||||||
|
public readonly struct Sort<T>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The sort key. This member will be used to sort the results.
|
||||||
|
/// </summary>
|
||||||
|
public Expression<Func<T, object>> Key { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If this is set to true, items will be sorted in descend order else, they will be sorted in ascendant order.
|
||||||
|
/// </summary>
|
||||||
|
public bool Descendant { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a new <see cref="Sort{T}"/> instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key">The sort key given. It is assigned to <see cref="Key"/>.</param>
|
||||||
|
/// <param name="descendant">Should this be in descendant order? The default is false.</param>
|
||||||
|
/// <exception cref="ArgumentException">If the given key is not a member.</exception>
|
||||||
|
public Sort(Expression<Func<T, object>> key, bool descendant = false)
|
||||||
|
{
|
||||||
|
Key = key;
|
||||||
|
Descendant = descendant;
|
||||||
|
|
||||||
|
if (!Utility.IsPropertyExpression(Key))
|
||||||
|
throw new ArgumentException("The given sort key is not valid.");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a new <see cref="Sort{T}"/> instance from a key's name (case insensitive).
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sortBy">A key name with an optional order specifier. Format: "key:asc", "key:desc" or "key".</param>
|
||||||
|
/// <exception cref="ArgumentException">An invalid key or sort specifier as been given.</exception>
|
||||||
|
public Sort(string sortBy)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(sortBy))
|
||||||
|
{
|
||||||
|
Key = null;
|
||||||
|
Descendant = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string key = sortBy.Contains(':') ? sortBy[..sortBy.IndexOf(':')] : sortBy;
|
||||||
|
string order = sortBy.Contains(':') ? sortBy[(sortBy.IndexOf(':') + 1)..] : null;
|
||||||
|
|
||||||
|
ParameterExpression param = Expression.Parameter(typeof(T), "x");
|
||||||
|
MemberExpression property = Expression.Property(param, key);
|
||||||
|
Key = property.Type.IsValueType
|
||||||
|
? Expression.Lambda<Func<T, object>>(Expression.Convert(property, typeof(object)), param)
|
||||||
|
: Expression.Lambda<Func<T, object>>(property, param);
|
||||||
|
|
||||||
|
Descendant = order switch
|
||||||
|
{
|
||||||
|
"desc" => true,
|
||||||
|
"asc" => false,
|
||||||
|
null => false,
|
||||||
|
_ => throw new ArgumentException($"The sort order, if set, should be :asc or :desc but it was :{order}.")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,7 +10,6 @@ using IdentityServer4.Models;
|
|||||||
using IdentityServer4.Services;
|
using IdentityServer4.Services;
|
||||||
using Kyoo.Abstractions;
|
using Kyoo.Abstractions;
|
||||||
using Kyoo.Abstractions.Controllers;
|
using Kyoo.Abstractions.Controllers;
|
||||||
using Kyoo.Abstractions.Models.Permissions;
|
|
||||||
using Kyoo.Authentication.Models;
|
using Kyoo.Authentication.Models;
|
||||||
using Kyoo.Authentication.Views;
|
using Kyoo.Authentication.Views;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
@ -104,6 +104,7 @@ namespace Kyoo.Authentication.Views
|
|||||||
/// Login the user.
|
/// Login the user.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="login">The DTO login request</param>
|
/// <param name="login">The DTO login request</param>
|
||||||
|
/// <returns>TODO</returns>
|
||||||
[HttpPost("login")]
|
[HttpPost("login")]
|
||||||
public async Task<IActionResult> Login([FromBody] LoginRequest login)
|
public async Task<IActionResult> Login([FromBody] LoginRequest login)
|
||||||
{
|
{
|
||||||
@ -122,6 +123,7 @@ namespace Kyoo.Authentication.Views
|
|||||||
/// Use a OTAC to login a user.
|
/// Use a OTAC to login a user.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="otac">The OTAC request</param>
|
/// <param name="otac">The OTAC request</param>
|
||||||
|
/// <returns>TODO</returns>
|
||||||
[HttpPost("otac-login")]
|
[HttpPost("otac-login")]
|
||||||
public async Task<IActionResult> OtacLogin([FromBody] OtacRequest otac)
|
public async Task<IActionResult> OtacLogin([FromBody] OtacRequest otac)
|
||||||
{
|
{
|
||||||
@ -147,6 +149,7 @@ namespace Kyoo.Authentication.Views
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sign out an user
|
/// Sign out an user
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <returns>TODO</returns>
|
||||||
[HttpGet("logout")]
|
[HttpGet("logout")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<IActionResult> Logout()
|
public async Task<IActionResult> Logout()
|
||||||
|
@ -168,7 +168,8 @@ namespace Kyoo.Core.Controllers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="config">The configuration to transform</param>
|
/// <param name="config">The configuration to transform</param>
|
||||||
/// <returns>A strongly typed representation of the configuration.</returns>
|
/// <returns>A strongly typed representation of the configuration.</returns>
|
||||||
[SuppressMessage("ReSharper", "RedundantJumpStatement", Justification = "A catch block should not be empty.")]
|
[SuppressMessage("ReSharper", "RedundantJumpStatement",
|
||||||
|
Justification = "A catch block should not be empty.")]
|
||||||
private ExpandoObject _ToObject(IConfiguration config)
|
private ExpandoObject _ToObject(IConfiguration config)
|
||||||
{
|
{
|
||||||
ExpandoObject obj = new();
|
ExpandoObject obj = new();
|
||||||
|
@ -6,15 +6,12 @@ using Kyoo.Abstractions.Controllers;
|
|||||||
using Kyoo.Abstractions.Models;
|
using Kyoo.Abstractions.Models;
|
||||||
using Kyoo.Core.Models.Options;
|
using Kyoo.Core.Models.Options;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Stream = Kyoo.Core.Models.Watch.Stream;
|
|
||||||
|
|
||||||
// We use threads so tasks are not always awaited.
|
// We use threads so tasks are not always awaited.
|
||||||
#pragma warning disable 4014
|
#pragma warning disable 4014
|
||||||
|
|
||||||
namespace Kyoo.Core.Controllers
|
namespace Kyoo.Core.Controllers
|
||||||
{
|
{
|
||||||
public class BadTranscoderException : Exception { }
|
|
||||||
|
|
||||||
public class Transcoder : ITranscoder
|
public class Transcoder : ITranscoder
|
||||||
{
|
{
|
||||||
private static class TranscoderAPI
|
private static class TranscoderAPI
|
||||||
@ -83,6 +80,8 @@ namespace Kyoo.Core.Controllers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class BadTranscoderException : Exception { }
|
||||||
|
|
||||||
private readonly IFileSystem _files;
|
private readonly IFileSystem _files;
|
||||||
private readonly IOptions<BasicOptions> _options;
|
private readonly IOptions<BasicOptions> _options;
|
||||||
private readonly Lazy<ILibraryManager> _library;
|
private readonly Lazy<ILibraryManager> _library;
|
||||||
|
@ -6,7 +6,6 @@ using Autofac.Core.Registration;
|
|||||||
using Autofac.Extras.AttributeMetadata;
|
using Autofac.Extras.AttributeMetadata;
|
||||||
using Kyoo.Abstractions;
|
using Kyoo.Abstractions;
|
||||||
using Kyoo.Abstractions.Controllers;
|
using Kyoo.Abstractions.Controllers;
|
||||||
using Kyoo.Abstractions.Models.Permissions;
|
|
||||||
using Kyoo.Core.Api;
|
using Kyoo.Core.Api;
|
||||||
using Kyoo.Core.Controllers;
|
using Kyoo.Core.Controllers;
|
||||||
using Kyoo.Core.Models.Options;
|
using Kyoo.Core.Models.Options;
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using Kyoo.Abstractions.Models;
|
using Kyoo.Abstractions.Models;
|
||||||
using Kyoo.Abstractions.Models.Attributes;
|
|
||||||
|
|
||||||
namespace Kyoo.Core.Models.Watch
|
namespace Kyoo.Core.Models.Watch
|
||||||
{
|
{
|
||||||
|
@ -1,14 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using Kyoo.Abstractions.Models;
|
using Kyoo.Abstractions.Models;
|
||||||
using Kyoo.Abstractions.Models.Attributes;
|
using Kyoo.Abstractions.Models.Attributes;
|
||||||
using Kyoo.Utils;
|
using Kyoo.Utils;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using Newtonsoft.Json.Serialization;
|
using Newtonsoft.Json.Serialization;
|
||||||
|
|
||||||
namespace Kyoo.Core.Api
|
namespace Kyoo.Core.Api
|
||||||
|
Loading…
x
Reference in New Issue
Block a user