diff --git a/src/Mangarr.Backend/Endpoints/Manga/Chapters/MangaChaptersEndpoint.cs b/src/Mangarr.Backend/Endpoints/Manga/Chapters/MangaChaptersEndpoint.cs index 67f0c39..e7f4f45 100644 --- a/src/Mangarr.Backend/Endpoints/Manga/Chapters/MangaChaptersEndpoint.cs +++ b/src/Mangarr.Backend/Endpoints/Manga/Chapters/MangaChaptersEndpoint.cs @@ -1,8 +1,8 @@ -using Mangarr.Shared.Models; +using Mangarr.Backend.Sources; +using Mangarr.Shared.Models; using Mangarr.Shared.Requests; using Mangarr.Shared.Responses; using MongoDB.Driver; -using IMapper = AutoMapper.IMapper; using RequestedChapterDocument = Mangarr.Backend.Database.Documents.RequestedChapterDocument; namespace Mangarr.Backend.Endpoints.Manga.Chapters; @@ -10,13 +10,9 @@ namespace Mangarr.Backend.Endpoints.Manga.Chapters; public class MangaChaptersEndpoint : Endpoint { private readonly IMongoCollection _chapterCollection; - private readonly IMapper _mapper; - public MangaChaptersEndpoint(IMongoCollection chapterCollection, IMapper mapper) - { + public MangaChaptersEndpoint(IMongoCollection chapterCollection) => _chapterCollection = chapterCollection; - _mapper = mapper; - } public override void Configure() { @@ -34,9 +30,25 @@ await SendOkAsync(new MangaChaptersResponse { Data = documents .OrderByDescending(x => x.ChapterNumber) - .Select(x => _mapper.Map(x)) + .Select(Map) .ToList() }, ct); } + + private MangaChapterModel Map(RequestedChapterDocument document) + { + SourceBase.DeconstructId(document.ChapterId, out string url, out _); + + return new MangaChapterModel + { + Id = document.Id, + ChapterUrl = url, + ChapterName = document.ChapterName, + ChapterNumber = document.ChapterNumber, + ReleaseDate = document.ReleaseDate, + MarkedForDownload = document.MarkedForDownload, + Downloaded = document.Downloaded + }; + } } diff --git a/src/Mangarr.Backend/Endpoints/Manga/Details/MangaDetailsEndpoint.cs b/src/Mangarr.Backend/Endpoints/Manga/Details/MangaDetailsEndpoint.cs index 1a5c692..3f2c8ec 100644 --- a/src/Mangarr.Backend/Endpoints/Manga/Details/MangaDetailsEndpoint.cs +++ b/src/Mangarr.Backend/Endpoints/Manga/Details/MangaDetailsEndpoint.cs @@ -1,6 +1,7 @@ using Anilist4Net; using FluentResults; using Mangarr.Backend.Services; +using Mangarr.Backend.Sources; using Mangarr.Shared.Models; using Mangarr.Shared.Requests; using Mangarr.Shared.Responses; @@ -69,12 +70,15 @@ public override async Task HandleAsync(MangaDetailsRequest req, CancellationToke return; } + SourceBase.DeconstructId(document.MangaId, out string url, out _); + await SendOkAsync(new MangaDetailsResponse { Data = new MangaDetailsModel { Title = result.Value.Title.English, SourceName = source.Name, + SourceUrl = url, Description = result.Value.DescriptionHtml, CoverImage = result.Value.CoverImage.Large, BannerImage = result.Value.BannerImage diff --git a/src/Mangarr.Backend/Profiles/MandarrProfile.cs b/src/Mangarr.Backend/Profiles/MandarrProfile.cs index 1dc5c66..f95ff44 100644 --- a/src/Mangarr.Backend/Profiles/MandarrProfile.cs +++ b/src/Mangarr.Backend/Profiles/MandarrProfile.cs @@ -15,6 +15,5 @@ public MangarrProfile() CreateMap(); CreateMap(); CreateMap(); - CreateMap(); } } diff --git a/src/Mangarr.Backend/Sources/SourceBase.Utilities.cs b/src/Mangarr.Backend/Sources/SourceBase.Utilities.cs index 4f512ee..6e31739 100644 --- a/src/Mangarr.Backend/Sources/SourceBase.Utilities.cs +++ b/src/Mangarr.Backend/Sources/SourceBase.Utilities.cs @@ -6,9 +6,9 @@ namespace Mangarr.Backend.Sources; internal abstract partial class SourceBase { - protected IDocument CreateDocument(string html) => new HtmlParser().ParseDocument(html); + protected static IDocument CreateDocument(string html) => new HtmlParser().ParseDocument(html); - protected bool TryParseRelativeDate(string input, out DateTime result) + protected static bool TryParseRelativeDate(string input, out DateTime result) { string[] parts = input.Split(' '); @@ -58,7 +58,7 @@ protected bool TryParseRelativeDate(string input, out DateTime result) return true; } - protected string ConstructId(string url, params string[] args) + internal static string ConstructId(string url, params string[] args) { if (args.Length == 0) { @@ -69,7 +69,7 @@ protected string ConstructId(string url, params string[] args) return string.Join("|", segments).ToBase64(); } - protected void DeconstructId(string id, out string url, out string[] args) + internal static void DeconstructId(string id, out string url, out string[] args) { string[] splits = id.FromBase64().Split('|', StringSplitOptions.RemoveEmptyEntries); url = splits[0]; diff --git a/src/Mangarr.Frontend/Pages/Manga/Item/ContentHeader.razor b/src/Mangarr.Frontend/Pages/Manga/Item/ContentHeader.razor index c2617f5..5ffa065 100644 --- a/src/Mangarr.Frontend/Pages/Manga/Item/ContentHeader.razor +++ b/src/Mangarr.Frontend/Pages/Manga/Item/ContentHeader.razor @@ -9,7 +9,7 @@

@Title

- @SourceName + @SourceName

@((MarkupString)Description)

diff --git a/src/Mangarr.Frontend/Pages/Manga/Item/ContentHeader.razor.cs b/src/Mangarr.Frontend/Pages/Manga/Item/ContentHeader.razor.cs index 9fad362..4b64645 100644 --- a/src/Mangarr.Frontend/Pages/Manga/Item/ContentHeader.razor.cs +++ b/src/Mangarr.Frontend/Pages/Manga/Item/ContentHeader.razor.cs @@ -9,6 +9,7 @@ public partial class ContentHeader private string Title => Item!.Title; private string SourceName => Item!.SourceName; + private string SourceUrl => Item!.SourceUrl; private string Description => Item!.Description; private string CoverImage => Item!.CoverImage; private string BannerImage => Item!.BannerImage; diff --git a/src/Mangarr.Frontend/Pages/Manga/Item/ContentList.razor b/src/Mangarr.Frontend/Pages/Manga/Item/ContentList.razor index 8a0b958..a8d7dc7 100644 --- a/src/Mangarr.Frontend/Pages/Manga/Item/ContentList.razor +++ b/src/Mangarr.Frontend/Pages/Manga/Item/ContentList.razor @@ -16,6 +16,7 @@ else # Chapter + Released Status diff --git a/src/Mangarr.Frontend/Pages/Manga/Item/ContentListItem.razor b/src/Mangarr.Frontend/Pages/Manga/Item/ContentListItem.razor index 491b9f2..4f1741f 100644 --- a/src/Mangarr.Frontend/Pages/Manga/Item/ContentListItem.razor +++ b/src/Mangarr.Frontend/Pages/Manga/Item/ContentListItem.razor @@ -14,7 +14,10 @@ } @Index - @ChapterName + + @ChapterName + + @ReleaseDate.ToShortDateString() @if (Downloaded) { diff --git a/src/Mangarr.Frontend/Pages/Manga/Item/ContentListItem.razor.cs b/src/Mangarr.Frontend/Pages/Manga/Item/ContentListItem.razor.cs index 502389f..e4e5248 100644 --- a/src/Mangarr.Frontend/Pages/Manga/Item/ContentListItem.razor.cs +++ b/src/Mangarr.Frontend/Pages/Manga/Item/ContentListItem.razor.cs @@ -8,8 +8,10 @@ public partial class ContentListItem [Parameter] public MangaChapterModel? Item { get; set; } [Parameter] public int Index { get; set; } + private string ChapterUrl => Item!.ChapterUrl; private string ChapterName => Item!.ChapterName; private double ChapterNumber => Item!.ChapterNumber; + private DateTime ReleaseDate => Item!.ReleaseDate; private bool MarkedForDownload => Item!.MarkedForDownload; private bool Downloaded => Item!.Downloaded; } diff --git a/src/Mangarr.Shared/Models/MangaChapterModel.cs b/src/Mangarr.Shared/Models/MangaChapterModel.cs index fe26590..d9022f9 100644 --- a/src/Mangarr.Shared/Models/MangaChapterModel.cs +++ b/src/Mangarr.Shared/Models/MangaChapterModel.cs @@ -3,6 +3,7 @@ public class MangaChapterModel { public string Id { get; set; } = null!; + public string ChapterUrl { get; set; } = null!; public string ChapterName { get; set; } = null!; public double ChapterNumber { get; set; } public DateTime ReleaseDate { get; set; } diff --git a/src/Mangarr.Shared/Models/MangaDetailsModel.cs b/src/Mangarr.Shared/Models/MangaDetailsModel.cs index 862b51a..1e2f188 100644 --- a/src/Mangarr.Shared/Models/MangaDetailsModel.cs +++ b/src/Mangarr.Shared/Models/MangaDetailsModel.cs @@ -4,6 +4,7 @@ public class MangaDetailsModel { public required string Title { get; set; } public required string SourceName { get; set; } + public required string SourceUrl { get; set; } public required string Description { get; set; } public required string CoverImage { get; set; } public required string BannerImage { get; set; }