Commit graph

48 commits

Author SHA1 Message Date
6225231d67 fix(library): suppress missing-key notices on quiet scheduled syncs 2026-08-03 21:40:21 +08:00
2cce78d664 feat(library): controller, settings, commands, scheduler 2026-08-03 16:59:47 +08:00
278f009a9b feat(library): generic per-type sync engine + resolve 2026-08-03 16:39:00 +08:00
c14da19c47 feat(library): rating line, manga finish-flip notify, game links, dedupe
- render **Rating:** line in manga/book/game/comic body (after read/play
  status, gated on rating != '0' + stars non-empty), matching watchlist's
  render.ts convention
- manga finish-flip now notifies user (final chapters out), matching
  chapter-flip's existing notify path
- game renderGame emits ## Links (Steam by appid, RAWG by url) — fixes
  latent owned-heading strip where user-added Links sections silently
  vanished since games never re-rendered the heading
- move duplicated deriveReadStatus/deriveRating/parseNumOrNull into
  library/convert.ts, import across specs; zero behavior change
2026-08-03 16:29:02 +08:00
d2a6940270 feat(library): comic spec — comic vine + issue flip 2026-08-03 16:16:34 +08:00
cdc653e6e4 feat(library): game spec — steam + rawg 2026-08-03 16:02:56 +08:00
0c8f897e46 fix(library): skip book sync on olid search miss (identity-swap guard) 2026-08-03 15:51:15 +08:00
1c90ae9abc feat(library): book spec — open library 2026-08-03 15:44:48 +08:00
abc3489d27 feat(library): manga spec — jikan enrich, rss/mangadex chapter flip 2026-08-03 15:28:01 +08:00
c398669ae6 feat(library): core types + rss/atom chapter feed parser 2026-08-03 15:07:06 +08:00
a5ebb6f088 fix(watchlist): preserve prev country when TMDB tv lacks production_countries
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 15:20:43 +08:00
e0e0462836 fix(watchlist): TV country full name + tmdb_rating precision rounding
TMDB's origin_country returns ISO codes (KR), not full names, causing
a vault regression from South Korea to KR. buildRecord now prefers
production_countries[0].name, falling back to the raw origin_country
code only when absent.

TMDB also now returns vote_average at full precision (6.537), causing
mass diff noise against the vault's 1-decimal convention and spurious
rewrites on precision drift alone. tmdb_rating is now rounded to 1
decimal place.

Loki fixture updated to realistic TMDB shapes (ISO country code +
production_countries) to catch this regression going forward.
2026-07-30 15:00:39 +08:00
fb3f52e4b0 fix(watchlist): preserve custom body sections through sync rewrite
renderNote wiped any ## heading not owned by the renderer (Synopsis,
Cast, Links, My Notes) on every sync, destroying user content like
## Collection graph-link sections. extractCustomSections now pulls
non-owned sections out of the existing body before rewrite, and
renderNote re-emits them verbatim, in original order, between Links
and My Notes.
2026-07-30 14:59:24 +08:00
2c663568ca feat(watchlist): preserve existing TV crew fields until per-episode enrichment 2026-07-30 14:32:42 +08:00
b0f3dce76d fix: null-guard loadData on fresh install (no data.json crashed onload) 2026-07-30 14:00:20 +08:00
a4ba1b8e42 fix(watchlist): stale-read clobber, concurrency guard, leaked timeout, quiet catch-up notices
- SyncDeps.listNotes now returns paths only; new readNote(path) reads
  content immediately before parse/diff/write per note, closing the
  window where an edit made between the initial scan and a later write
  got silently overwritten. resolveMissingIds updated to match.
- WatchlistController gains a syncing flag shared by syncNow and
  resolveMissingIds so overlapping invocations short-circuit instead
  of racing on the same vault notes.
- main.ts registers cleanup for the 30s startup catch-up setTimeout so
  it doesn't fire after unload.
- syncNow takes a quiet flag (used by the scheduled catch-up path) so
  zero-change scheduled syncs don't spam a Notice; manual commands are
  unaffected.
