diff --git a/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs b/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs
index 6e22c7dc..6e4720ce 100644
--- a/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs
+++ b/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs
@@ -17,17 +17,17 @@
// along with Kyoo. If not, see .
using System;
+using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using Blurhash.SkiaSharp;
using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models;
+using Kyoo.Abstractions.Models.Exceptions;
using Microsoft.Extensions.Logging;
using SkiaSharp;
-#nullable enable
-
namespace Kyoo.Core.Controllers
{
///
@@ -35,9 +35,8 @@ namespace Kyoo.Core.Controllers
///
public class ThumbnailsManager : IThumbnailsManager
{
- ///
- /// A logger to report errors.
- ///
+ private static readonly Dictionary> _downloading = new();
+
private readonly ILogger _logger;
private readonly IHttpClientFactory _clientFactory;
@@ -106,13 +105,49 @@ namespace Kyoo.Core.Controllers
public async Task DownloadImages(T item)
where T : IThumbnails
{
- if (item == null)
- throw new ArgumentNullException(nameof(item));
-
string name = item is IResource res ? res.Slug : "???";
- await _DownloadImage(item.Poster, _GetBaseImagePath(item, "poster"), $"The poster of {name}");
- await _DownloadImage(item.Thumbnail, _GetBaseImagePath(item, "thumbnail"), $"The poster of {name}");
- await _DownloadImage(item.Logo, _GetBaseImagePath(item, "logo"), $"The poster of {name}");
+
+ string posterPath = $"{_GetBaseImagePath(item, "poster")}.{ImageQuality.High.ToString().ToLowerInvariant()}.webp";
+ bool duplicated = false;
+ TaskCompletionSource