This commit is contained in:
Ondrej Zara 2019-03-19 22:10:02 +01:00
parent 22879cfb68
commit 106bcb3382
2 changed files with 58 additions and 0 deletions

View file

@ -23,6 +23,7 @@ class Command extends EventEmitter {
_done(data) {
this._mpd.off("data", this._dataListener);
this._buffer = null;
this.emit("done", data);
}
@ -60,7 +61,59 @@ class Welcome extends Command {
}
}
class AlbumArt extends Command {
constructor(mpd, command) {
super(mpd);
this._size = 0;
this._binary = 0;
this._data = null;
this._lines = [];
log("--> mpd", command);
mpd.write(command + "\n");
}
_processBuffer() {
if (!this._size) {
let line = this._getLine();
if (!line) { return; }
this._lines.push(line);
this._size = Number(line.split(": ").pop());
log("size", this._size);
}
if (!this._binary) {
let line = this._getLine();
if (!line) { return; }
this._lines.push(line);
this._binary = Number(line.split(": ").pop());
log("binary", this._binary);
}
if (!this._data) {
// binary data has this._binary bytes + 1 newline
if (this._buffer.length >= this._binary+1) {
this._data = this._buffer.slice(0, this._binary);
this._buffer = this._buffer.slice(this._binary+1);
this._lines.push([...this._data]);
log("data", this._data.length);
} else { return; }
}
let line = this._getLine();
if (!line) { return; }
this._lines.push(line);
this._done(this._lines);
}
}
exports.create = function(mpd, command) {
if (command.startsWith("albumart")) {
return new AlbumArt(mpd, command);
} else {
return new Normal(mpd, command);
}
return new Normal(mpd, command);
}

View file

@ -54,6 +54,11 @@ function initConnection(request) {
ws.close();
});
mpd.on("error", () => {
log("mpd connection error");
ws.close();
});
waitForCommand(commands.welcome(mpd));
}