Enhance DeviceContext and LuxsinAPI to support new PEQ apply functionality; update locale files for English and Chinese to include new UI strings for applying and saving PEQ settings. Refactor AudioPage and EQPage to integrate boot sound management and improve state handling.

This commit is contained in:
yangy
2026-05-18 13:42:29 +08:00
parent b5c0606972
commit ba5f5d074a
8 changed files with 463 additions and 59 deletions
+21 -4
View File
@@ -4,6 +4,7 @@ import {
LuxsinAPI,
MOCK_DEVICE_STATE,
MOCK_PEQ_STATE,
PeqApplyPayload,
PeqChangePayload,
PeqFilter,
PeqState,
@@ -27,6 +28,7 @@ interface DeviceContextType {
updateSetting: (params: Record<string, string | number>) => Promise<void>;
updatePeq: (filters: PeqFilter[]) => Promise<void>;
upgradePeqChange: (payload: PeqChangePayload) => Promise<void>;
upgradePeqApply: (payload: PeqApplyPayload) => Promise<void>;
// Optimistic state updaters
setVolume: (v: number) => void;
setInput: (v: number) => void;
@@ -113,6 +115,7 @@ export function DeviceProvider({ children }: { children: React.ReactNode }) {
const refresh = useCallback(async () => {
if (isDemoMode) {
setDeviceState({ ...MOCK_DEVICE_STATE });
setLastUpdated(new Date());
return;
}
@@ -152,15 +155,29 @@ export function DeviceProvider({ children }: { children: React.ReactNode }) {
setPeqState({ filters });
}, [api, isDemoMode]);
const applyPeqFiltersToState = useCallback((filters: PeqFilter[]) => {
setPeqState((prev) => (prev ? { ...prev, filters } : prev));
}, []);
const upgradePeqChange = useCallback(async (payload: PeqChangePayload) => {
if (isDemoMode) {
setPeqState((prev) => (prev ? { ...prev, filters: payload.peqChange.filters } : prev));
applyPeqFiltersToState(payload.peqChange.filters);
return;
}
if (!api) return;
await api.upgradePeqChange(payload);
setPeqState((prev) => (prev ? { ...prev, filters: payload.peqChange.filters } : prev));
}, [api, isDemoMode]);
applyPeqFiltersToState(payload.peqChange.filters);
}, [api, isDemoMode, applyPeqFiltersToState]);
const upgradePeqApply = useCallback(async (payload: PeqApplyPayload) => {
if (isDemoMode) {
applyPeqFiltersToState(payload.peqApply.filters);
return;
}
if (!api) return;
await api.upgradePeqApply(payload);
applyPeqFiltersToState(payload.peqApply.filters);
}, [api, isDemoMode, applyPeqFiltersToState]);
// Optimistic setters
const setVolume = useCallback((v: number) => {
@@ -212,7 +229,7 @@ export function DeviceProvider({ children }: { children: React.ReactNode }) {
isConnected, isConnecting, isDemoMode, setDemoMode,
deviceState, peqState, lastUpdated, error,
connect, disconnect, refresh, api,
updateSetting, updatePeq, upgradePeqChange,
updateSetting, updatePeq, upgradePeqChange, upgradePeqApply,
setVolume, setInput, setOutput, setBalance,
}}>
{children}