added argument parser and playback of a track specified by id

This commit is contained in:
Daniel Sommer 2022-06-01 17:02:53 +02:00
parent e707b12be8
commit 027da080da

View file

@ -16,10 +16,28 @@ class Api {
if (fn === undefined) {
return this.#createRequestResult(501);
}
await fn();
await fn(await this.#getRequestArguments(request));
return this.#createRequestResult();
}
#getRequestArguments(request) {
if (request === undefined) {
return;
}
return new Promise((resolve, reject) => {
let args = '';
request.on('data', (data) => {
args += data;
});
request.on('end', () => {
if (args == undefined || args.length == 0) {
return resolve();
}
return resolve(new URLSearchParams(args));
});
});
}
#createRequestResult(code, message) {
if (code === undefined) {
code = 200;
@ -34,20 +52,37 @@ class Api {
}
#setup() {
this.#registerEndpoint(constants.API_PLAY, constants.REQUEST_METHOD_POST, async () => {
this.#registerEndpoint(constants.API_PLAY, constants.REQUEST_METHOD_POST, async (args) => {
const id = args.get('id');
if (id === undefined) {
return;
}
if (global.audioserver !== undefined) {
await global.audioserver.destroy();
}
global.audioserver = new AudioServer('/home/velvettear/mounts/kingston/public/YOU_SUFFER.mp3');
let track;
try {
track = await database.models.Track.findOne({
where: {
id: id
}
});
this.#registerEndpoint(constants.API_RESUME, constants.REQUEST_METHOD_POST, async () => {
} catch (err) {
logger.error('error finding track \'' + id + '\' > ' + err);
}
if (track === undefined) {
return;
}
global.audioserver = new AudioServer(track.file);
});
this.#registerEndpoint(constants.API_RESUME, constants.REQUEST_METHOD_POST, async (args) => {
if (global.audioserver === undefined) {
return;
}
await global.audioserver.destroy();
global.audioserver = new AudioServer('/home/velvettear/mounts/kingston/public/YOU_SUFFER.mp3', global.audioserver.progress);
});
this.#registerEndpoint(constants.API_PAUSE, constants.REQUEST_METHOD_POST, async () => {
this.#registerEndpoint(constants.API_PAUSE, constants.REQUEST_METHOD_POST, async (args) => {
if (global.audioserver === undefined) {
return;
}