Added common language enum. Fixed "romaji" spelling. More UI updates.
This commit is contained in:
@@ -2,7 +2,8 @@
|
||||
|
||||
public enum Language
|
||||
{
|
||||
Unknown,
|
||||
Japanese,
|
||||
Romanji,
|
||||
Romaji,
|
||||
English
|
||||
}
|
||||
@@ -31,7 +31,7 @@ public static class ServiceCollectionExtensions
|
||||
services.AddScoped<IMangaSearchProvider, MangaDexSearchProvider>();
|
||||
services.AddScoped<IMangaSearchCoordinator, MangaSearchCoordinator>();
|
||||
|
||||
//services.AddScoped<IMangaMetadataProvider, NatoMangaWebCrawler>();
|
||||
///services.AddScoped<IMangaMetadataProvider, NatoMangaWebCrawler>();
|
||||
services.AddScoped<IMangaMetadataProvider, MangaDexMetadataProvider>();
|
||||
|
||||
return services;
|
||||
|
||||
@@ -1,16 +1,25 @@
|
||||
namespace MangaReader.Core.HttpService;
|
||||
|
||||
public class HttpService : IHttpService
|
||||
public class HttpService(HttpClient httpClient) : IHttpService
|
||||
{
|
||||
private readonly HttpClient _httpClient;
|
||||
public Task<string> GetStringAsync(string url, CancellationToken cancellationToken)
|
||||
=> GetStringAsync(url, new Dictionary<string, string>(), cancellationToken);
|
||||
|
||||
public HttpService(HttpClient httpClient)
|
||||
public async Task<string> GetStringAsync(string url, IDictionary<string, string> headers, CancellationToken cancellationToken)
|
||||
{
|
||||
using HttpRequestMessage request = new(HttpMethod.Get, url);
|
||||
|
||||
foreach (KeyValuePair<string, string> header in headers)
|
||||
{
|
||||
request.Headers.TryAddWithoutValidation(header.Key, header.Value);
|
||||
}
|
||||
|
||||
//httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("MangaReader/1.0");
|
||||
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0");
|
||||
|
||||
_httpClient = httpClient;
|
||||
}
|
||||
using HttpResponseMessage response = await httpClient.SendAsync(request, cancellationToken);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
public Task<string> GetStringAsync(string url, CancellationToken cancellationToken)
|
||||
=> _httpClient.GetStringAsync(url, cancellationToken);
|
||||
return await response.Content.ReadAsStringAsync(cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -3,4 +3,5 @@
|
||||
public interface IHttpService
|
||||
{
|
||||
Task<string> GetStringAsync(string url, CancellationToken cancellationToken);
|
||||
Task<string> GetStringAsync(string url, IDictionary<string, string> headers, CancellationToken cancellationToken);
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
namespace MangaReader.Core.Metadata;
|
||||
|
||||
public enum SourceMangaLanguage
|
||||
{
|
||||
Unknown,
|
||||
Japanese,
|
||||
Romanji,
|
||||
English
|
||||
}
|
||||
//public enum SourceMangaLanguage
|
||||
//{
|
||||
// Unknown,
|
||||
// Japanese,
|
||||
// Romanji,
|
||||
// English
|
||||
//}
|
||||
@@ -1,7 +1,9 @@
|
||||
namespace MangaReader.Core.Metadata;
|
||||
using MangaReader.Core.Common;
|
||||
|
||||
namespace MangaReader.Core.Metadata;
|
||||
|
||||
public class SourceMangaTitle
|
||||
{
|
||||
public required string Title { get; set; }
|
||||
public SourceMangaLanguage Language { get; set; }
|
||||
public Language Language { get; set; }
|
||||
}
|
||||
@@ -10,11 +10,14 @@ public partial class MangaPipeline(MangaContext context) : IMangaPipeline
|
||||
public async Task RunAsync(MangaPipelineRequest request)
|
||||
{
|
||||
string sourceName = request.SourceName;
|
||||
string sourceUrl = request.SourceUrl;
|
||||
SourceManga sourceManga = request.SourceManga;
|
||||
|
||||
Source source = await GetOrAddSourceAsync(sourceName);
|
||||
Manga manga = await GetOrAddMangaAsync(sourceManga);
|
||||
|
||||
await AddMangaSourceAsync(sourceUrl, manga, source);
|
||||
|
||||
foreach (SourceMangaTitle alternateTitle in sourceManga.AlternateTitles)
|
||||
{
|
||||
await AddTitleAsync(manga, alternateTitle);
|
||||
@@ -83,6 +86,24 @@ public partial class MangaPipeline(MangaContext context) : IMangaPipeline
|
||||
[GeneratedRegex(@"\s+")]
|
||||
private static partial Regex RemoveSpacesWithDashRegex();
|
||||
|
||||
private async Task AddMangaSourceAsync(string sourceUrl, Manga manga, Source source)
|
||||
{
|
||||
MangaSource? mangaSource = await context.MangaSources.FirstOrDefaultAsync(ms =>
|
||||
ms.Manga == manga && ms.Source == source && ms.Url == sourceUrl);
|
||||
|
||||
if (mangaSource != null)
|
||||
return;
|
||||
|
||||
mangaSource = new()
|
||||
{
|
||||
Manga = manga,
|
||||
Source = source,
|
||||
Url = sourceUrl
|
||||
};
|
||||
|
||||
context.MangaSources.Add(mangaSource);
|
||||
}
|
||||
|
||||
private async Task AddTitleAsync(Manga manga, SourceMangaTitle sourceMangaTitle)
|
||||
{
|
||||
MangaTitle? mangaTitle = await context.MangaTitles.FirstOrDefaultAsync(mt =>
|
||||
|
||||
@@ -5,5 +5,6 @@ namespace MangaReader.Core.Pipeline;
|
||||
public class MangaPipelineRequest
|
||||
{
|
||||
public required string SourceName { get; init; }
|
||||
public required string SourceUrl { get; init; }
|
||||
public required SourceManga SourceManga { get; init; }
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using MangaReader.Core.Metadata;
|
||||
using MangaReader.Core.Common;
|
||||
using MangaReader.Core.Metadata;
|
||||
using MangaReader.Core.Sources.MangaDex.Api;
|
||||
|
||||
namespace MangaReader.Core.Sources.MangaDex.Metadata;
|
||||
@@ -62,11 +63,11 @@ public class MangaDexMetadataProvider(IMangaDexClient mangaDexClient) : IMangaMe
|
||||
if (attributes.AltTitles == null || attributes.AltTitles.Count == 0)
|
||||
return [];
|
||||
|
||||
Dictionary<string, SourceMangaLanguage> languageIdMap = new()
|
||||
Dictionary<string, Language> languageIdMap = new()
|
||||
{
|
||||
{ "en", SourceMangaLanguage.English },
|
||||
{ "ja", SourceMangaLanguage.Japanese },
|
||||
{ "ja-ro", SourceMangaLanguage.Romanji },
|
||||
{ "en", Language.English },
|
||||
{ "ja", Language.Japanese },
|
||||
{ "ja-ro", Language.Romaji },
|
||||
};
|
||||
|
||||
List<SourceMangaTitle> sourceMangaTitles = [];
|
||||
@@ -75,7 +76,7 @@ public class MangaDexMetadataProvider(IMangaDexClient mangaDexClient) : IMangaMe
|
||||
{
|
||||
foreach (string alternateTitleKey in alternateTitle.Keys)
|
||||
{
|
||||
if (languageIdMap.TryGetValue(alternateTitleKey, out SourceMangaLanguage language) == false)
|
||||
if (languageIdMap.TryGetValue(alternateTitleKey, out Language language) == false)
|
||||
continue;
|
||||
|
||||
SourceMangaTitle sourceMangaTitle = new()
|
||||
|
||||
@@ -45,7 +45,7 @@ public partial class MangaDexSearchProvider(IMangaDexClient mangaDexClient) : IM
|
||||
|
||||
if (thing.Count > 0)
|
||||
{
|
||||
Guid[] mangaGuids = thing.Select(x => x.Key).ToArray();
|
||||
Guid[] mangaGuids = [.. thing.Select(x => x.Key)];
|
||||
var reults = await GetCoverArtFileNamesAsync(mangaGuids, cancellationToken);
|
||||
//var reults = await mangaDexClient.GetCoverArtAsync(mangaGuids, cancellationToken);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using HtmlAgilityPack;
|
||||
using MangaReader.Core.Common;
|
||||
using MangaReader.Core.Metadata;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
@@ -46,7 +47,7 @@ public class MangaNatoWebCrawler : MangaWebCrawler
|
||||
SourceMangaTitle sourceMangaTitle = new()
|
||||
{
|
||||
Title = title,
|
||||
Language = SourceMangaLanguage.Unknown
|
||||
Language = Language.Unknown
|
||||
};
|
||||
|
||||
sourceMangaTitles.Add(sourceMangaTitle);
|
||||
|
||||
@@ -23,12 +23,15 @@ public partial class NatoMangaClient(IHttpService httpService) : INatoMangaClien
|
||||
{
|
||||
string url = GetSearchUrl(searchWord);
|
||||
|
||||
string response = await httpService.GetStringAsync(url, cancellationToken);
|
||||
Dictionary<string,string> requestHeader = [];
|
||||
requestHeader.Add("Referer", "https://www.natomanga.com/");
|
||||
|
||||
string response = await httpService.GetStringAsync(url, requestHeader, cancellationToken);
|
||||
|
||||
return JsonSerializer.Deserialize<NatoMangaSearchResult[]>(response, _jsonSerializerOptions) ?? [];
|
||||
}
|
||||
|
||||
protected string GetSearchUrl(string searchWord)
|
||||
protected static string GetSearchUrl(string searchWord)
|
||||
{
|
||||
string formattedSeachWord = GetFormattedSearchWord(searchWord);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user