feat: perf optim search
This commit is contained in:
@@ -73,13 +73,29 @@ export abstract class BaseApiService {
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
protected static async fetchFromApi<T>(url: string, headers: Headers): Promise<T> {
|
||||
protected static async fetchFromApi<T>(
|
||||
url: string,
|
||||
headers: Headers,
|
||||
isImage: boolean = false
|
||||
): Promise<T> {
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<KomgaBook>(
|
||||
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,
|
||||
|
||||
@@ -16,12 +16,7 @@ export class ImageService extends BaseApiService {
|
||||
return this.fetchWithCache<ImageResponse>(
|
||||
`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<Response>(url, headers, true);
|
||||
const contentType = response.headers.get("content-type");
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
const buffer = Buffer.from(arrayBuffer);
|
||||
|
||||
@@ -57,12 +57,10 @@ export class SeriesService extends BaseApiService {
|
||||
return this.fetchWithCache<string>(
|
||||
`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<LibraryResponse<KomgaBook>>(
|
||||
`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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user