Add butterchurnPresetUrl param (#625)

* Add butterchurnPresetUrl param

* handle failed preset load, dont pass url around
This commit is contained in:
jberg 2018-07-28 22:29:58 -07:00 committed by Jordan Eldredge
parent 2f0d20bbc8
commit 0f31d07400
2 changed files with 38 additions and 7 deletions

View file

@ -31,7 +31,11 @@ export default class Milkdrop extends React.Component {
);
this.visualizer.connectAudio(this.props.analyser);
this.presetCycle = true;
this.selectPreset(this.props.presets.getCurrent(), 0);
if (this.props.initialPreset) {
this.visualizer.loadPreset(this.props.initialPreset, 0);
} else {
this.selectPreset(this.props.presets.getCurrent(), 0);
}
// Kick off the animation loop
const loop = () => {

View file

@ -21,6 +21,7 @@ class PresetsLoader extends React.Component {
super();
this.state = {
presets: null,
initialPreset: null,
butterchurn: null,
isFullscreen: false,
desktop: false
@ -35,14 +36,14 @@ class PresetsLoader extends React.Component {
}
async componentDidMount() {
const {
butterchurn,
presetKeys,
minimalPresets
} = await loadInitialDependencies();
const [
{ butterchurn, presetKeys, minimalPresets },
initialPreset
] = await Promise.all([loadInitialDependencies(), loadInitialPreset()]);
this.setState({
butterchurn,
initialPreset,
presets: new Presets({
keys: presetKeys,
initialPresets: minimalPresets,
@ -81,7 +82,7 @@ class PresetsLoader extends React.Component {
}
_renderMilkdrop(size) {
const { butterchurn, presets } = this.state;
const { butterchurn, presets, initialPreset } = this.state;
const loaded = butterchurn != null && presets != null;
const { width, height } = this.state.isFullscreen
? { width: screen.width, height: screen.height }
@ -98,6 +99,7 @@ class PresetsLoader extends React.Component {
height={height}
isFullscreen={this.state.isFullscreen}
presets={presets}
initialPreset={initialPreset}
butterchurn={butterchurn}
/>
)}
@ -151,6 +153,31 @@ class PresetsLoader extends React.Component {
}
}
async function loadInitialPreset() {
let presetUrl = null;
if ("URLSearchParams" in window) {
const params = new URLSearchParams(location.search);
presetUrl = params.get("butterchurnPresetUrl");
}
if (presetUrl) {
try {
const response = await fetch(presetUrl);
if (!response.ok) {
throw new Error(response.statusText);
}
const responseBody = await response.json();
return responseBody;
} catch (e) {
console.error(e);
alert(`Failed to load MilkDrop preset from ${presetUrl}`);
return null;
}
}
return null;
}
async function loadInitialDependencies() {
return new Promise((resolve, reject) => {
require.ensure(