Skip to content

Merge for Release#73

Merged
boludo00 merged 7 commits intomainfrom
develop
Mar 3, 2026
Merged

Merge for Release#73
boludo00 merged 7 commits intomainfrom
develop

Conversation

@boludo00
Copy link
Copy Markdown
Owner

@boludo00 boludo00 commented Mar 3, 2026

No description provided.

boludo00 added 7 commits March 2, 2026 11:44
Resolves #61

Previously there was a single global "use hardlinks" toggle. Now ebooks
and audiobooks each have their own setting, allowing e.g. copying ebooks
(so metadata can be written before sending to an eReader) while still
hardlinking audiobooks.

- Backend: add use_hardlinks_ebook / use_hardlinks_audiobook to
  DownloadPathsResponse and DownloadPathsUpdate in settings.py
- Backend: orchestrator checks format-specific key first
  (use_hardlinks_ebook or use_hardlinks_audiobook), falling back to the
  global use_hardlinks for existing deployments
- Frontend: replace single toggle with two per-format toggles in Settings
- Frontend: api.ts types updated accordingly
Users can now link their own Hardcover API token and configure which
sources to watch (to-read status and/or custom lists). A background
job (every 6h) auto-requests any new books found for all enabled users.

- Add UserHardcoverSync model and migration (036)
- Add /api/hardcover-sync router (GET/PUT config, GET lists, POST run)
- Add sync_hardcover_lists and sync_hardcover_lists_for_user tasks
- Register sync_hardcover_lists as a scheduled job (6h default)
- Respects per-user permissions and auto-approve settings
- Frontend: Hardcover Sync card on Profile page with token input,
  toggles for to-read/lists, format preference, and manual sync button
Users no longer need to re-enter the app-wide Hardcover API token on
their profile. The sync feature uses the global token automatically
and shows 'Using app-wide Hardcover token' in the UI. A personal token
is still accepted as an optional override for multi-user setups where
different users have different Hardcover accounts.
feat: Per-user Hardcover list/status sync (issue #60)
feat: Per-format hardlink settings for ebooks and audiobooks
… migration

Two pairs of migration files shared the same revision ID ('031' and '032').
Alembic fails with a duplicate-revision error when it loads the versions
directory, causing `alembic upgrade heads` to exit early. The entrypoint's
`|| echo WARNING` catch silently swallowed this failure, so migration 035
(which adds the `users.oidc_subject` column) never ran — producing the
`UndefinedColumn: users.oidc_subject` crash in production.

Fixes:
- 031_add_direct_download_settings: revision '031' → '031b'
- 032_add_library_mapping_to_booklore_servers: revision '032' → '032b'
- 032_add_flaresolverr_url: down_revision '031' → '031b'
- 034_merge_heads: down_revision includes all four branch heads
  ('031', '031b', '032b', '033')
- 035_add_oidc_fields: made idempotent (checks column/index existence)
- entrypoint.sh: detect legacy untracked databases and stamp at the
  correct revision; fail loudly on migration errors instead of masking them
fix: resolve duplicate Alembic revision IDs causing missing oidc_subject column
@boludo00 boludo00 merged commit 5253a7f into main Mar 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant