mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
9fac6eb490
Migrates ~74 call sites away from the playerStore re-export shims that were kept during M0–E.41 to avoid touching 30+ imports per PR. Now that the bigger refactor work is done, each helper goes back to its real home: - `initAudioListeners`, `installQueueUndoHotkey`, `flushPlayQueuePosition` → from their own store modules - `getPlaybackProgressSnapshot`, `subscribePlaybackProgress`, `PlaybackProgressSnapshot` → from `playbackProgress` - `resolveReplayGainDb`, `shuffleArray`, `songToTrack` → from `utils/*` - `_resetQueueUndoStacksForTest`, `consumePendingQueueListScrollTop`, `registerQueueListScrollTopReader` → from `queueUndo` - `PlayerState`, `Track` types → from `playerStoreTypes` Drops the corresponding 13 re-export stubs from `playerStore.ts` and the now-unused imports. Also drops dead section banners + per-wrapper comments above one-line action delegates. Trims one stale "(separate PR)" note in `transportLightActions.ts` since that follow-up landed in E.39. `playerStore.ts`: 180 → 112 LOC (−68). Down from Phase E's starting 3732 LOC. `bootstrap.test.ts` mock target updated from `../store/playerStore` to `../store/queueUndoHotkey` to keep the spy reachable after the import change.
51 lines
1.9 KiB
TypeScript
51 lines
1.9 KiB
TypeScript
import type { PlayerState, Track } from './playerStoreTypes';
|
|
import { useAuthStore } from './authStore';
|
|
import { resolveReplayGainDb } from '../utils/resolveReplayGainDb';
|
|
/**
|
|
* Compute the normalization fields that should land in the next state commit
|
|
* when the runtime switches tracks or rewrites the queue. Three branches:
|
|
*
|
|
* - **loudness** — clear the visible dB until the engine pushes a real
|
|
* `audio:normalization-state` event back; surface the user's target LUFS.
|
|
* - **replaygain (enabled)** — derive the dB from track/album tags via
|
|
* `resolveReplayGainDb`, add the pre-gain, fall back to the configured
|
|
* fallback when no tag is available.
|
|
* - **off** (or replaygain disabled) — everything null, engine `'off'`.
|
|
*/
|
|
export function deriveNormalizationSnapshot(
|
|
track: Track,
|
|
queue: Track[],
|
|
queueIndex: number,
|
|
): Pick<
|
|
PlayerState,
|
|
'normalizationNowDb' | 'normalizationTargetLufs' | 'normalizationEngineLive'
|
|
> {
|
|
const auth = useAuthStore.getState();
|
|
const engine = auth.normalizationEngine;
|
|
if (engine === 'loudness') {
|
|
const target = auth.loudnessTargetLufs;
|
|
return {
|
|
// Clears stale UI until `audio:normalization-state` / refresh catches up.
|
|
normalizationNowDb: null,
|
|
normalizationTargetLufs: target,
|
|
normalizationEngineLive: 'loudness',
|
|
};
|
|
}
|
|
if (engine === 'replaygain' && auth.replayGainEnabled) {
|
|
const prev = queueIndex > 0 ? queue[queueIndex - 1] : null;
|
|
const next = queueIndex + 1 < queue.length ? queue[queueIndex + 1] : null;
|
|
const resolved = resolveReplayGainDb(track, prev, next, true, auth.replayGainMode);
|
|
const nowDb = resolved != null ? (resolved + auth.replayGainPreGainDb) : auth.replayGainFallbackDb;
|
|
return {
|
|
normalizationNowDb: nowDb,
|
|
normalizationTargetLufs: null,
|
|
normalizationEngineLive: 'replaygain',
|
|
};
|
|
}
|
|
return {
|
|
normalizationNowDb: null,
|
|
normalizationTargetLufs: null,
|
|
normalizationEngineLive: 'off',
|
|
};
|
|
}
|