mirror of
https://github.com/C9Glax/tranga.git
synced 2025-01-12 03:17:33 +01:00
Merge pull request #294 from C9Glax/cuttingedge
Merge cuttingedge into master
This commit is contained in:
commit
113c0abba7
@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Spectre.Console.Cli" Version="0.47.1-preview.0.11" />
|
<PackageReference Include="Spectre.Console.Cli" Version="0.49.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -75,7 +75,11 @@ public readonly struct Chapter : IComparable
|
|||||||
_ => chapterNumberFloat.CompareTo(otherChapterNumberFloat)
|
_ => chapterNumberFloat.CompareTo(otherChapterNumberFloat)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else throw new FormatException($"Value could not be parsed");
|
else throw new FormatException($"Value could not be parsed.\n" +
|
||||||
|
$"\tVolumeNumber: '{volumeNumber}' ChapterNumber: '{chapterNumber}'\n" +
|
||||||
|
$"\tOther-VolumeNumber: '{otherChapter.volumeNumber}' Other-ChapterNumber: '{otherChapter.chapterNumber}'\n" +
|
||||||
|
$"\t{this}\n" +
|
||||||
|
$"\t{otherChapter}");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2,18 +2,20 @@
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using HtmlAgilityPack;
|
using HtmlAgilityPack;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using PuppeteerSharp;
|
using PuppeteerSharp;
|
||||||
|
|
||||||
namespace Tranga.MangaConnectors;
|
namespace Tranga.MangaConnectors;
|
||||||
|
|
||||||
internal class ChromiumDownloadClient : DownloadClient
|
internal class ChromiumDownloadClient : DownloadClient
|
||||||
{
|
{
|
||||||
private static readonly IBrowser Browser = StartBrowser().Result;
|
private static IBrowser? _browser;
|
||||||
private const int StartTimeoutMs = 10000;
|
private const int StartTimeoutMs = 10000;
|
||||||
private readonly HttpDownloadClient _httpDownloadClient;
|
private readonly HttpDownloadClient _httpDownloadClient;
|
||||||
|
|
||||||
private static async Task<IBrowser> StartBrowser()
|
private static async Task<IBrowser> StartBrowser(Logging.Logger? logger = null)
|
||||||
{
|
{
|
||||||
|
logger?.WriteLine("Starting ChromiumDownloadClient Puppeteer");
|
||||||
return await Puppeteer.LaunchAsync(new LaunchOptions
|
return await Puppeteer.LaunchAsync(new LaunchOptions
|
||||||
{
|
{
|
||||||
Headless = true,
|
Headless = true,
|
||||||
@ -23,12 +25,37 @@ internal class ChromiumDownloadClient : DownloadClient
|
|||||||
"--disable-setuid-sandbox",
|
"--disable-setuid-sandbox",
|
||||||
"--no-sandbox"},
|
"--no-sandbox"},
|
||||||
Timeout = StartTimeoutMs
|
Timeout = StartTimeoutMs
|
||||||
});
|
}, new LoggerFactory([new LogProvider(logger)]));
|
||||||
|
}
|
||||||
|
|
||||||
|
private class LogProvider : GlobalBase, ILoggerProvider
|
||||||
|
{
|
||||||
|
public LogProvider(Logging.Logger? logger) : base(logger) { }
|
||||||
|
|
||||||
|
public void Dispose() { }
|
||||||
|
|
||||||
|
public ILogger CreateLogger(string categoryName) => new Logger(logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Logger : GlobalBase, ILogger
|
||||||
|
{
|
||||||
|
public Logger(Logging.Logger? logger) : base(logger) { }
|
||||||
|
|
||||||
|
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
|
||||||
|
{
|
||||||
|
logger?.WriteLine("Puppeteer", formatter.Invoke(state, exception));
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsEnabled(LogLevel logLevel) => true;
|
||||||
|
|
||||||
|
public IDisposable? BeginScope<TState>(TState state) where TState : notnull => null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChromiumDownloadClient(GlobalBase clone) : base(clone)
|
public ChromiumDownloadClient(GlobalBase clone) : base(clone)
|
||||||
{
|
{
|
||||||
_httpDownloadClient = new(this);
|
_httpDownloadClient = new(this);
|
||||||
|
if(_browser is null)
|
||||||
|
_browser = StartBrowser(this.logger).Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly Regex _imageUrlRex = new(@"https?:\/\/.*\.(?:p?jpe?g|gif|a?png|bmp|avif|webp)(\?.*)?");
|
private readonly Regex _imageUrlRex = new(@"https?:\/\/.*\.(?:p?jpe?g|gif|a?png|bmp|avif|webp)(\?.*)?");
|
||||||
@ -41,7 +68,7 @@ internal class ChromiumDownloadClient : DownloadClient
|
|||||||
|
|
||||||
private RequestResult MakeRequestBrowser(string url, string? referrer = null, string? clickButton = null)
|
private RequestResult MakeRequestBrowser(string url, string? referrer = null, string? clickButton = null)
|
||||||
{
|
{
|
||||||
IPage page = Browser.NewPageAsync().Result;
|
IPage page = _browser.NewPageAsync().Result;
|
||||||
page.DefaultTimeout = 10000;
|
page.DefaultTimeout = 10000;
|
||||||
IResponse response;
|
IResponse response;
|
||||||
try
|
try
|
||||||
|
@ -150,7 +150,7 @@ public class Mangaworld: MangaConnector
|
|||||||
"//div[contains(concat(' ',normalize-space(@class),' '),'chapters-wrapper')]");
|
"//div[contains(concat(' ',normalize-space(@class),' '),'chapters-wrapper')]");
|
||||||
|
|
||||||
Regex volumeRex = new(@"[Vv]olume ([0-9]+).*");
|
Regex volumeRex = new(@"[Vv]olume ([0-9]+).*");
|
||||||
Regex chapterRex = new(@"[Cc]apitolo ([0-9]+).*");
|
Regex chapterRex = new(@"[Cc]apitolo ([0-9]+(?:\.[0-9]+)?).*");
|
||||||
Regex idRex = new(@".*\/read\/([a-z0-9]+)(?:[?\/].*)?");
|
Regex idRex = new(@".*\/read\/([a-z0-9]+)(?:[?\/].*)?");
|
||||||
if (chaptersWrapper.Descendants("div").Any(descendant => descendant.HasClass("volume-element")))
|
if (chaptersWrapper.Descendants("div").Any(descendant => descendant.HasClass("volume-element")))
|
||||||
{
|
{
|
||||||
|
@ -10,9 +10,9 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="GlaxArguments" Version="1.1.0" />
|
<PackageReference Include="GlaxArguments" Version="1.1.0" />
|
||||||
<PackageReference Include="HtmlAgilityPack" Version="1.11.46" />
|
<PackageReference Include="HtmlAgilityPack" Version="1.11.71" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="PuppeteerSharp" Version="10.0.0" />
|
<PackageReference Include="PuppeteerSharp" Version="20.0.5" />
|
||||||
<PackageReference Include="Soenneker.Utils.String.NeedlemanWunsch" Version="2.1.301" />
|
<PackageReference Include="Soenneker.Utils.String.NeedlemanWunsch" Version="2.1.301" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user