Merge branch 'toggleable-shelves'

This commit is contained in:
kikootwo
2026-03-11 10:02:57 -04:00
15 changed files with 167 additions and 40 deletions
+5 -4
View File
@@ -16,6 +16,7 @@ export interface GoodreadsShelf {
lastSyncAt: string | null;
createdAt: string;
bookCount: number | null;
autoRequest: boolean;
books: ShelfBook[];
}
@@ -27,8 +28,8 @@ export const useGoodreadsShelves = useList;
export function useAddGoodreadsShelf() {
const { addShelf: addGeneric, isLoading, error } = useAdd();
const addShelf = async (rssUrl: string) => {
return addGeneric({ rssUrl });
const addShelf = async (rssUrl: string, autoRequest: boolean = true) => {
return addGeneric({ rssUrl, autoRequest });
};
return { addShelf, isLoading, error };
@@ -39,8 +40,8 @@ export const useDeleteGoodreadsShelf = useDelete;
export function useUpdateGoodreadsShelf() {
const { updateShelf: updateGeneric, isLoading, error } = useUpdate();
const updateShelf = async (shelfId: string, rssUrl: string) => {
return updateGeneric(shelfId, { rssUrl });
const updateShelf = async (shelfId: string, updates: { rssUrl?: string; autoRequest?: boolean }) => {
return updateGeneric(shelfId, updates);
};
return { updateShelf, isLoading, error };
+4 -3
View File
@@ -16,6 +16,7 @@ export interface HardcoverShelf {
lastSyncAt: string | null;
createdAt: string;
bookCount: number | null;
autoRequest: boolean;
books: ShelfBook[];
}
@@ -27,8 +28,8 @@ export const useHardcoverShelves = useList;
export function useAddHardcoverShelf() {
const { addShelf: addGeneric, isLoading, error } = useAdd();
const addShelf = async (apiToken: string, listId: string) => {
return addGeneric({ apiToken, listId });
const addShelf = async (apiToken: string, listId: string, autoRequest: boolean = true) => {
return addGeneric({ apiToken, listId, autoRequest });
};
return { addShelf, isLoading, error };
@@ -41,7 +42,7 @@ export function useUpdateHardcoverShelf() {
const updateShelf = async (
shelfId: string,
updates: { listId?: string; apiToken?: string; forceSync?: boolean },
updates: { listId?: string; apiToken?: string; forceSync?: boolean; autoRequest?: boolean },
) => {
return updateGeneric(shelfId, updates);
};
+1
View File
@@ -18,6 +18,7 @@ export interface GenericShelf {
lastSyncAt: string | null;
createdAt: string;
bookCount: number | null;
autoRequest: boolean;
books: ShelfBook[];
}
+2 -2
View File
@@ -148,10 +148,10 @@ export async function processGoodreadsShelves(
continue;
}
log.info(`Found ${rssData.books.length} books in shelf "${shelf.name}"`);
log.info(`Found ${rssData.books.length} books in shelf "${shelf.name}"${!shelf.autoRequest ? ' (auto-request disabled)' : ''}`);
const bookData = await processShelfBooks(
'goodreads', rssData.books, shelf.user.id, shelf.id, stats, log, maxLookups,
'goodreads', rssData.books, shelf.user.id, shelf.id, stats, log, maxLookups, shelf.autoRequest,
);
await prisma.goodreadsShelf.update({
+2 -2
View File
@@ -88,10 +88,10 @@ export async function processHardcoverShelves(
continue;
}
log.info(`Found ${fetchedData.books.length} books in list "${shelf.name}" (Hardcover API)`);
log.info(`Found ${fetchedData.books.length} books in list "${shelf.name}" (Hardcover API)${!shelf.autoRequest ? ' (auto-request disabled)' : ''}`);
const bookData = await processShelfBooks(
'hardcover', fetchedData.books, shelf.user.id, shelf.id, stats, log, maxLookups,
'hardcover', fetchedData.books, shelf.user.id, shelf.id, stats, log, maxLookups, shelf.autoRequest,
);
const finalListName =
+2 -1
View File
@@ -73,6 +73,7 @@ export async function processShelfBooks(
stats: ShelfSyncStats,
log: LoggerType,
maxLookups: number,
autoRequest: boolean = true,
): Promise<{ coverUrl: string; asin: string | null; title: string; author: string }[]> {
stats.booksFound += books.length;
@@ -112,7 +113,7 @@ export async function processShelfBooks(
}
}
if (mapping.audibleAsin) {
if (mapping.audibleAsin && autoRequest) {
try {
const result = await createRequestForUser(userId, {
asin: mapping.audibleAsin,