mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-07-07 10:14:12 -04:00
Additional Memory Pressure Enhancements (#590)
* Added volume migrations. Added parser case for "Chapter 63 - The Promise Made for 520 Cenz.cbr" * Added some info statements for when full library scans occur. For image apis, return the name of the file to aid in caching. * When managing users, show the current logged in user at the top of the list. Added a message when no libraries have been setup but you are trying to add a user to a library. * Removed an extra stream operation from SharpCompress cover image work. Removed an extra ToArray() from Book Reader for extracting PDF pages. * Removed the left over comment * Added parsing case for "Batman Beyond 04 (of 6) (1999)" * Removed dead code
This commit is contained in:
parent
587ac4ef46
commit
c44ef6b04d
@ -28,6 +28,7 @@ namespace API.Tests.Parser
|
|||||||
[InlineData("Invincible 033.5 - Marvel Team-Up 14 (2006) (digital) (Minutemen-Slayer)", "Invincible")]
|
[InlineData("Invincible 033.5 - Marvel Team-Up 14 (2006) (digital) (Minutemen-Slayer)", "Invincible")]
|
||||||
[InlineData("Batman Wayne Family Adventures - Ep. 001 - Moving In", "Batman Wayne Family Adventures")]
|
[InlineData("Batman Wayne Family Adventures - Ep. 001 - Moving In", "Batman Wayne Family Adventures")]
|
||||||
[InlineData("Saga 001 (2012) (Digital) (Empire-Zone).cbr", "Saga")]
|
[InlineData("Saga 001 (2012) (Digital) (Empire-Zone).cbr", "Saga")]
|
||||||
|
[InlineData("Batman Beyond 04 (of 6) (1999)", "Batman Beyond")]
|
||||||
public void ParseComicSeriesTest(string filename, string expected)
|
public void ParseComicSeriesTest(string filename, string expected)
|
||||||
{
|
{
|
||||||
Assert.Equal(expected, API.Parser.Parser.ParseComicSeries(filename));
|
Assert.Equal(expected, API.Parser.Parser.ParseComicSeries(filename));
|
||||||
@ -76,6 +77,7 @@ namespace API.Tests.Parser
|
|||||||
[InlineData("Invincible 033.5 - Marvel Team-Up 14 (2006) (digital) (Minutemen-Slayer)", "33.5")]
|
[InlineData("Invincible 033.5 - Marvel Team-Up 14 (2006) (digital) (Minutemen-Slayer)", "33.5")]
|
||||||
[InlineData("Batman Wayne Family Adventures - Ep. 014 - Moving In", "14")]
|
[InlineData("Batman Wayne Family Adventures - Ep. 014 - Moving In", "14")]
|
||||||
[InlineData("Saga 001 (2012) (Digital) (Empire-Zone)", "1")]
|
[InlineData("Saga 001 (2012) (Digital) (Empire-Zone)", "1")]
|
||||||
|
[InlineData("Batman Beyond 04 (of 6) (1999)", "4")]
|
||||||
public void ParseComicChapterTest(string filename, string expected)
|
public void ParseComicChapterTest(string filename, string expected)
|
||||||
{
|
{
|
||||||
Assert.Equal(expected, API.Parser.Parser.ParseComicChapter(filename));
|
Assert.Equal(expected, API.Parser.Parser.ParseComicChapter(filename));
|
||||||
|
@ -376,6 +376,11 @@ namespace API.Parser
|
|||||||
@"(?<Series>.*(\d{4})?)( |_)(?:\((?<Chapter>\d+) of \d+)",
|
@"(?<Series>.*(\d{4})?)( |_)(?:\((?<Chapter>\d+) of \d+)",
|
||||||
RegexOptions.IgnoreCase | RegexOptions.Compiled,
|
RegexOptions.IgnoreCase | RegexOptions.Compiled,
|
||||||
RegexTimeout),
|
RegexTimeout),
|
||||||
|
// Batman Beyond 04 (of 6) (1999)
|
||||||
|
new Regex(
|
||||||
|
@"(?<Series>.+?)(?<Chapter>\d+)(\s|_|-)?\(of",
|
||||||
|
RegexOptions.IgnoreCase | RegexOptions.Compiled,
|
||||||
|
RegexTimeout),
|
||||||
// Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus)
|
// Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus)
|
||||||
new Regex(
|
new Regex(
|
||||||
@"^(?<Series>.*)(?: |_)v(?<Volume>\d+)(?: |_)(c? ?)(?<Chapter>(\d+(\.\d)?)-?(\d+(\.\d)?)?)(c? ?)",
|
@"^(?<Series>.*)(?: |_)v(?<Volume>\d+)(?: |_)(c? ?)(?<Chapter>(\d+(\.\d)?)-?(\d+(\.\d)?)?)(c? ?)",
|
||||||
|
@ -28,7 +28,6 @@ namespace API.Services
|
|||||||
{
|
{
|
||||||
private readonly ILogger<ArchiveService> _logger;
|
private readonly ILogger<ArchiveService> _logger;
|
||||||
private readonly IDirectoryService _directoryService;
|
private readonly IDirectoryService _directoryService;
|
||||||
private static readonly RecyclableMemoryStreamManager StreamManager = new();
|
|
||||||
private readonly NaturalSortComparer _comparer;
|
private readonly NaturalSortComparer _comparer;
|
||||||
private const string ComicInfoFilename = "comicinfo";
|
private const string ComicInfoFilename = "comicinfo";
|
||||||
|
|
||||||
@ -169,7 +168,7 @@ namespace API.Services
|
|||||||
var entry = archive.Entries.Single(e => e.FullName == entryName);
|
var entry = archive.Entries.Single(e => e.FullName == entryName);
|
||||||
using var stream = entry.Open();
|
using var stream = entry.Open();
|
||||||
|
|
||||||
return CreateThumbnail(entry.FullName, stream, fileName);
|
return CreateThumbnail(archivePath + " - " + entry.FullName, stream, fileName);
|
||||||
}
|
}
|
||||||
case ArchiveLibrary.SharpCompress:
|
case ArchiveLibrary.SharpCompress:
|
||||||
{
|
{
|
||||||
@ -180,18 +179,16 @@ namespace API.Services
|
|||||||
var entryName = FindFolderEntry(entryNames) ?? FirstFileEntry(entryNames);
|
var entryName = FindFolderEntry(entryNames) ?? FirstFileEntry(entryNames);
|
||||||
var entry = archive.Entries.Single(e => e.Key == entryName);
|
var entry = archive.Entries.Single(e => e.Key == entryName);
|
||||||
|
|
||||||
using var ms = StreamManager.GetStream();
|
using var stream = entry.OpenEntryStream();
|
||||||
entry.WriteTo(ms);
|
|
||||||
ms.Position = 0;
|
|
||||||
|
|
||||||
return CreateThumbnail(entry.Key, ms, fileName); // Path.GetExtension(entry.Key)
|
return CreateThumbnail(archivePath + " - " + entry.Key, stream, fileName);
|
||||||
}
|
}
|
||||||
case ArchiveLibrary.NotSupported:
|
case ArchiveLibrary.NotSupported:
|
||||||
_logger.LogWarning("[GetCoverImage] This archive cannot be read: {ArchivePath}. Defaulting to no cover image", archivePath);
|
_logger.LogWarning("[GetCoverImage] This archive cannot be read: {ArchivePath}. Defaulting to no cover image", archivePath);
|
||||||
return String.Empty;
|
return string.Empty;
|
||||||
default:
|
default:
|
||||||
_logger.LogWarning("[GetCoverImage] There was an exception when reading archive stream: {ArchivePath}. Defaulting to no cover image", archivePath);
|
_logger.LogWarning("[GetCoverImage] There was an exception when reading archive stream: {ArchivePath}. Defaulting to no cover image", archivePath);
|
||||||
return String.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -199,7 +196,7 @@ namespace API.Services
|
|||||||
_logger.LogWarning(ex, "[GetCoverImage] There was an exception when reading archive stream: {ArchivePath}. Defaulting to no cover image", archivePath);
|
_logger.LogWarning(ex, "[GetCoverImage] There was an exception when reading archive stream: {ArchivePath}. Defaulting to no cover image", archivePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
return String.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -292,9 +289,7 @@ namespace API.Services
|
|||||||
&& !Parser.Parser.HasBlacklistedFolderInPath(entry.Key)
|
&& !Parser.Parser.HasBlacklistedFolderInPath(entry.Key)
|
||||||
&& Parser.Parser.IsXml(entry.Key))
|
&& Parser.Parser.IsXml(entry.Key))
|
||||||
{
|
{
|
||||||
using var ms = StreamManager.GetStream();
|
using var ms = entry.OpenEntryStream();
|
||||||
entry.WriteTo(ms);
|
|
||||||
ms.Position = 0;
|
|
||||||
|
|
||||||
var serializer = new XmlSerializer(typeof(ComicInfo));
|
var serializer = new XmlSerializer(typeof(ComicInfo));
|
||||||
var info = (ComicInfo) serializer.Deserialize(ms);
|
var info = (ComicInfo) serializer.Deserialize(ms);
|
||||||
|
@ -4,6 +4,7 @@ using System.Drawing;
|
|||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
@ -378,7 +379,9 @@ namespace API.Services
|
|||||||
for (var pageNumber = 0; pageNumber < pages; pageNumber++)
|
for (var pageNumber = 0; pageNumber < pages; pageNumber++)
|
||||||
{
|
{
|
||||||
GetPdfPage(docReader, pageNumber, stream);
|
GetPdfPage(docReader, pageNumber, stream);
|
||||||
File.WriteAllBytes(Path.Combine(targetDirectory, "Page-" + pageNumber + ".png"), stream.ToArray());
|
using var fileStream = File.Create(Path.Combine(targetDirectory, "Page-" + pageNumber + ".png"));
|
||||||
|
stream.Seek(0, SeekOrigin.Begin);
|
||||||
|
stream.CopyTo(fileStream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user