From feec3c794ad1a6baf0630ae2cf6450fbdb5a57fc Mon Sep 17 00:00:00 2001 From: neon <18559658+neonsolstice@users.noreply.github.com> Date: Sat, 6 Jun 2026 18:01:45 +0000 Subject: [PATCH] fix(koreader): trigger hardcover auto-sync on progress update KOReader progress updates were updating the database but failing to emit the progress changed event, causing Hardcover auto-sync to be skipped. This change adds the missing event emission to the KOReader service so that external syncs trigger correctly, and patches a query filter issue in the Hardcover repository. Closes #258 --- .../features/hardcover/api/hardcover.api.ts | 16 - .../components/HardcoverConnectionCard.vue | 2 +- .../components/HardcoverSyncProgress.vue | 35 +- .../__tests__/useHardcoverSettings.test.ts | 2 + .../__tests__/useHardcoverSync.test.ts | 23 +- .../hardcover/composables/useHardcoverSync.ts | 5 + .../features/settings/MaintenanceSettings.vue | 46 +- packages/types/src/hardcover.ts | 8 +- .../constants/app-settings.constants.ts | 1 - .../0016_widen_hardcover_match_method.sql | 1 + .../src/db/migrations/meta/0016_snapshot.json | 10581 ++++++++++++++++ server/src/db/migrations/meta/_journal.json | 7 + server/src/db/schema/hardcover.ts | 2 +- .../achievement/achievement-events.service.ts | 12 +- .../app-settings/app-settings.service.ts | 9 - .../modules/hardcover/dto/hardcover.dto.ts | 5 - .../hardcover-admin.controller.test.ts | 33 - .../hardcover/hardcover-admin.controller.ts | 23 - ...dcover-auto-sync-scheduler.service.test.ts | 224 + .../hardcover-auto-sync-scheduler.service.ts | 179 + .../hardcover-book-match.service.test.ts | 16 + .../hardcover/hardcover-book-match.service.ts | 33 + .../hardcover-event-listener.service.test.ts | 157 +- .../hardcover-event-listener.service.ts | 65 +- .../hardcover-settings.service.test.ts | 67 +- .../hardcover/hardcover-settings.service.ts | 68 +- .../hardcover/hardcover-sync.service.test.ts | 60 +- .../hardcover/hardcover-sync.service.ts | 52 +- .../src/modules/hardcover/hardcover.module.ts | 8 +- .../hardcover/hardcover.repository.test.ts | 35 +- .../modules/hardcover/hardcover.repository.ts | 39 +- .../src/modules/koreader/koreader.module.ts | 3 +- .../modules/koreader/koreader.service.test.ts | 20 + .../src/modules/koreader/koreader.service.ts | 9 + server/src/modules/seed/seed.service.ts | 1 - 35 files changed, 11463 insertions(+), 384 deletions(-) create mode 100644 server/src/db/migrations/0016_widen_hardcover_match_method.sql create mode 100644 server/src/db/migrations/meta/0016_snapshot.json delete mode 100644 server/src/modules/hardcover/hardcover-admin.controller.test.ts delete mode 100644 server/src/modules/hardcover/hardcover-admin.controller.ts create mode 100644 server/src/modules/hardcover/hardcover-auto-sync-scheduler.service.test.ts create mode 100644 server/src/modules/hardcover/hardcover-auto-sync-scheduler.service.ts diff --git a/client/src/features/hardcover/api/hardcover.api.ts b/client/src/features/hardcover/api/hardcover.api.ts index 3aeb0801c..d3e7ce5cf 100644 --- a/client/src/features/hardcover/api/hardcover.api.ts +++ b/client/src/features/hardcover/api/hardcover.api.ts @@ -1,6 +1,5 @@ import { api } from '@/lib/api' import type { - HardcoverAdminSettings, HardcoverActiveSyncStatus, HardcoverSyncPendingSummary, HardcoverSettings, @@ -97,18 +96,3 @@ export async function fetchHardcoverSyncPendingSummary(): Promise { - const res = await api('/api/v1/admin/hardcover/settings') - if (!res.ok) throw new Error('Failed to fetch admin settings') - return res.json() -} - -export async function setHardcoverFeatureEnabled(enabled: boolean): Promise { - const res = await api('/api/v1/admin/hardcover/settings', { - method: 'PATCH', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ enabled }), - }) - if (!res.ok) throw new Error('Failed to update Hardcover feature flag') -} diff --git a/client/src/features/hardcover/components/HardcoverConnectionCard.vue b/client/src/features/hardcover/components/HardcoverConnectionCard.vue index b5646f9d0..cccbb7366 100644 --- a/client/src/features/hardcover/components/HardcoverConnectionCard.vue +++ b/client/src/features/hardcover/components/HardcoverConnectionCard.vue @@ -164,7 +164,7 @@ const privacyOptions = [

Sync on progress update

-

Push reading progress and dates when a session is saved.

+

Push reading progress and dates when BookOrbit or KOReader progress changes.

diff --git a/client/src/features/hardcover/components/HardcoverSyncProgress.vue b/client/src/features/hardcover/components/HardcoverSyncProgress.vue index be1b7e747..d2e158bd0 100644 --- a/client/src/features/hardcover/components/HardcoverSyncProgress.vue +++ b/client/src/features/hardcover/components/HardcoverSyncProgress.vue @@ -1,10 +1,10 @@