diff --git a/back/src/Directory.Build.props b/back/src/Directory.Build.props
index c0c382c2..6918ac14 100644
--- a/back/src/Directory.Build.props
+++ b/back/src/Directory.Build.props
@@ -46,7 +46,7 @@
$(MSBuildThisFileDirectory)../Kyoo.ruleset
- 1591
+ 1591;1305
diff --git a/back/src/Kyoo.Abstractions/Models/Resources/Interfaces/IThumbnails.cs b/back/src/Kyoo.Abstractions/Models/Resources/Interfaces/IThumbnails.cs
index 10e1b742..11dfd6c4 100644
--- a/back/src/Kyoo.Abstractions/Models/Resources/Interfaces/IThumbnails.cs
+++ b/back/src/Kyoo.Abstractions/Models/Resources/Interfaces/IThumbnails.cs
@@ -16,7 +16,10 @@
// You should have received a copy of the GNU General Public License
// along with Kyoo. If not, see .
+using System;
+using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
+using System.Globalization;
namespace Kyoo.Abstractions.Models
{
@@ -42,6 +45,7 @@ namespace Kyoo.Abstractions.Models
public Image? Logo { get; set; }
}
+ [TypeConverter(typeof(ImageConvertor))]
public class Image
{
///
@@ -54,6 +58,31 @@ namespace Kyoo.Abstractions.Models
///
[MaxLength(32)]
public string Blurhash { get; set; }
+
+ public Image(string source, string? blurhash = null)
+ {
+ Source = source;
+ Blurhash = blurhash ?? "00000000000000";
+ }
+
+ public class ImageConvertor : TypeConverter
+ {
+ ///
+ public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType)
+ {
+ if (sourceType == typeof(string))
+ return true;
+ return base.CanConvertFrom(context, sourceType);
+ }
+
+ ///
+ public override object ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value)
+ {
+ if (value is not string source)
+ return base.ConvertFrom(context, culture, value)!;
+ return new Image(source);
+ }
+ }
}
///
@@ -64,7 +93,7 @@ namespace Kyoo.Abstractions.Models
///
/// Small
///
- Small,
+ Low,
///
/// Medium
@@ -74,6 +103,6 @@ namespace Kyoo.Abstractions.Models
///
/// Large
///
- Large,
+ High,
}
}
diff --git a/back/src/Kyoo.Abstractions/Models/Utils/Identifier.cs b/back/src/Kyoo.Abstractions/Models/Utils/Identifier.cs
index 2bbcfc5b..ae514d5c 100644
--- a/back/src/Kyoo.Abstractions/Models/Utils/Identifier.cs
+++ b/back/src/Kyoo.Abstractions/Models/Utils/Identifier.cs
@@ -23,7 +23,6 @@ using System.Globalization;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
-using JetBrains.Annotations;
namespace Kyoo.Abstractions.Models.Utils
{
@@ -43,7 +42,7 @@ namespace Kyoo.Abstractions.Models.Utils
///
/// The slug of the resource or null if the id is specified.
///
- private readonly string _slug;
+ private readonly string? _slug;
///
/// Create a new for the given id.
@@ -183,7 +182,7 @@ namespace Kyoo.Abstractions.Models.Utils
{
return _id.HasValue
? _id.Value.ToString()
- : _slug;
+ : _slug!;
}
///
@@ -192,7 +191,7 @@ namespace Kyoo.Abstractions.Models.Utils
public class IdentifierConvertor : TypeConverter
{
///
- public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
+ public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType)
{
if (sourceType == typeof(int) || sourceType == typeof(string))
return true;
@@ -200,12 +199,12 @@ namespace Kyoo.Abstractions.Models.Utils
}
///
- public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
+ public override object ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value)
{
if (value is int id)
return new Identifier(id);
if (value is not string slug)
- return base.ConvertFrom(context, culture, value);
+ return base.ConvertFrom(context, culture, value)!;
return int.TryParse(slug, out id)
? new Identifier(id)
: new Identifier(slug);
diff --git a/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs b/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs
index 652380d2..b566c195 100644
--- a/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs
+++ b/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs
@@ -20,6 +20,7 @@ using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
+using BlurHashSharp.SkiaSharp;
using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models;
using Microsoft.Extensions.Logging;
@@ -76,13 +77,13 @@ namespace Kyoo.Core.Controllers
SKBitmap bitmap = SKBitmap.Decode(reader);
bitmap.Resize(new SKSizeI(bitmap.Width, bitmap.Height), SKFilterQuality.High);
- await _WriteTo(bitmap, $"{localPath}.{ImageQuality.Large.ToString().ToLowerInvariant()}.jpg");
+ await _WriteTo(bitmap, $"{localPath}.{ImageQuality.High.ToString().ToLowerInvariant()}.jpg");
bitmap.Resize(new SKSizeI(bitmap.Width, bitmap.Height), SKFilterQuality.Medium);
await _WriteTo(bitmap, $"{localPath}.{ImageQuality.Medium.ToString().ToLowerInvariant()}.jpg");
bitmap.Resize(new SKSizeI(bitmap.Width, bitmap.Height), SKFilterQuality.Low);
- await _WriteTo(bitmap, $"{localPath}.{ImageQuality.Small.ToString().ToLowerInvariant()}.jpg");
+ await _WriteTo(bitmap, $"{localPath}.{ImageQuality.Low.ToString().ToLowerInvariant()}.jpg");
}
catch (Exception ex)
{
diff --git a/back/src/Kyoo.Core/Kyoo.Core.csproj b/back/src/Kyoo.Core/Kyoo.Core.csproj
index 0839dfe5..332e4b6a 100644
--- a/back/src/Kyoo.Core/Kyoo.Core.csproj
+++ b/back/src/Kyoo.Core/Kyoo.Core.csproj
@@ -11,6 +11,7 @@
+
diff --git a/back/src/Kyoo.Core/Views/Helper/CrudThumbsApi.cs b/back/src/Kyoo.Core/Views/Helper/CrudThumbsApi.cs
index e2c9d6c4..9e6c95f5 100644
--- a/back/src/Kyoo.Core/Views/Helper/CrudThumbsApi.cs
+++ b/back/src/Kyoo.Core/Views/Helper/CrudThumbsApi.cs
@@ -65,7 +65,7 @@ namespace Kyoo.Core.Api
);
if (resource == null)
return NotFound();
- string path = _thumbs.GetImagePath(resource, image, quality ?? ImageQuality.Large);
+ string path = _thumbs.GetImagePath(resource, image, quality ?? ImageQuality.High);
if (path == null || !System.IO.File.Exists(path))
return NotFound();
return PhysicalFile(Path.GetFullPath(path), "image/jpeg", true);
diff --git a/scanner/providers/types/episode.py b/scanner/providers/types/episode.py
index e374e0a7..f46eb488 100644
--- a/scanner/providers/types/episode.py
+++ b/scanner/providers/types/episode.py
@@ -40,9 +40,5 @@ class Episode:
return {
**asdict(self),
**asdict(self.translations[default_language]),
- # "poster": next(iter(self.translations[default_language].posters), None),
- # "thumbnail": next(iter(self.translations[default_language].thumbnails), None),
- # "logo": next(iter(self.translations[default_language].logos), None),
- "thumbnail": None,
"show": None,
}
diff --git a/scanner/providers/types/movie.py b/scanner/providers/types/movie.py
index 1f70b8e3..64bcd9b5 100644
--- a/scanner/providers/types/movie.py
+++ b/scanner/providers/types/movie.py
@@ -50,9 +50,9 @@ class Movie:
return {
**asdict(self),
**asdict(self.translations[default_language]),
- # "poster": next(iter(self.translations[default_language].posters), None),
- # "thumbnail": next(iter(self.translations[default_language].thumbnails), None),
- # "logo": next(iter(self.translations[default_language].logos), None),
+ "poster": next(iter(self.translations[default_language].posters), None),
+ "thumbnail": next(iter(self.translations[default_language].thumbnails), None),
+ "logo": next(iter(self.translations[default_language].logos), None),
"trailer": next(iter(self.translations[default_language].trailers), None),
"studio": next((x.to_kyoo() for x in self.studios), None),
"genres": [x.to_kyoo() for x in self.genres],
diff --git a/scanner/providers/types/season.py b/scanner/providers/types/season.py
index c234364e..0acfa350 100644
--- a/scanner/providers/types/season.py
+++ b/scanner/providers/types/season.py
@@ -30,7 +30,6 @@ class Season:
return {
**asdict(self),
**asdict(self.translations[default_language]),
- # "poster": next(iter(self.translations[default_language].posters), None),
- # "thumbnail": next(iter(self.translations[default_language].thumbnails), None),
- # "logo": next(iter(self.translations[default_language].logos), None),
+ "poster": next(iter(self.translations[default_language].posters), None),
+ "thumbnail": next(iter(self.translations[default_language].thumbnails), None),
}
diff --git a/scanner/providers/types/show.py b/scanner/providers/types/show.py
index 069eff3e..306a77ec 100644
--- a/scanner/providers/types/show.py
+++ b/scanner/providers/types/show.py
@@ -54,9 +54,9 @@ class Show:
**asdict(self.translations[default_language]),
"studio": next((x.to_kyoo() for x in self.studios), None),
"seasons": None,
- # "poster": next(iter(self.translations[default_language].posters), None),
- # "thumbnail": next(iter(self.translations[default_language].thumbnails), None),
- # "logo": next(iter(self.translations[default_language].logos), None),
+ "poster": next(iter(self.translations[default_language].posters), None),
+ "thumbnail": next(iter(self.translations[default_language].thumbnails), None),
+ "logo": next(iter(self.translations[default_language].logos), None),
"trailer": next(iter(self.translations[default_language].trailers), None),
"genres": [x.to_kyoo() for x in self.genres],
}
diff --git a/scanner/providers/types/studio.py b/scanner/providers/types/studio.py
index 756332a3..0ed11f6a 100644
--- a/scanner/providers/types/studio.py
+++ b/scanner/providers/types/studio.py
@@ -12,5 +12,5 @@ class Studio:
def to_kyoo(self):
return {
**asdict(self),
- # "logo": next(iter(self.logos), None),
+ "logo": next(iter(self.logos), None),
}