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:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user