Skip to content

Commit 4d35337

Browse files
committed
Split serialized state types into their own file
1 parent 78537ac commit 4d35337

File tree

9 files changed

+77
-63
lines changed

9 files changed

+77
-63
lines changed

js/actionCreators/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import {
88
UNSET_FOCUS,
99
LOAD_SERIALIZED_STATE
1010
} from "../actionTypes";
11-
import { Dispatchable, SerializedStateV1 } from "../types";
11+
import { Dispatchable } from "../types";
1212
import { ensureWindowsAreOnScreen } from "./windows";
13+
import { SerializedStateV1 } from "../serializedStates/v1Types";
1314

1415
export {
1516
toggleDoubleSizeMode,
@@ -118,6 +119,7 @@ export function unsetFocus(): Dispatchable {
118119
}
119120

120121
export function loadSerializedState(
122+
// In the future this type should be the union of all versioned types.
121123
serializedState: SerializedStateV1
122124
): Dispatchable {
123125
return dispatch => {

js/reducers/display.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
LOAD_SERIALIZED_STATE
2828
} from "../actionTypes";
2929
import { DEFAULT_SKIN, VISUALIZER_ORDER } from "../constants";
30+
import { DisplaySerializedStateV1 } from "../serializedStates/v1Types";
3031

3132
export interface DisplayState {
3233
additionalVisualizers: Array<string>;
@@ -49,19 +50,6 @@ export interface DisplayState {
4950
dummyVizData: null; // TODO: Figure out what kind of data this actually is.
5051
}
5152

52-
export interface DisplaySerializedStateV1 {
53-
visualizerStyle: number;
54-
doubled: boolean;
55-
llama: boolean;
56-
marqueeStep: number;
57-
skinImages: SkinImages;
58-
skinCursors: Cursors | null;
59-
skinRegion: SkinRegion;
60-
skinGenLetterWidths: GenLetterWidths | null;
61-
skinColors: string[]; // Theoretically this could be a tuple of a specific length
62-
skinPlaylistStyle: PlaylistStyle | null;
63-
}
64-
6553
const defaultDisplayState = {
6654
doubled: false,
6755
marqueeStep: 0,

js/reducers/equalizer.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,14 @@ import {
77
SET_EQ_OFF,
88
LOAD_SERIALIZED_STATE
99
} from "../actionTypes";
10+
import { EqualizerSerializedStateV1 } from "../serializedStates/v1Types";
1011

1112
export interface EqualizerState {
1213
on: boolean;
1314
auto: boolean;
1415
sliders: Record<Slider, number>;
1516
}
1617

17-
export interface EqualizerSerializedStateV1 {
18-
on: boolean;
19-
auto: boolean;
20-
sliders: Record<Slider, number>;
21-
}
22-
2318
const defaultState = {
2419
on: true,
2520
auto: false,

js/reducers/media.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
LOAD_SERIALIZED_STATE
1818
} from "../actionTypes";
1919
import { TIME_MODE, MEDIA_STATUS } from "../constants";
20+
import { MediaSerializedStateV1 } from "../serializedStates/v1Types";
2021

2122
export interface MediaState {
2223
timeMode: string; // TODO: Convert this to an enum
@@ -32,13 +33,6 @@ export interface MediaState {
3233
status: string | null; // TODO: Convert this to an enum
3334
}
3435

35-
export interface MediaSerializedStateV1 {
36-
volume: number;
37-
balance: number;
38-
shuffle: boolean;
39-
repeat: boolean;
40-
}
41-
4236
const defaultState = {
4337
timeMode: TIME_MODE.ELAPSED,
4438
timeElapsed: 0,

js/reducers/playlist.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ import { shuffle, moveSelected, objectMap, objectFilter } from "../utils";
2828

2929
export interface PlaylistState {
3030
trackOrder: number[];
31-
// https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208
32-
// TODO: Using numbers for keys is kinda annoying. Consider retyping as string
33-
tracks: { [id: number]: PlaylistTrack };
31+
tracks: { [id: string]: PlaylistTrack };
3432
lastSelectedIndex: number | null;
3533
currentTrack: number | null;
3634
}

js/reducers/windows.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
RESET_WINDOW_SIZES
1515
} from "../actionTypes";
1616
import * as Utils from "../utils";
17+
import { WindowsSerializedStateV1 } from "../serializedStates/v1Types";
1718

1819
export interface WindowPosition {
1920
x: number;
@@ -51,19 +52,6 @@ export interface WindowsState {
5152
browserWindowSize: { height: number; width: number };
5253
}
5354

54-
interface SerializedWindow {
55-
size: [number, number];
56-
open: boolean;
57-
hidden: boolean;
58-
shade: boolean;
59-
position: WindowPosition;
60-
}
61-
62-
export interface WindowsSerializedStateV1 {
63-
genWindows: { [windowId: string]: SerializedWindow };
64-
focused: string;
65-
}
66-
6755
const defaultWindowsState: WindowsState = {
6856
focused: WINDOWS.MAIN,
6957
genWindows: {

js/selectors.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {
55
WindowId,
66
WindowInfo,
77
LoadedURLTrack,
8-
SerializedStateV1,
98
WindowPositions
109
} from "./types";
1110
import { createSelector } from "reselect";
@@ -26,6 +25,7 @@ import * as fromEqualizer from "./reducers/equalizer";
2625
import * as fromMedia from "./reducers/media";
2726
import * as fromWindows from "./reducers/windows";
2827
import { generateGraph } from "./resizeUtils";
28+
import { SerializedStateV1 } from "./serializedStates/v1Types";
2929

3030
export const getSliders = (state: AppState) => state.equalizer.sliders;
3131

js/serializedStates/v1Types.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* NOTE: This file must not import any other types
3+
*/
4+
5+
export interface WindowsSerializedStateV1 {
6+
genWindows: {
7+
[windowId: string]: {
8+
size: [number, number];
9+
open: boolean;
10+
hidden: boolean;
11+
shade: boolean;
12+
position: { x: number; y: number };
13+
};
14+
};
15+
focused: string;
16+
}
17+
18+
export interface DisplaySerializedStateV1 {
19+
visualizerStyle: number;
20+
doubled: boolean;
21+
llama: boolean;
22+
marqueeStep: number;
23+
skinImages: { [sprite: string]: string };
24+
skinCursors: { [cursor: string]: string } | null;
25+
skinRegion: { [windowName: string]: string[] };
26+
skinGenLetterWidths: { [letter: string]: number } | null;
27+
skinColors: string[]; // Theoretically this could be a tuple of a specific length
28+
skinPlaylistStyle: { [state: string]: string } | null;
29+
}
30+
31+
export interface EqualizerSerializedStateV1 {
32+
on: boolean;
33+
auto: boolean;
34+
sliders: Record<
35+
| 60
36+
| 170
37+
| 310
38+
| 600
39+
| 1000
40+
| 3000
41+
| 6000
42+
| 12000
43+
| 14000
44+
| 16000
45+
| "preamp",
46+
number
47+
>;
48+
}
49+
50+
export interface MediaSerializedStateV1 {
51+
volume: number;
52+
balance: number;
53+
shuffle: boolean;
54+
repeat: boolean;
55+
}
56+
57+
export interface SerializedStateV1 {
58+
version: 1;
59+
windows: WindowsSerializedStateV1;
60+
media: MediaSerializedStateV1;
61+
display: DisplaySerializedStateV1;
62+
equalizer: EqualizerSerializedStateV1;
63+
}

js/types.ts

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
import { PlaylistState } from "./reducers/playlist";
22
import { SettingsState } from "./reducers/settings";
33
import { UserInputState } from "./reducers/userInput";
4-
import { MediaState, MediaSerializedStateV1 } from "./reducers/media";
5-
import { DisplayState, DisplaySerializedStateV1 } from "./reducers/display";
6-
import {
7-
WindowsState,
8-
WindowsSerializedStateV1,
9-
WindowPositions
10-
} from "./reducers/windows";
11-
import {
12-
EqualizerState,
13-
EqualizerSerializedStateV1
14-
} from "./reducers/equalizer";
4+
import { MediaState } from "./reducers/media";
5+
import { DisplayState } from "./reducers/display";
6+
import { WindowsState, WindowPositions } from "./reducers/windows";
7+
import { EqualizerState } from "./reducers/equalizer";
158
import { NetworkState } from "./reducers/network";
9+
import { SerializedStateV1 } from "./serializedStates/v1Types";
1610

1711
export {
1812
WebampWindow,
@@ -483,11 +477,3 @@ export interface MiddlewareStore {
483477
dispatch: Dispatch;
484478
getState: GetState;
485479
}
486-
487-
export interface SerializedStateV1 {
488-
version: 1;
489-
windows: WindowsSerializedStateV1;
490-
media: MediaSerializedStateV1;
491-
display: DisplaySerializedStateV1;
492-
equalizer: EqualizerSerializedStateV1;
493-
}

0 commit comments

Comments
 (0)