feat(reader): add reader API integration
- Add getReaderMetadata() to fetch media item metadata - Add updateReadingProgress() to sync reading progress to backend - Export ReaderMetadata and ReadingProgress types - Enable reader to communicate with Go backend
This commit is contained in:
@@ -88,6 +88,48 @@ function handleError(error: unknown, context: string): void {
|
||||
showToast(message, "error");
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// Reader API Functions
|
||||
// ============================================================
|
||||
interface ReaderMetadata {
|
||||
media_item_id: string;
|
||||
title: string;
|
||||
author: string;
|
||||
cover_image_path: string;
|
||||
library_type: "ebook" | "comic" | "manga" | "pdf";
|
||||
mime_type: string;
|
||||
file_path: string;
|
||||
chapter_metadata?: ChapterMetadata;
|
||||
total_pages?: number;
|
||||
}
|
||||
interface ChapterMetadata {
|
||||
chapters: Chapter[];
|
||||
}
|
||||
interface Chapter {
|
||||
id: string;
|
||||
title: string;
|
||||
start_page: number;
|
||||
page_count: number;
|
||||
}
|
||||
interface ReadingProgress {
|
||||
current_page: number;
|
||||
total_pages: number;
|
||||
}
|
||||
async function getReaderMetadata(mediaItemId: string): Promise<ReaderMetadata> {
|
||||
const response = await apiGet(`/media-items/${mediaItemId}`);
|
||||
return handleResponse<ReaderMetadata>(response);
|
||||
}
|
||||
async function updateReadingProgress(
|
||||
mediaItemId: string,
|
||||
progress: ReadingProgress,
|
||||
): Promise<void> {
|
||||
const response = await apiPut(
|
||||
`/media-items/${mediaItemId}/progress`,
|
||||
progress,
|
||||
);
|
||||
await handleVoidResponse(response);
|
||||
}
|
||||
|
||||
export {
|
||||
apiGet,
|
||||
apiPost,
|
||||
@@ -97,6 +139,12 @@ export {
|
||||
handleResponse,
|
||||
handleVoidResponse,
|
||||
handleError,
|
||||
getReaderMetadata,
|
||||
updateReadingProgress,
|
||||
ReaderMetadata,
|
||||
ReadingProgress,
|
||||
ChapterMetadata,
|
||||
Chapter,
|
||||
};
|
||||
|
||||
Alpine.data("api", () => ({
|
||||
|
||||
Reference in New Issue
Block a user