2026-07-30 13:24:33 +08:00
b77a189848 fix(watchlist): resolve 429 backoff + unique-exact-match acceptance 2026-07-30 13:05:31 +08:00
22a409ce9b feat(watchlist): resolve-missing-ids command 2026-07-30 12:54:49 +08:00
aafa3bb1e4 fix(watchlist): surface sync command errors via Notice 2026-07-30 12:49:59 +08:00
f9cc324ead feat(watchlist): settings, commands, catch-up scheduler wiring 2026-07-30 12:44:52 +08:00
e8cb9b93fe fix(watchlist): strip surrounding quotes from prev user fields (notion_url round-trip) 2026-07-30 12:37:52 +08:00
eeaa37469c feat(watchlist): SyncEngine — tiered diff-on-write sync with throttle/backoff 2026-07-30 12:31:00 +08:00
1923bb87b8 fix(watchlist): normalize notion_url null-sentinel in buildRecord prev-read
quotedOrNull renders an empty notion_url as the literal string `null`.
buildRecord read that back verbatim on the next sync pass and re-quoted
it as "null", breaking diff-on-write (every re-sync of a note with no
notion_url appeared changed). Treat the `null` sentinel as empty when
reading prev frontmatter.
2026-07-30 12:30:57 +08:00
08f63205c2 feat(watchlist): tmdb client — v3/v4 auth, detail + search 2026-07-30 12:22:27 +08:00
0aa6df81a3 feat(watchlist): renderNote — canonical note serializer (golden-tested) 2026-07-30 11:17:22 +08:00
51d630fcd6 feat(watchlist): buildRecord — TMDB detail → canonical record
Port pure fn mapping raw TMDB JSON + prev frontmatter → WatchlistRecord. Fixtures from python reference selftest. TDD: 14 new cases all green.
2026-07-29 23:15:36 +08:00
732ec8adf6 feat(watchlist): note parsing (frontmatter, My Notes, tmdb ref) 2026-07-29 22:55:46 +08:00
cade7104db feat(watchlist): yaml helpers + schema types 2026-07-29 21:47:25 +08:00
071c76862a rebrand: media-db-sync fork + fix bun test resolution
- manifest/manifest-beta/package.json → id media-db-sync, v0.1.0
- pluginName const → media-db-sync
- tsconfig: baseUrl (bun test needs it for packages/* paths) + ignoreDeprecations 6.0
- upstream tests were broken on clean checkout (module resolution) → 31/31 pass now
2026-07-29 19:18:59 +08:00
Moritz Jung
80adf4aff7 more tests 2026-07-03 11:38:15 +02:00
Moritz Jung
84a82f521a fix issue 2026-06-23 19:17:22 +02:00
Moritz Jung
c522ff1301 small tweaks 2026-06-21 22:37:50 +02:00
ltctceplrm
f176a12d6f Applied review suggestions 2026-06-21 22:00:13 +02:00
ltctceplrm
e1ab585103 fix lint errors and ran bun run check:fix 2026-06-21 20:06:38 +02:00
ltctceplrm
54f971f609 Add legacy api key modal
Pop up modal when legacy keys are found in data.json
The keys are hidden by default but the user can show them or just copy them. The old plaintext keys should be deleted for safety reasons
2026-06-21 19:50:23 +02:00
ltctceplrm
e38f450e24 Comment out mobygames and giantbomb 2026-06-21 17:51:01 +02:00
ltctceplrm
c4b5908e6e Change isbns to strings 2026-06-17 00:03:24 +02:00
ltctceplrm
979ed6804f forgot to include ratings for editions 2026-06-10 20:08:47 +02:00
ltctceplrm
338fea341f reimplemented /isbn/ search + fixed amount of pages 2026-06-10 18:18:00 +02:00
ltctceplrm
bc53fdfd22 Rewrote OpenLibraryAPI
* Split general book search and specific editions search (when using /books/ID in searchByID)
* When searching for specific editions if there's missing metadata it'll use search.json to fill in the missing info
* ran bun check fix
2026-06-10 02:08:07 +02:00
ltctceplrm
f03e3bf442 Add genres again 2026-06-10 01:03:20 +02:00
ltctceplrm
29f2c58703 Merge branch 'mProjectsCode-master' into openlibrary-genres 2026-06-10 01:00:49 +02:00
Moritz Jung
21ad8c59d0 remove solid; rework season search 2026-06-03 19:06:03 +02:00
Moritz Jung
07c0421dc5 fix errors 2026-06-02 13:55:48 +02:00
Moritz Jung
ad568b5c9f another cleanup pass 2026-05-21 20:14:11 +02:00
Moritz Jung
898b495f52 more changes to modal flow, fixes some issues I hope 2026-05-21 20:04:33 +02:00
Moritz Jung
5a032a87ae cleanup of new result code 2026-05-06 17:03:31 +02:00
Moritz Jung
498e2611ae add obsidian eslint plugin, solve major issues 2026-05-06 16:26:59 +02:00