43 lines
1004 B
JavaScript
43 lines
1004 B
JavaScript
const axios = require("axios");
|
|
|
|
class MalojaScrobbler {
|
|
#config = null;
|
|
#counter = 0;
|
|
|
|
constructor(config) {
|
|
this.#config = config;
|
|
|
|
if (!config.name)
|
|
throw new Error("Invalid name for Maloja scrobber.");
|
|
if (!config.url)
|
|
throw new Error(`Invalid url for Maloja scrobbler '${this.name}'.`);
|
|
if (!config.token)
|
|
throw new Error(`Invalid token for Maloja scrobbler '${this.name}'.`)
|
|
}
|
|
|
|
get counter() {
|
|
return this.#counter;
|
|
}
|
|
|
|
get name() {
|
|
return this.#config.name;
|
|
}
|
|
|
|
async scrobble(song, progress, start) {
|
|
const url = new URL(this.#config.url);
|
|
url.pathname += "/apis/mlj_1/newscrobble";
|
|
url.search = "?key=" + this.#config.token;
|
|
await axios.post(url.toString(), {
|
|
title: song.name,
|
|
album: song.album,
|
|
artists: song.artists,
|
|
duration: Math.round(progress / 1000),
|
|
length: Math.round(song.duration / 1000),
|
|
//time: start
|
|
});
|
|
|
|
this.#counter++;
|
|
}
|
|
}
|
|
|
|
module.exports = MalojaScrobbler; |