diff --git a/classes/Api.js b/classes/Api.js index 559bacd..f55127d 100644 --- a/classes/Api.js +++ b/classes/Api.js @@ -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 + } + }); + } 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 () => { + 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; }