Allow passing in normal milkdrop preset url

This commit is contained in:
jberg 2018-09-04 16:04:16 -07:00 committed by Jordan Eldredge
parent 9eedbe6609
commit 2a5747b84c
2 changed files with 32 additions and 2 deletions

View file

@ -32,7 +32,13 @@ class Milkdrop extends React.Component {
this.visualizer.connectAudio(this.props.analyser);
this.presetCycle = true;
if (this.props.initialPreset) {
this.visualizer.loadPreset(this.props.initialPreset, 0);
const presetIndices = this.props.presets.addPresets(
this.props.initialPreset
);
this.selectPreset(
await this.props.presets.selectIndex(presetIndices[0]),
0
);
} else {
this.selectPreset(this.props.presets.getCurrent(), 0);
}

View file

@ -150,11 +150,20 @@ class PresetsLoader extends React.Component {
}
}
function presetNameFromURL(url) {
const urlParts = url.split("/");
const lastPart = urlParts[urlParts.length - 1];
const presetName = lastPart.substring(0, lastPart.length - 5); // remove .milk or .json
return decodeURIComponent(presetName);
}
async function loadInitialPreset() {
let presetUrl = null;
let milkdropPresetUrl = null;
if ("URLSearchParams" in window) {
const params = new URLSearchParams(location.search);
presetUrl = params.get("butterchurnPresetUrl");
milkdropPresetUrl = params.get("milkdropPresetUrl");
}
if (presetUrl) {
@ -164,12 +173,27 @@ async function loadInitialPreset() {
throw new Error(response.statusText);
}
const responseBody = await response.json();
return responseBody;
const presetName = presetNameFromURL(presetUrl);
return { [presetName]: responseBody };
} catch (e) {
console.error(e);
alert(`Failed to load MilkDrop preset from ${presetUrl}`);
return null;
}
} else if (milkdropPresetUrl) {
try {
const response = await fetch(milkdropPresetUrl);
if (!response.ok) {
throw new Error(response.statusText);
}
const fileBlob = await response.blob();
const presetName = presetNameFromURL(milkdropPresetUrl);
return { [presetName]: { file: fileBlob } };
} catch (e) {
console.error(e);
alert(`Failed to load MilkDrop preset from ${milkdropPresetUrl}`);
return null;
}
}
return null;