Commit Graph

78 Commits

Author SHA1 Message Date
e940205479 fix: satisfy subtitle cue parser typecheck 2026-03-15 15:33:40 -07:00
d069df2124 fix: guard subtitle prefetch init races 2026-03-15 14:42:36 -07:00
87bf3cef0c fix: address coderabbit review findings 2026-03-15 14:26:30 -07:00
5c31be99b5 feat: wire up subtitle prefetch service to MPV events
Initializes prefetch on external subtitle track activation, detects
seeks via time-pos delta threshold, pauses prefetch during live
subtitle processing, and restarts on cache invalidation.

- Extract loadSubtitleSourceText into reusable function
- Add prefetch service state and initSubtitlePrefetch helper
- Thread onTimePosUpdate through event actions/bindings/main-deps
- Pause prefetch on subtitle change, resume on emit
- Restart prefetch after tokenization cache invalidation
- Query track-list on media path change to find external subs
2026-03-15 13:16:19 -07:00
05fe9c8fdf test: add seek and pause/resume tests for prefetch service 2026-03-15 13:04:50 -07:00
f89aec31e8 feat: add subtitle prefetch service with priority window
Implements background tokenization of upcoming subtitle cues with a
configurable priority window. Supports stop, pause/resume, seek
re-prioritization, and cache-full stopping condition.
2026-03-15 13:04:26 -07:00
6cf0272e7e feat: add unified parseSubtitleCues with format auto-detection 2026-03-15 13:01:50 -07:00
7ea303361d feat: add ASS subtitle cue parser 2026-03-15 13:01:34 -07:00
95ec3946d2 feat: add SRT/VTT subtitle cue parser 2026-03-15 13:01:08 -07:00
d71e9e841e perf: use cloneNode template and replaceChildren for DOM rendering
Replace createElement('span') with cloneNode(false) from a lazily
initialized template span. Replace innerHTML='' with replaceChildren()
to avoid HTML parser invocation on clear. Add cloneNode/replaceChildren
to FakeElement in tests to support the new APIs.
2026-03-15 12:52:56 -07:00
047b349d05 perf: batch annotation passes into single loop
Collapse applyKnownWordMarking, applyFrequencyMarking, and
applyJlptMarking into a single .map() call. markNPlusOneTargets
remains a separate pass (needs full array with isKnown set).

