albumart
This commit is contained in:
parent
22879cfb68
commit
106bcb3382
2 changed files with 58 additions and 0 deletions
53
commands.js
53
commands.js
|
@ -23,6 +23,7 @@ class Command extends EventEmitter {
|
||||||
|
|
||||||
_done(data) {
|
_done(data) {
|
||||||
this._mpd.off("data", this._dataListener);
|
this._mpd.off("data", this._dataListener);
|
||||||
|
this._buffer = null;
|
||||||
this.emit("done", data);
|
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) {
|
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);
|
return new Normal(mpd, command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
5
index.js
5
index.js
|
@ -54,6 +54,11 @@ function initConnection(request) {
|
||||||
ws.close();
|
ws.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mpd.on("error", () => {
|
||||||
|
log("mpd connection error");
|
||||||
|
ws.close();
|
||||||
|
});
|
||||||
|
|
||||||
waitForCommand(commands.welcome(mpd));
|
waitForCommand(commands.welcome(mpd));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue