From 8c8740148263efeb00e34468260a1bb02a4ae7b1 Mon Sep 17 00:00:00 2001 From: Sergey Elpashev Date: Wed, 17 Jul 2024 16:38:12 +0300 Subject: [PATCH] feat: manhwa check --- .../components/reader/reader.component.html | 6 +-- .../app/components/reader/reader.component.ts | 37 +++++++------------ .../rulib/lib.social.parser.service.ts | 14 +++++++ .../src/app/services/search.service.ts | 4 ++ 4 files changed, 34 insertions(+), 27 deletions(-) diff --git a/apps/NwaifuAnime/src/app/components/reader/reader.component.html b/apps/NwaifuAnime/src/app/components/reader/reader.component.html index 4226a99..6ba6203 100644 --- a/apps/NwaifuAnime/src/app/components/reader/reader.component.html +++ b/apps/NwaifuAnime/src/app/components/reader/reader.component.html @@ -13,7 +13,7 @@
@if (pages.length > 0 && cachedPages.get(currentPageIndex)) {
- @if (!isManhwa$.value) { + @if (!isManhwa) { } @else { @for (page of manhwaPages; track page.id) { @@ -21,12 +21,12 @@ } }
-
+
-

{{ pages[currentPageIndex].slug }} / {{ pages.length }}

+

{{ pages[currentPageIndex].slug }} / {{ pages.length }}

diff --git a/apps/NwaifuAnime/src/app/components/reader/reader.component.ts b/apps/NwaifuAnime/src/app/components/reader/reader.component.ts index 64eb657..03ea771 100644 --- a/apps/NwaifuAnime/src/app/components/reader/reader.component.ts +++ b/apps/NwaifuAnime/src/app/components/reader/reader.component.ts @@ -1,16 +1,7 @@ import { CommonModule } from "@angular/common"; import { AfterViewInit, Component, OnDestroy } from "@angular/core"; import { ActivatedRoute, Router, RouterLink } from "@angular/router"; -import { - BehaviorSubject, - Observable, - Subject, - Subscription, - fromEvent, - map, - takeUntil, - throttleTime, -} from "rxjs"; +import { Observable, Subject, Subscription, fromEvent, map, takeUntil, throttleTime } from "rxjs"; import { Chapter, Page } from "../../services/parsers/rulib/rulib.chapter.dto"; import { IRulibChapter } from "../../services/parsers/rulib/rulib.chapters.dto"; import { SearchService } from "../../services/search.service"; @@ -34,7 +25,6 @@ export class ReaderComponent implements AfterViewInit, OnDestroy { isManhwa = false; currentChapterInfo: Chapter | null = null; url = ""; - isManhwa$ = new BehaviorSubject(false); private chaptersInfo: IRulibChapter[] = []; private chapterNum: number = 0; private chapterVol: number = 0; @@ -50,7 +40,6 @@ export class ReaderComponent implements AfterViewInit, OnDestroy { ngOnDestroy(): void { this.destroy$.next(); this.destroy$.complete(); - this.isManhwa$.complete(); } get manhwaPages() { @@ -76,15 +65,16 @@ export class ReaderComponent implements AfterViewInit, OnDestroy { .subscribe((data) => { this.chaptersInfo = data.data; }); + this.searchService + .isManhwa(url) + .pipe(takeUntil(this.destroy$)) + .subscribe((data) => { + this.isManhwa = data; + }); } else { this.router.navigate(["/"]); } }); - // this.isManhwa$.pipe(takeUntil(this.destroy$)).subscribe((isManhwa) => { - // this.isManhwa = isManhwa; - // if (isManhwa) this.initManhwaScroll(); - // else this.noManhwaScroll(); - // }); } private handleScrollManhwa(event: Event) { @@ -94,7 +84,7 @@ export class ReaderComponent implements AfterViewInit, OnDestroy { (event.currentTarget as HTMLElement).scrollTop < 3000 ) { - this.loadPage(this.currentPageIndex + 1); + // this.loadPage(this.currentPageIndex + 1); console.log("load"); } } @@ -153,8 +143,8 @@ export class ReaderComponent implements AfterViewInit, OnDestroy { if (index >= 0 && index < this.pages.length) { this.currentPageIndex = index; this.cachePage(index); // Кэшируем текущую и соседние страницы - if (!this.isManhwa$.value) this.unloadCachedPages(index); // Сгружаем ненужные страницы из кэша - if (!this.isManhwa$.value) { + if (!this.isManhwa) this.unloadCachedPages(index); // Сгружаем ненужные страницы из кэша + if (!this.isManhwa) { const container = document.querySelector("app-reader"); if (container) { container.scrollTo({ @@ -174,7 +164,7 @@ export class ReaderComponent implements AfterViewInit, OnDestroy { // Если страница уже в кэше, просто обновляем изображение this.updateImage(); } - } else if (index == this.pages.length && !this.isManhwa$.value) { + } else if (index == this.pages.length && !this.isManhwa) { const thisChapterIndex = this.chaptersInfo.findIndex((chapter) => { return +chapter.number === this.chapterNum && +chapter.volume === this.chapterVol; }); @@ -190,7 +180,7 @@ export class ReaderComponent implements AfterViewInit, OnDestroy { }, }); } - } else if (index == -1 && !this.isManhwa$.value) { + } else if (index == -1 && !this.isManhwa) { const thisChapterIndex = this.chaptersInfo.findIndex((chapter) => { return +chapter.number === this.chapterNum && +chapter.volume === this.chapterVol; }); @@ -271,14 +261,13 @@ export class ReaderComponent implements AfterViewInit, OnDestroy { // Обновляем изображение на странице private updateImage() { const currentPage = this.cachedPages.get(this.currentPageIndex); - if (currentPage && currentPage.imageData && !this.isManhwa$.value) { + if (currentPage && currentPage.imageData && !this.isManhwa) { const blob = new Blob([currentPage.imageData], { type: "image/jpeg" }); const urlCreator = window.URL || window.webkitURL; this.imageUrl = urlCreator.createObjectURL(blob); const imageUrl = this.imageUrl; const image = new Image(); image.onload = () => { - if (currentPage.isManhwa) this.isManhwa$.next(currentPage.isManhwa); URL.revokeObjectURL(imageUrl); }; image.src = imageUrl; diff --git a/apps/NwaifuAnime/src/app/services/parsers/rulib/lib.social.parser.service.ts b/apps/NwaifuAnime/src/app/services/parsers/rulib/lib.social.parser.service.ts index c549a13..2f4076d 100644 --- a/apps/NwaifuAnime/src/app/services/parsers/rulib/lib.social.parser.service.ts +++ b/apps/NwaifuAnime/src/app/services/parsers/rulib/lib.social.parser.service.ts @@ -84,4 +84,18 @@ export class LibSocialParserService extends Parser { catchError((error) => throwError(() => `Now found ${error}`)), ); } + + isManhwa(slug_url: string): Observable { + return this.http + .get( + `${this.url}/api/manga/${slug_url}?fields[]=summary&fields[]=genres&fields[]=tags&fields[]=authors`, + ) + .pipe( + map((data) => { + const res = data as IRulibDetailResult; + return [5, 6, 4].includes(res.data.type.id); + }), + catchError((error) => throwError(() => `Now found ${error}`)), + ); + } } diff --git a/apps/NwaifuAnime/src/app/services/search.service.ts b/apps/NwaifuAnime/src/app/services/search.service.ts index 7f173d3..d52aa08 100644 --- a/apps/NwaifuAnime/src/app/services/search.service.ts +++ b/apps/NwaifuAnime/src/app/services/search.service.ts @@ -59,4 +59,8 @@ export class SearchService { }), ); } + + isManhwa(url: string): Observable { + return this.parser.isManhwa(url); + } }