mirror of
https://github.com/captbaritone/webamp.git
synced 2026-07-20 01:54:01 +00:00
Persist window states (exept position)
This commit is contained in:
parent
94e105b104
commit
690f650e4c
3 changed files with 54 additions and 13 deletions
|
|
@ -1,4 +1,4 @@
|
|||
import { WebampWindow, WindowPositions, Action } from "../types";
|
||||
import { WebampWindow, WindowPositions, Action, WindowId } from "../types";
|
||||
import { WINDOWS } from "../constants";
|
||||
import {
|
||||
SET_FOCUSED_WINDOW,
|
||||
|
|
@ -8,16 +8,29 @@ import {
|
|||
ADD_GEN_WINDOW,
|
||||
UPDATE_WINDOW_POSITIONS,
|
||||
WINDOW_SIZE_CHANGED,
|
||||
TOGGLE_WINDOW_SHADE_MODE
|
||||
TOGGLE_WINDOW_SHADE_MODE,
|
||||
LOAD_SERIALIZED_STATE
|
||||
} from "../actionTypes";
|
||||
import { objectMap } from "../utils";
|
||||
|
||||
export interface WindowState {
|
||||
export interface WindowsState {
|
||||
focused: string;
|
||||
genWindows: { [name: string]: WebampWindow };
|
||||
positions: WindowPositions;
|
||||
}
|
||||
|
||||
const defaultWindowsState: WindowState = {
|
||||
interface SerializedWindow {
|
||||
size: [number, number];
|
||||
open: boolean;
|
||||
hidden: boolean;
|
||||
shade: boolean;
|
||||
}
|
||||
|
||||
export interface WindowsSerializedStateV1 {
|
||||
genWindows: { [windowId: string]: SerializedWindow };
|
||||
}
|
||||
|
||||
const defaultWindowsState: WindowsState = {
|
||||
focused: WINDOWS.MAIN,
|
||||
genWindows: {
|
||||
// TODO: Remove static capabilites and derive them from ids/generic
|
||||
|
|
@ -62,9 +75,9 @@ const defaultWindowsState: WindowState = {
|
|||
};
|
||||
|
||||
const windows = (
|
||||
state: WindowState = defaultWindowsState,
|
||||
state: WindowsState = defaultWindowsState,
|
||||
action: Action
|
||||
): WindowState => {
|
||||
): WindowsState => {
|
||||
switch (action.type) {
|
||||
case SET_FOCUSED_WINDOW:
|
||||
return { ...state, focused: action.window };
|
||||
|
|
@ -162,9 +175,38 @@ const windows = (
|
|||
...state,
|
||||
positions: { ...state.positions, ...action.positions }
|
||||
};
|
||||
case LOAD_SERIALIZED_STATE: {
|
||||
const serializedWindow = action.serializedState.windows.genWindows;
|
||||
return {
|
||||
...state,
|
||||
genWindows: objectMap(state.genWindows, (w, windowId) => {
|
||||
const serializedW = serializedWindow[windowId];
|
||||
if (serializedW == null || w.generic) {
|
||||
return w;
|
||||
}
|
||||
return { ...w, ...serializedW };
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
};
|
||||
|
||||
export function getSerializedState(
|
||||
state: WindowsState
|
||||
): WindowsSerializedStateV1 {
|
||||
return {
|
||||
genWindows: objectMap(state.genWindows, w => {
|
||||
return {
|
||||
size: w.size,
|
||||
open: w.open,
|
||||
hidden: w.hidden,
|
||||
shade: w.shade || false
|
||||
};
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
export default windows;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import * as fromPlaylist from "./reducers/playlist";
|
|||
import * as fromDisplay from "./reducers/display";
|
||||
import * as fromEqualizer from "./reducers/equalizer";
|
||||
import * as fromMedia from "./reducers/media";
|
||||
import * as fromWindows from "./reducers/windows";
|
||||
import { generateGraph } from "./resizeUtils";
|
||||
|
||||
export const getSliders = (state: AppState) => state.equalizer.sliders;
|
||||
|
|
@ -411,7 +412,8 @@ export function getSerlializedState(state: AppState): SerializedStateV1 {
|
|||
version: 1,
|
||||
media: fromMedia.getSerializedState(state.media),
|
||||
equalizer: fromEqualizer.getSerializedState(state.equalizer),
|
||||
display: fromDisplay.getSerializedState(state.display)
|
||||
display: fromDisplay.getSerializedState(state.display),
|
||||
windows: fromWindows.getSerializedState(state.windows)
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import { SettingsState } from "./reducers/settings";
|
|||
import { UserInputState } from "./reducers/userInput";
|
||||
import { MediaState, MediaSerializedStateV1 } from "./reducers/media";
|
||||
import { DisplayState, DisplaySerializedStateV1 } from "./reducers/display";
|
||||
import { WindowState } from "./reducers/windows";
|
||||
import { WindowsState, WindowsSerializedStateV1 } from "./reducers/windows";
|
||||
import {
|
||||
EqualizerState,
|
||||
EqualizerSerializedStateV1
|
||||
|
|
@ -464,7 +464,7 @@ export interface PlaylistTrack {
|
|||
|
||||
export interface AppState {
|
||||
userInput: UserInputState;
|
||||
windows: WindowState;
|
||||
windows: WindowsState;
|
||||
display: DisplayState;
|
||||
settings: SettingsState;
|
||||
equalizer: EqualizerState;
|
||||
|
|
@ -501,10 +501,7 @@ export interface MiddlewareStore {
|
|||
|
||||
export interface SerializedStateV1 {
|
||||
version: 1;
|
||||
/*
|
||||
windows: WindowSerializedState;
|
||||
settings: SettingsSerializedState;
|
||||
*/
|
||||
windows: WindowsSerializedStateV1;
|
||||
media: MediaSerializedStateV1;
|
||||
display: DisplaySerializedStateV1;
|
||||
equalizer: EqualizerSerializedStateV1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue