Lots of Bugfixes (#2960)
Co-authored-by: Samuel Martins <s@smartins.ch> Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
This commit is contained in:
parent
97ffdd0975
commit
b50fa0fd1e
45 changed files with 563 additions and 282 deletions
|
@ -1,8 +1,10 @@
|
|||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using API.Data;
|
||||
using API.DTOs.Reader;
|
||||
|
@ -51,6 +53,8 @@ public class CacheService : ICacheService
|
|||
private readonly IReadingItemService _readingItemService;
|
||||
private readonly IBookmarkService _bookmarkService;
|
||||
|
||||
private static readonly ConcurrentDictionary<int, SemaphoreSlim> ExtractLocks = new();
|
||||
|
||||
public CacheService(ILogger<CacheService> logger, IUnitOfWork unitOfWork,
|
||||
IDirectoryService directoryService, IReadingItemService readingItemService,
|
||||
IBookmarkService bookmarkService)
|
||||
|
@ -166,11 +170,19 @@ public class CacheService : ICacheService
|
|||
var chapter = await _unitOfWork.ChapterRepository.GetChapterAsync(chapterId);
|
||||
var extractPath = GetCachePath(chapterId);
|
||||
|
||||
if (_directoryService.Exists(extractPath)) return chapter;
|
||||
var files = chapter?.Files.ToList();
|
||||
ExtractChapterFiles(extractPath, files, extractPdfToImages);
|
||||
SemaphoreSlim extractLock = ExtractLocks.GetOrAdd(chapterId, id => new SemaphoreSlim(1,1));
|
||||
|
||||
return chapter;
|
||||
await extractLock.WaitAsync();
|
||||
try {
|
||||
if(_directoryService.Exists(extractPath)) return chapter;
|
||||
|
||||
var files = chapter?.Files.ToList();
|
||||
ExtractChapterFiles(extractPath, files, extractPdfToImages);
|
||||
} finally {
|
||||
extractLock.Release();
|
||||
}
|
||||
|
||||
return chapter;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -191,15 +203,25 @@ public class CacheService : ICacheService
|
|||
|
||||
if (files.Count > 0 && files[0].Format == MangaFormat.Image)
|
||||
{
|
||||
foreach (var file in files)
|
||||
// Check if all the files are Images. If so, do a directory copy, else do the normal copy
|
||||
if (files.All(f => f.Format == MangaFormat.Image))
|
||||
{
|
||||
if (fileCount > 1)
|
||||
{
|
||||
extraPath = file.Id + string.Empty;
|
||||
}
|
||||
_readingItemService.Extract(file.FilePath, Path.Join(extractPath, extraPath), MangaFormat.Image, files.Count);
|
||||
_directoryService.ExistOrCreate(extractPath);
|
||||
_directoryService.CopyFilesToDirectory(files.Select(f => f.FilePath), extractPath);
|
||||
}
|
||||
_directoryService.Flatten(extractDi.FullName);
|
||||
else
|
||||
{
|
||||
foreach (var file in files)
|
||||
{
|
||||
if (fileCount > 1)
|
||||
{
|
||||
extraPath = file.Id + string.Empty;
|
||||
}
|
||||
_readingItemService.Extract(file.FilePath, Path.Join(extractPath, extraPath), MangaFormat.Image, files.Count);
|
||||
}
|
||||
_directoryService.Flatten(extractDi.FullName);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
foreach (var file in files)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue