From 5b5cc96317a11360556be4091203a8b4d193ab99 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Wed, 12 Feb 2025 09:34:43 +0100 Subject: [PATCH] feat: ajout du service ImageService pour la gestion des images --- src/lib/services/image.service.ts | 52 +++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/lib/services/image.service.ts diff --git a/src/lib/services/image.service.ts b/src/lib/services/image.service.ts new file mode 100644 index 0000000..6242887 --- /dev/null +++ b/src/lib/services/image.service.ts @@ -0,0 +1,52 @@ +import { BaseApiService } from "./base-api.service"; + +interface ImageResponse { + buffer: Buffer; + contentType: string | null; +} + +export class ImageService extends BaseApiService { + static async getImage(path: string): Promise { + try { + const config = await this.getKomgaConfig(); + const url = this.buildUrl(config, path); + const headers = this.getAuthHeaders(config); + + // Ajout des headers pour accepter les images + headers.set("Accept", "image/jpeg, image/png, image/gif, image/webp, */*"); + + const response = await fetch(url, { headers }); + + if (!response.ok) { + throw new Error(`Erreur HTTP: ${response.status} ${response.statusText}`); + } + + // Récupérer le type MIME de l'image + const contentType = response.headers.get("content-type"); + + // Convertir la réponse en buffer + const arrayBuffer = await response.arrayBuffer(); + const buffer = Buffer.from(arrayBuffer); + + return { + buffer, + contentType, + }; + } catch (error) { + console.error("Erreur lors de la récupération de l'image:", error); + return this.handleError(error, "Impossible de récupérer l'image"); + } + } + + static getSeriesThumbnailUrl(seriesId: string): string { + return `/api/komga/images/series/${seriesId}/thumbnail`; + } + + static getBookThumbnailUrl(bookId: string): string { + return `/api/komga/images/books/${bookId}/thumbnail`; + } + + static getBookPageUrl(bookId: string, pageNumber: number): string { + return `/api/komga/books/${bookId}/pages/${pageNumber}`; + } +}