6dcf7d9234
feat(stats): add groupSessionsByVideo helper for episode rollups
...
Pure TS helper that buckets SessionSummary[] by videoId for the
Sessions tab collapsible UI (Task 8). Null videoIds become singleton
buckets keyed by sessionId. Covered by 4 node:test cases.
2026-04-09 01:09:49 -07:00
cfb2396791
feat(stats): collapsible series groups in library tab
2026-04-09 01:07:25 -07:00
8e25e19cac
feat(stats): delete episode from library detail view
...
Add Delete Episode button to MediaDetailView/MediaHeader; extract
buildDeleteEpisodeHandler for testability. Add refresh() to
useMediaLibrary (version-bump pattern) and call it in LibraryTab's
onBack so the list reloads after a delete.
2026-04-09 01:01:13 -07:00
20976d63f0
fix(stats): hide cards deleted from Anki in episode detail
...
Filters out noteIds whose Anki note no longer exists, drops card events
that have no surviving noteIds, and shows a muted footer counting hidden
cards. Loading-state guard (noteInfosLoaded) prevents premature filtering
before ankiNotesInfo resolves.
2026-04-09 00:53:39 -07:00
c1bc92f254
fix(stats): collapse word and reading into one column in Top 50 table
2026-04-09 00:48:15 -07:00
364f7aacb7
feat(stats): expose 365d trends range in dashboard UI
...
Add '365d' to the client TrendRange union, the TimeRange hook type, and
the DateRangeSelector segmented control so users can select a 365-day
window in the trends dashboard.
2026-04-09 00:44:31 -07:00
5feed360ca
feat: add app-owned YouTube subtitle flow with absPlayer-style parsing ( #31 )
...
* fix: harden preload argv parsing for popup windows
* fix: align youtube playback with shared overlay startup
* fix: unwrap mpv youtube streams for anki media mining
* docs: update docs for youtube subtitle and mining flow
* refactor: unify cli and runtime wiring for startup and youtube flow
* feat: update subtitle sidebar overlay behavior
* chore: add shared log-file source for diagnostics
* fix(ci): add changelog fragment for immersion changes
* fix: address CodeRabbit review feedback
* fix: persist canonical title from youtube metadata
* style: format stats library tab
* fix: address latest review feedback
* style: format stats library files
* test: stub launcher youtube deps in CI
* test: isolate launcher youtube flow deps
* test: stub launcher youtube deps in failing case
* test: force x11 backend in launcher ci harness
* test: address latest review feedback
* fix(launcher): preserve user YouTube ytdl raw options
* docs(backlog): update task tracking notes
* fix(immersion): special-case youtube media paths in runtime and tracking
* feat(stats): improve YouTube media metadata and picker key handling
* fix(ci): format stats media library hook
* fix: address latest CodeRabbit review items
* docs: update youtube release notes and docs
* feat: auto-load youtube subtitles before manual picker
* fix: restore app-owned youtube subtitle flow
* docs: update youtube playback docs and config copy
* refactor: remove legacy youtube launcher mode plumbing
* fix: refine youtube subtitle startup binding
* docs: clarify youtube subtitle startup behavior
* fix: address PR #31 latest review follow-ups
* fix: address PR #31 follow-up review comments
* test: harden youtube picker test harness
* udpate backlog
* fix: add timeout to youtube metadata probe
* docs: refresh youtube and stats docs
* update backlog
* update backlog
* chore: release v0.9.0
2026-03-24 00:01:24 -07:00
6749ff843c
feat(stats): add v1 immersion stats dashboard ( #19 )
2026-03-20 02:43:28 -07:00