Eliminates 3 intermediate array allocations and 3 redundant
iterations over the token array.
2026-03-15 12:49:08 -07:00
35946624c2 feat: add preCacheTokenization and isCacheFull to SubtitleProcessingController 2026-03-15 12:46:43 -07:00
7d76c44f7f feat(stats): add episodes completed and anime completed to tracking snapshot
- Query watched videos count and anime with all episodes watched
- Display in overview tracking snapshot
- Remove efficiency section from trends
2026-03-14 23:11:27 -07:00
06745ff63a feat: add AniList rate limiter and remaining backlog tasks 2026-03-14 23:11:27 -07:00
6d8650994f feat(stats): wire stats server, overlay, and CLI into main process
- Stats server auto-start on immersion tracker init
- Stats overlay toggle via keybinding and IPC
- Stats CLI command (subminer stats) with cleanup mode
- mpv plugin menu integration for stats toggle
- CLI args for --stats, --stats-cleanup, --stats-response-path
2026-03-14 23:11:27 -07:00
a7c294a90c feat(stats): add stats server, API endpoints, config, and Anki integration
- Hono HTTP server with 20+ REST endpoints for stats data
- Stats overlay BrowserWindow with toggle keybinding
- IPC channel definitions and preload bridge
- Stats config section (toggleKey, serverPort, autoStartServer, autoOpenBrowser)
- Config resolver for stats section
- AnkiConnect proxy endpoints (guiBrowse, notesInfo)
- Note ID passthrough in card mining callback chain
- Stats CLI command with autoOpenBrowser respect
2026-03-14 23:11:27 -07:00
f005f542a3 feat(immersion): add anime metadata, occurrence tracking, and schema upgrades
- Add imm_anime table with AniList integration
- Add imm_subtitle_lines, imm_word_line_occurrences, imm_kanji_line_occurrences
- Add POS fields (part_of_speech, pos1, pos2, pos3) to imm_words
- Add anime metadata parsing with guessit fallback
- Add video duration tracking and watched status
- Add episode, streak, trend, and word/kanji detail queries
- Deduplicate subtitle line recording within sessions
- Pass Anki note IDs through card mining callback chain
2026-03-14 23:11:27 -07:00
9eed37420e Automate AUR publish in tagged release workflow (#22) 2026-03-14 19:49:46 -07:00
1b56360a24 feat(yomitan): add read-only external profile support for shared dictionaries (#18) 2026-03-12 01:17:34 -07:00
4d7c80f2e4 Add overlay gamepad support for keyboard-only mode (#17) 2026-03-11 20:34:46 -07:00
2f17859b7b Document AUR install flow and add backlog planning artifacts
- Add Arch Linux `subminer-bin` install instructions to README and docs-site installation guide
- Add Hyprland troubleshooting guidance for transparency and global shortcut passthrough
- Add TASK-159..164 backlog records and skill design plans; include changelog fragment
- Apply formatting-only update to `src/release-workflow.test.ts`
2026-03-11 02:08:59 -07:00
9c7e02cbf0 Enforce config example drift checks in CI and release
- add `verify:config-example` script with tests to fail on missing/stale generated config artifacts
- run the verification in CI and release workflows, and document it in release/docs guidance
- fix docs-site Cloudflare Pages watch path to `docs-site/*` with regression coverage
2026-03-10 20:06:41 -07:00
5f320edab5 move docs back repo 2026-03-10 19:47:16 -07:00
a13b7352d7 chore: make pretty 2026-03-10 02:32:53 -07:00
b32c3cf58c fix: avoid merged dictionary rebuilds on revisits 2026-03-10 02:26:07 -07:00
b791262860 fix: keep jlpt underline stable during Yomitan lookup 2026-03-10 01:37:32 -07:00
618727d8e8 fix: set canonical userData path during startup 2026-03-09 23:52:50 -07:00
fed60c265d style: restore repo formatting 2026-03-09 18:10:32 -07:00
e59192bbe1 Improve startup dictionary progress and fix overlay/plugin input handlin
- show a dedicated startup OSD "building" phase for character dictionary sync
- forward bare `Tab` from visible overlay to mpv so AniSkip works while focused
- fix Windows plugin env override resolution for `SUBMINER_BINARY_PATH`
2026-03-09 02:35:03 -07:00
e0f82d28f0 Improve startup dictionary sync UX and default playback keybindings
- Add default `f` fullscreen overlay binding and switch default AniSkip skip key to `Tab`
- Make character-dictionary auto-sync non-blocking at startup with tokenization gating for Yomitan mutations
- Add ordered startup OSD progress (checking/generating/updating/importing), refresh current subtitle on sync completion, and extend regression tests
2026-03-09 00:50:32 -07:00
a0521aeeaf fix(tracker): follow active hyprland and visible x11 windows 2026-03-08 23:03:55 -07:00
2127f759ca fix: correct guessit title parsing for character dictionary sync 2026-03-08 23:03:48 -07:00
2e59c21078 chore: prep v0.5.3 release 2026-03-08 22:08:46 -07:00
2bbf38f987 fix: pin signpath artifact configuration 2026-03-08 20:44:00 -07:00
58ec9b76e0 fix: harden windows release signing workflow 2026-03-08 20:24:47 -07:00
c799a8de3c Prepare Windows release and signing process (#16) 2026-03-08 19:51:30 -07:00
021010a338 test(ai): cover shared client helpers 2026-03-08 16:11:13 -07:00
9e46176519 feat(ai): split shared provider config from Anki runtime 2026-03-08 16:10:51 -07:00
f10e905dbd build: enforce changelog workflow in CI 2026-03-08 16:10:37 -07:00
a6ece5388a fix(launcher): remove youtube subtitle mode 2026-03-08 16:03:24 -07:00
6a44b54b51 fix: reuse background overlay across mpv reconnects 2026-03-08 16:02:57 -07:00
93cd688625 fix: harden AI subtitle fix response parsing 2026-03-08 16:01:40 -07:00
38034db1e4 fix: reuse background tokenization warmups 2026-03-08 16:01:11 -07:00
f775f90360 fix: improve secondary subtitle readability 2026-03-07 23:51:23 -08:00
d0c11d347b refactor: remove root node and npm workflow deps 2026-03-07 21:19:14 -08:00
f0418c6e56 fix: repair GitHub release publish workflow 2026-03-07 19:43:35 -08:00
e18985fb14 Enhance AniList character dictionary sync and subtitle features (#15) 2026-03-07 18:30:59 -08:00
2f07c3407a chore: bump version to 0.3.0 2026-03-05 20:21:03 -08:00
8ca05859a9 fix: support repeated popup scroll keys 2026-03-05 19:20:55 -08:00
0cac446725 fix: preserve keyboard subtitle navigation state 2026-03-05 18:39:40 -08:00