fix: address PR-57 CodeRabbit findings and CI failures

- use filtered word counts in media detail session token aggregation
- cancel fullscreen refresh burst on exit via updateLinuxMpvFullscreenOverlayRefreshBurst
- guard Hyprland JSON.parse in try/catch; exclude windowtitle from geometry events
- narrow focus suppression from :focus to :focus-visible
- apply JLPT lock selectors to word-name-match tokens (N1–N5)
This commit is contained in:
2026-05-12 00:28:48 -07:00
parent 6e666d7ca5
commit 6bf905140c
12 changed files with 206 additions and 14 deletions
@@ -3072,6 +3072,12 @@ test('media detail resolves retained sessions before lifetime summary exists', (
WHERE session_id = ?
`,
).run(startedAtMs + 600_000, 600_000, 100, 990, 1, sessionId);
insertFilteredWordOccurrence(db, {
sessionId,
videoId,
occurrenceCount: 4,
startedAtMs,
});
assert.equal(getSessionSummaries(db, 1)[0]?.videoId, videoId);
assert.equal(
@@ -3089,7 +3095,7 @@ test('media detail resolves retained sessions before lifetime summary exists', (
assert.equal(detail.totalSessions, 1);
assert.equal(detail.totalActiveMs, 600_000);
assert.equal(detail.totalLinesSeen, 100);
assert.equal(detail.totalTokensSeen, 990);
assert.equal(detail.totalTokensSeen, 4);
assert.equal(detail.totalCards, 1);
} finally {
db.close();
@@ -243,6 +243,7 @@ export function getMediaLibrary(db: DatabaseSync): MediaLibraryRow[] {
}
export function getMediaDetail(db: DatabaseSync, videoId: number): MediaDetailRow | null {
const wordsExpr = sessionDisplayWordsExpr('s', 'swc', 'COALESCE(asm.tokensSeen, s.tokens_seen)');
return db
.prepare(
`
@@ -265,7 +266,7 @@ export function getMediaDetail(db: DatabaseSync, videoId: number): MediaDetailRo
END AS totalCards,
CASE
WHEN lm.video_id IS NOT NULL THEN COALESCE(lm.total_tokens_seen, 0)
ELSE COALESCE(SUM(COALESCE(asm.tokensSeen, s.tokens_seen, 0)), 0)
ELSE COALESCE(SUM(${wordsExpr}), 0)
END AS totalTokensSeen,
CASE
WHEN lm.video_id IS NOT NULL THEN COALESCE(lm.total_lines_seen, 0)
@@ -290,6 +291,7 @@ export function getMediaDetail(db: DatabaseSync, videoId: number): MediaDetailRo
LEFT JOIN imm_youtube_videos yv ON yv.video_id = v.video_id
LEFT JOIN imm_sessions s ON s.video_id = v.video_id
LEFT JOIN active_session_metrics asm ON asm.sessionId = s.session_id
LEFT JOIN session_word_counts swc ON swc.sessionId = s.session_id
WHERE v.video_id = ?
AND (lm.video_id IS NOT NULL OR s.session_id IS NOT NULL)
GROUP BY v.video_id