(null);
-
- const getImageUrl = useCallback(() => {
- if (type === "series") {
- return `/api/komga/images/series/${id}/thumbnail`;
- }
- return `/api/komga/images/books/${id}/thumbnail`;
- }, [type, id]);
-
- // Observer pour détecter quand la cover est dans le viewport
- useEffect(() => {
- const observer = new IntersectionObserver(
- (entries) => {
- entries.forEach((entry) => {
- if (entry.isIntersecting && !imageUrl) {
- setImageUrl(getImageUrl());
- }
- });
- },
- {
- rootMargin: "50px", // Préchargement avant que l'élément soit visible
- }
- );
-
- const element = coverRef.current;
- if (element) {
- observer.observe(element);
- }
-
- return () => {
- if (element) {
- observer.unobserve(element);
- }
- };
- }, [id, imageUrl, getImageUrl]);
-
- if (imageError) {
- return (
-
-
-
- );
- }
+ const imageUrl = getImageUrl(type, id);
return (
-
-
- {imageUrl && (
- setImageError(true)}
- onLoad={() => setIsLoading(false)}
- loading={priority ? "eager" : "lazy"}
- quality={quality}
- priority={priority}
- />
- )}
-
+
);
}
diff --git a/src/lib/services/base-api.service.ts b/src/lib/services/base-api.service.ts
index ae73ff7..b9dae68 100644
--- a/src/lib/services/base-api.service.ts
+++ b/src/lib/services/base-api.service.ts
@@ -73,13 +73,29 @@ export abstract class BaseApiService {
return url.toString();
}
- protected static async fetchFromApi(url: string, headers: Headers): Promise {
+ protected static async fetchFromApi(
+ url: string,
+ headers: Headers,
+ isImage: boolean = false
+ ): Promise {
+ // const startTime = Date.now(); // Capture le temps de début
+
const response = await fetch(url, { headers });
+ // const endTime = Date.now(); // Capture le temps de fin
+ // const responseTime = endTime - startTime; // Calcule le temps de réponse
+
+ // // Log le temps de réponse en ms ou en s
+ // if (responseTime >= 1000) {
+ // console.log(`Temps de réponse pour ${url}: ${(responseTime / 1000).toFixed(2)}s`);
+ // } else {
+ // console.log(`Temps de réponse pour ${url}: ${responseTime}ms`);
+ // }
+
if (!response.ok) {
throw new Error(`Erreur HTTP: ${response.status} ${response.statusText}`);
}
- return response.json();
+ return isImage ? response : response.json();
}
}
diff --git a/src/lib/services/book.service.ts b/src/lib/services/book.service.ts
index 12f7659..05c6532 100644
--- a/src/lib/services/book.service.ts
+++ b/src/lib/services/book.service.ts
@@ -5,6 +5,7 @@ import { PreferencesService } from "./preferences.service";
export class BookService extends BaseApiService {
static async getBook(bookId: string): Promise<{ book: KomgaBook; pages: number[] }> {
+ console.log("dzadaz");
try {
const config = await this.getKomgaConfig();
const headers = this.getAuthHeaders(config);
@@ -13,20 +14,16 @@ export class BookService extends BaseApiService {
`book-${bookId}`,
async () => {
// Récupération des détails du tome
- const bookResponse = await fetch(this.buildUrl(config, `books/${bookId}`), { headers });
- if (!bookResponse.ok) {
- throw new Error("Erreur lors de la récupération des détails du tome");
- }
- const book = await bookResponse.json();
+ const book = await this.fetchFromApi(
+ this.buildUrl(config, `books/${bookId}`),
+ headers
+ );
// Récupération des pages du tome
- const pagesResponse = await fetch(this.buildUrl(config, `books/${bookId}/pages`), {
- headers,
- });
- if (!pagesResponse.ok) {
- throw new Error("Erreur lors de la récupération des pages du tome");
- }
- const pages = await pagesResponse.json();
+ const pages = await this.fetchFromApi<{ number: number }[]>(
+ this.buildUrl(config, `books/${bookId}/pages`),
+ headers
+ );
return {
book,
diff --git a/src/lib/services/image.service.ts b/src/lib/services/image.service.ts
index 7e4b467..40830c5 100644
--- a/src/lib/services/image.service.ts
+++ b/src/lib/services/image.service.ts
@@ -16,12 +16,7 @@ export class ImageService extends BaseApiService {
return this.fetchWithCache(
`image-${path}`,
async () => {
- const response = await fetch(url, { headers });
-
- if (!response.ok) {
- throw new Error(`Erreur HTTP: ${response.status} ${response.statusText}`);
- }
-
+ const response = await this.fetchFromApi(url, headers, true);
const contentType = response.headers.get("content-type");
const arrayBuffer = await response.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
diff --git a/src/lib/services/series.service.ts b/src/lib/services/series.service.ts
index 1c604fc..19c47a3 100644
--- a/src/lib/services/series.service.ts
+++ b/src/lib/services/series.service.ts
@@ -57,12 +57,10 @@ export class SeriesService extends BaseApiService {
return this.fetchWithCache(
`series-first-book-${seriesId}`,
async () => {
- const response = await fetch(`${url}?page=0&size=1`, { headers });
- if (!response.ok) {
- throw new Error(`Erreur HTTP: ${response.status}`);
- }
-
- const data = await response.json();
+ const data = await this.fetchFromApi>(
+ `series/${seriesId}/books?page=0&size=1`,
+ headers
+ );
if (!data.content || data.content.length === 0) {
throw new Error("Aucun livre trouvé dans la série");
}