Commit graph

550 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
1e7e6d1032 docs: phase 2 implementation plan 2026-08-03 14:59:05 +08:00
fdd8609e49 docs: phase 2 multi-type design spec 2026-08-03 14:35:07 +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
699bbf3a9f chore: finish rebrand from upstream obsidian-media-db-plugin
package.json author/description now match manifest.json, release
workflow plugin name and repo-automation.config.json repo ref no
longer point at the upstream project.
2026-07-30 13:24:53 +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
79ba40f04d fix: tests/tsconfig baseUrl after root baseUrl addition (typecheck script) 2026-07-30 12:27:21 +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
e7714736ce docs: watchlist suite implementation plan 2026-07-29 21:06:54 +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
65754270ad [auto] bump version to 0.8.0-canary.20260703T094912 2026-07-03 11:49:18 +02:00
Moritz Jung
a449d24fce fix changelog 2026-07-03 11:48:58 +02:00
Moritz Jung
1851f8e6a0 update changelog once more 2026-07-03 11:45:49 +02: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
Moritz Jung
63e8359895
Merge pull request #277 from ltctceplrm/api-key-popup
Add legacy api key popup so users can copy old keys
2026-06-21 22:20:48 +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
Moritz Jung
5833ca261f
Merge pull request #275 from ltctceplrm/isbn-fix
Change isbns to strings
2026-06-17 09:43:06 +02:00
ltctceplrm
c4b5908e6e Change isbns to strings 2026-06-17 00:03:24 +02:00
Moritz Jung
624be7ef82 [auto] bump version to 0.8.0-canary.20260616T160138 2026-06-16 18:01:44 +02:00
Moritz Jung
08d15660c3 update deps 2026-06-16 18:01:26 +02:00
Moritz Jung
fc5ef663ca
Merge pull request #269 from ltctceplrm/openlibrary-genres
Partial rewrite of OpenLibraryAPI
2026-06-12 10:44:45 +02:00