webamp/js/actionCreators/index.ts
2019-05-01 22:29:10 -07:00

201 lines
4.4 KiB
TypeScript

import {
CLOSE_WINAMP,
OPEN_WINAMP,
STOP,
TOGGLE_VISUALIZER_STYLE,
CLOSE_REQUESTED,
MINIMIZE_WINAMP,
SET_FOCUS,
UNSET_FOCUS,
LOAD_SERIALIZED_STATE,
LOAD_DEFAULT_SKIN,
SET_MILKDROP_DESKTOP,
SET_MILKDROP_FULLSCREEN,
TOGGLE_PRESET_OVERLAY,
} from "../actionTypes";
import { WINDOWS } from "../constants";
import { Thunk, Action } from "../types";
import { SerializedStateV1 } from "../serializedStates/v1Types";
import * as Selectors from "../selectors";
import {
ensureWindowsAreOnScreen,
showWindow,
hideWindow,
setFocusedWindow,
} from "./windows";
export {
toggleDoubleSizeMode,
toggleEqualizerShadeMode,
togglePlaylistShadeMode,
closeWindow,
hideWindow,
showWindow,
setWindowSize,
toggleWindow,
updateWindowPositions,
toggleMainWindowShadeMode,
centerWindowsInContainer,
centerWindowsInView,
resetWindowSizes,
browserWindowSizeChanged,
ensureWindowsAreOnScreen,
stackWindows,
toggleLlamaMode,
setFocusedWindow,
} from "./windows";
export {
play,
pause,
stop,
nextN,
next,
previous,
seekToTime,
seekForward,
seekBackward,
setVolume,
playTrack,
adjustVolume,
scrollVolume,
setBalance,
toggleRepeat,
toggleShuffle,
toggleTimeMode,
} from "./media";
export {
setEqBand,
setEqToMax,
setEqToMid,
setEqToMin,
setPreamp,
toggleEq,
toggleEqAuto,
} from "./equalizer";
export {
addTracksFromReferences,
loadFilesFromReferences,
setSkinFromUrl,
openEqfFileDialog,
openMediaFileDialog,
openSkinFileDialog,
fetchMediaDuration,
loadMedia,
loadMediaFiles,
loadMediaFile,
fetchMediaTags,
setEqFromFileReference,
downloadPreset,
setEqFromObject,
downloadHtmlPlaylist,
} from "./files";
export {
cropPlaylist,
removeSelectedTracks,
removeAllTracks,
reverseList,
randomizeList,
sortListByTitle,
setPlaylistScrollPosition,
scrollNTracks,
scrollPlaylistByDelta,
scrollUpFourTracks,
scrollDownFourTracks,
dragSelected,
} from "./playlist";
export {
initializePresets,
requestPresetAtIndex,
selectRandomPreset,
selectNextPreset,
selectPreviousPreset,
appendPresetFileList,
handlePresetDrop,
loadPresets,
toggleRandomizePresets,
togglePresetCycling,
scheduleMilkdropMessage,
} from "./milkdrop";
export function close(): Thunk {
return dispatch => {
// TODO: This could probably be improved by adding a "PREVENT_CLOSE" action
// or something, but this works okay for now.
let defaultPrevented = false;
const cancel = () => {
defaultPrevented = true;
};
dispatch({ type: CLOSE_REQUESTED, cancel });
if (!defaultPrevented) {
dispatch({ type: STOP });
dispatch({ type: CLOSE_WINAMP });
}
};
}
export function open(): Action {
return { type: OPEN_WINAMP };
}
export function toggleVisualizerStyle(): Action {
return { type: TOGGLE_VISUALIZER_STYLE };
}
export function minimize(): Action {
return { type: MINIMIZE_WINAMP };
}
export function setFocus(input: string): Action {
return { type: SET_FOCUS, input };
}
export function unsetFocus(): Action {
return { type: UNSET_FOCUS };
}
export function loadSerializedState(
// In the future this type should be the union of all versioned types.
serializedState: SerializedStateV1
): Thunk {
return dispatch => {
dispatch({ type: LOAD_SERIALIZED_STATE, serializedState });
dispatch(ensureWindowsAreOnScreen());
};
}
export function loadDefaultSkin(): Action {
return { type: LOAD_DEFAULT_SKIN };
}
export function toggleMilkdropDesktop(): Thunk {
return (dispatch, getState) => {
if (Selectors.getMilkdropDesktopEnabled(getState())) {
dispatch(showWindow(WINDOWS.MILKDROP));
dispatch({ type: SET_MILKDROP_DESKTOP, enabled: false });
} else {
dispatch(hideWindow(WINDOWS.MILKDROP));
dispatch({ type: SET_MILKDROP_DESKTOP, enabled: true });
}
};
}
export function setMilkdropFullscreen(enabled: boolean): Action {
return { type: SET_MILKDROP_FULLSCREEN, enabled };
}
export function toggleMilkdropFullscreen(): Thunk {
return (dispatch, getState) => {
dispatch(
setMilkdropFullscreen(!Selectors.getMilkdropFullscreenEnabled(getState()))
);
};
}
export function togglePresetOverlay(): Thunk {
return (dispatch, getState) => {
if (Selectors.getPresetOverlayOpen(getState())) {
dispatch(setFocusedWindow(WINDOWS.MILKDROP));
}
dispatch({ type: TOGGLE_PRESET_OVERLAY });
};
}