mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-05-24 00:52:23 -04:00
Feature/performance pdf (#427)
* Added Timeout for Regex matching to ensure malicious filenames don't crash system * Refactored GetCoverImage to use series format rather than library type * Refactored download logs to use the download service * Fixed accent color not looking well on light theme * Refactored series format into dedicated component and added to search results * Switch to using MemoryManager for Streams to attempt to minimize GC pressure and reduced bitmap manipulation for transparency hack. * Refactored PDF extraction to re-use the same MemoryStream for all pages * Debug code for another issue that only users with OpenMediaVault can run
This commit is contained in:
parent
81dfd63250
commit
107b70226c
@ -1,4 +1,5 @@
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using API.Comparators;
|
||||
|
||||
@ -78,6 +79,7 @@ namespace API.Extensions
|
||||
|
||||
foreach (var subDirectory in directory.EnumerateDirectories())
|
||||
{
|
||||
Console.WriteLine($"Flattening {subDirectory}");
|
||||
FlattenDirectory(root, subDirectory, ref directoryIndex);
|
||||
}
|
||||
}
|
||||
|
@ -383,6 +383,7 @@ namespace API.Services
|
||||
|
||||
private void ExtractArchiveEntries(ZipArchive archive, string extractPath)
|
||||
{
|
||||
// TODO: In cases where we try to extract, but there are InvalidPathChars, we need to inform the user
|
||||
var needsFlattening = ArchiveNeedsFlattening(archive);
|
||||
if (!archive.HasFiles() && !needsFlattening) return;
|
||||
|
||||
|
@ -376,9 +376,11 @@ namespace API.Services
|
||||
|
||||
using var docReader = DocLib.Instance.GetDocReader(fileFilePath, new PageDimensions(1080, 1920));
|
||||
var pages = docReader.GetPageCount();
|
||||
using var stream = StreamManager.GetStream("BookService.GetPdfPage");
|
||||
for (var pageNumber = 0; pageNumber < pages; pageNumber++)
|
||||
{
|
||||
using var stream = GetPdfPage(docReader, pageNumber);
|
||||
// IDEA! Move stream out and use the same stream
|
||||
GetPdfPage(docReader, pageNumber, stream);
|
||||
File.WriteAllBytes(Path.Combine(targetDirectory, "Page-" + pageNumber + ".png"), stream.ToArray());
|
||||
}
|
||||
}
|
||||
@ -427,8 +429,8 @@ namespace API.Services
|
||||
using var docReader = DocLib.Instance.GetDocReader(fileFilePath, new PageDimensions(1080, 1920));
|
||||
if (docReader.GetPageCount() == 0) return Array.Empty<byte>();
|
||||
|
||||
using var stream = GetPdfPage(docReader, 0);
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
using var stream = StreamManager.GetStream("BookService.GetPdfPage");
|
||||
GetPdfPage(docReader, 0, stream);
|
||||
|
||||
if (!createThumbnail) return stream.ToArray();
|
||||
|
||||
@ -446,7 +448,7 @@ namespace API.Services
|
||||
return Array.Empty<byte>();
|
||||
}
|
||||
|
||||
private static MemoryStream GetPdfPage(IDocReader docReader, int pageNumber)
|
||||
private static void GetPdfPage(IDocReader docReader, int pageNumber, Stream stream)
|
||||
{
|
||||
using var pageReader = docReader.GetPageReader(pageNumber);
|
||||
var rawBytes = pageReader.GetImage(new NaiveTransparencyRemover());
|
||||
@ -459,10 +461,9 @@ namespace API.Services
|
||||
{
|
||||
bmp.SetPixel(bmp.Width - 1, y, bmp.GetPixel(bmp.Width - 2, y));
|
||||
}
|
||||
|
||||
var stream = StreamManager.GetStream("BookService.GetPdfPage");
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
bmp.Save(stream, ImageFormat.Jpeg);
|
||||
return stream;
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
}
|
||||
|
||||
private static string RemoveWhiteSpaceFromStylesheets(string body)
|
||||
|
@ -7,6 +7,6 @@ export interface SearchResult {
|
||||
name: string;
|
||||
originalName: string;
|
||||
sortName: string;
|
||||
coverImage: string; // byte64 encoded
|
||||
coverImage: string; // byte64 encoded (not used)
|
||||
format: MangaFormat;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user