mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-21 23:05:46 +00:00
refactor(player): E.9 — extract scheduled pause/resume timer lifecycle (#572)
Two timer mutables (`scheduledPauseTimer`, `scheduledResumeTimer`) plus the three clear helpers move into `src/store/scheduleTimers.ts`. The module also gains `schedulePauseTimer(delayMs, onFire)` / `scheduleResumeTimer(delayMs, onFire)` so callers no longer need to do the `window.setTimeout(...) as unknown as number` cast or null the handle inside the fire callback — the module auto-clears its own reference before invoking the user callback. `schedulePauseIn` / `scheduleResumeIn` store actions are now four lines shorter each and don't reach into the timer mutables. playerStore 3389 → 3369 LOC. 9 focused tests cover schedule + fire + clear + replace-on-reschedule + independence between the two timers.
This commit is contained in:
committed by
GitHub
parent
18b88e3ae0
commit
89bf7e2364
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* Deferred pause / resume timers — back the `schedulePauseIn` /
|
||||
* `scheduleResumeIn` store actions. Encapsulated so the timer handles
|
||||
* never leak: every public API either schedules + auto-clears on fire,
|
||||
* or clears an outstanding timer outright. Cleared on stop, new track,
|
||||
* manual pause/resume.
|
||||
*/
|
||||
|
||||
let scheduledPauseTimer: number | null = null;
|
||||
let scheduledResumeTimer: number | null = null;
|
||||
|
||||
export function schedulePauseTimer(delayMs: number, onFire: () => void): void {
|
||||
clearScheduledPauseTimers();
|
||||
scheduledPauseTimer = window.setTimeout(() => {
|
||||
scheduledPauseTimer = null;
|
||||
onFire();
|
||||
}, delayMs) as unknown as number;
|
||||
}
|
||||
|
||||
export function scheduleResumeTimer(delayMs: number, onFire: () => void): void {
|
||||
clearScheduledResumeTimers();
|
||||
scheduledResumeTimer = window.setTimeout(() => {
|
||||
scheduledResumeTimer = null;
|
||||
onFire();
|
||||
}, delayMs) as unknown as number;
|
||||
}
|
||||
|
||||
export function clearScheduledPauseTimers(): void {
|
||||
if (scheduledPauseTimer != null) {
|
||||
window.clearTimeout(scheduledPauseTimer);
|
||||
scheduledPauseTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
export function clearScheduledResumeTimers(): void {
|
||||
if (scheduledResumeTimer != null) {
|
||||
window.clearTimeout(scheduledResumeTimer);
|
||||
scheduledResumeTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
export function clearAllPlaybackScheduleTimers(): void {
|
||||
clearScheduledPauseTimers();
|
||||
clearScheduledResumeTimers();
|
||||
}
|
||||
|
||||
/** Test-only: clear both handles without invoking the timer callbacks. */
|
||||
export function _resetScheduleTimersForTest(): void {
|
||||
clearAllPlaybackScheduleTimers();
|
||||
}
|
||||
Reference in New Issue
Block a user