refactor: réorganisation des routes d'images et optimisation du chargement des miniatures

This commit is contained in:
Julien Froidefond
2025-02-12 17:31:03 +01:00
parent 2a85abcb6d
commit b4d590e7e7
9 changed files with 475 additions and 164 deletions

View File

@@ -1,5 +1,6 @@
import { BaseApiService } from "./base-api.service";
import { KomgaBook } from "@/types/komga";
import { ImageService } from "./image.service";
export class BookService extends BaseApiService {
static async getBook(bookId: string): Promise<{ book: KomgaBook; pages: number[] }> {
@@ -63,11 +64,49 @@ export class BookService extends BaseApiService {
}
}
static async getPage(bookId: string, pageNumber: number): Promise<Response> {
try {
// Ajuster le numéro de page pour l'API Komga (zero-based)
const adjustedPageNumber = pageNumber - 1;
const response = await ImageService.getImage(
`books/${bookId}/pages/${adjustedPageNumber}?zero_based=true`
);
return new Response(response.buffer, {
headers: {
"Content-Type": response.contentType || "image/jpeg",
},
});
} catch (error) {
throw this.handleError(error, "Impossible de récupérer la page");
}
}
static async getPageThumbnail(bookId: string, pageNumber: number): Promise<Response> {
try {
// Ajuster le numéro de page pour l'API Komga (zero-based)
const adjustedPageNumber = pageNumber - 1;
const response = await ImageService.getImage(
`books/${bookId}/pages/${adjustedPageNumber}/thumbnail?zero_based=true`
);
return new Response(response.buffer, {
headers: {
"Content-Type": response.contentType || "image/jpeg",
},
});
} catch (error) {
throw this.handleError(error, "Impossible de récupérer la miniature");
}
}
static getPageUrl(bookId: string, pageNumber: number): string {
return `/api/komga/books/${bookId}/pages/${pageNumber}`;
return `/api/komga/images/books/${bookId}/pages/${pageNumber}`;
}
static getPageThumbnailUrl(bookId: string, pageNumber: number): string {
return `/api/komga/images/books/${bookId}/pages/${pageNumber}/thumbnail`;
}
static getThumbnailUrl(bookId: string): string {
return `/api/komga/images/books/${bookId}/thumbnail`;
return ImageService.getBookThumbnailUrl(bookId);
}
}

View File

@@ -47,6 +47,10 @@ export class ImageService extends BaseApiService {
}
static getBookPageUrl(bookId: string, pageNumber: number): string {
return `/api/komga/books/${bookId}/pages/${pageNumber}`;
return `/api/komga/images/books/${bookId}/pages/${pageNumber}`;
}
static getBookPageThumbnailUrl(bookId: string, pageNumber: number): string {
return `/api/komga/images/books/${bookId}/pages/${pageNumber}/thumbnail`;
}
}

View File

@@ -4,3 +4,12 @@ import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
export function formatDate(date: string | Date): string {
const d = new Date(date);
return d.toLocaleDateString("fr-FR", {
day: "2-digit",
month: "2-digit",
year: "numeric",
});
}