mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-13 20:12:54 -07:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user