feat: started manhwa scrolling

This commit is contained in:
2024-07-10 23:33:40 +03:00
parent 03b200c829
commit ccbd9b2f5c
2 changed files with 33 additions and 4 deletions

View File

@@ -1,7 +1,7 @@
import { CommonModule } from "@angular/common"; import { CommonModule } from "@angular/common";
import { AfterViewInit, Component, OnDestroy } from "@angular/core"; import { AfterViewInit, Component, OnDestroy } from "@angular/core";
import { ActivatedRoute, Router, RouterLink } from "@angular/router"; import { ActivatedRoute, Router, RouterLink } from "@angular/router";
import { Observable, Subject, map, takeUntil } from "rxjs"; import { BehaviorSubject, Observable, Subject, map, takeUntil } from "rxjs";
import { Chapter, Page } from "../../services/parsers/rulib/rulib.chapter.dto"; import { Chapter, Page } from "../../services/parsers/rulib/rulib.chapter.dto";
import { IRulibChapter } from "../../services/parsers/rulib/rulib.chapters.dto"; import { IRulibChapter } from "../../services/parsers/rulib/rulib.chapters.dto";
import { SearchService } from "../../services/search.service"; import { SearchService } from "../../services/search.service";
@@ -28,6 +28,7 @@ export class ReaderComponent implements AfterViewInit, OnDestroy {
url = ""; url = "";
private fromTowards = false; private fromTowards = false;
private destroy$ = new Subject<void>(); private destroy$ = new Subject<void>();
private isManhwa$ = new BehaviorSubject<boolean>(false);
constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
@@ -37,6 +38,7 @@ export class ReaderComponent implements AfterViewInit, OnDestroy {
ngOnDestroy(): void { ngOnDestroy(): void {
this.destroy$.next(); this.destroy$.next();
this.destroy$.complete(); this.destroy$.complete();
this.isManhwa$.complete();
} }
ngAfterViewInit(): void { ngAfterViewInit(): void {
@@ -62,6 +64,29 @@ export class ReaderComponent implements AfterViewInit, OnDestroy {
this.router.navigate(["/"]); 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) {
console.log(event);
}
private initManhwaScroll() {
const component = document.querySelector("app-reader");
if (component && this.isManhwa) {
component.addEventListener("scroll", this.handleScrollManhwa.bind(this));
}
}
private noManhwaScroll() {
const component = document.querySelector("app-reader");
if (component && !this.isManhwa) {
component.removeEventListener("scroll", this.handleScrollManhwa.bind(this));
}
} }
backToTitle() { backToTitle() {
@@ -203,7 +228,7 @@ export class ReaderComponent implements AfterViewInit, OnDestroy {
const imageUrl = this.imageUrl; const imageUrl = this.imageUrl;
const image = new Image(); const image = new Image();
image.onload = () => { image.onload = () => {
this.isManhwa = image.naturalHeight / image.naturalWidth >= 5; this.isManhwa$.next(image.naturalHeight / image.naturalWidth >= 5);
URL.revokeObjectURL(imageUrl); URL.revokeObjectURL(imageUrl);
}; };
image.src = imageUrl; image.src = imageUrl;

View File

@@ -1,11 +1,11 @@
import { Injectable } from "@angular/core"; import { Injectable, OnDestroy } from "@angular/core";
import { Subject } from "rxjs"; import { Subject } from "rxjs";
import { INotification } from "./notification.dto"; import { INotification } from "./notification.dto";
@Injectable({ @Injectable({
providedIn: "root", providedIn: "root",
}) })
export class NotificationService { export class NotificationService implements OnDestroy {
readonly notification$ = new Subject<INotification>(); readonly notification$ = new Subject<INotification>();
private sendNotification(message: INotification) { private sendNotification(message: INotification) {
@@ -29,4 +29,8 @@ export class NotificationService {
name: title, name: title,
}); });
} }
ngOnDestroy(): void {
this.notification$.complete();
}
} }