68 lines
1.7 KiB
JavaScript
68 lines
1.7 KiB
JavaScript
#include utility.js
|
|
#include np/client.js
|
|
#include np/element.jsx
|
|
|
|
const MakaiNowPlayingInit = siteHeader => {
|
|
const target = $q('.js-np-target');
|
|
if(!(target instanceof Element))
|
|
return;
|
|
|
|
const userName = target.dataset.username;
|
|
if(typeof userName !== 'string')
|
|
return;
|
|
|
|
const client = new MakaiNowPlaying(userName);
|
|
const element = new MakaiNowPlayingElement;
|
|
$rp(target, element.element);
|
|
|
|
const update = () => {
|
|
client.fetch().then(result => {
|
|
if(!result.changed)
|
|
return;
|
|
|
|
element.hidden = !result.now_playing;
|
|
element.coverUrl = result.cover;
|
|
element.titleText = result.name;
|
|
element.titleUrl = result.url;
|
|
element.artistText = result.artist.name;
|
|
element.artistUrl = result.artist.url;
|
|
|
|
if(result.now_playing && !element.isDefaultCover)
|
|
siteHeader.setBackgroundImage(element.coverUrl);
|
|
else if(!result.first)
|
|
siteHeader.images.random().then(image => {
|
|
siteHeader.setBackgroundImage(image);
|
|
});
|
|
});
|
|
};
|
|
|
|
let interval;
|
|
let currentRate;
|
|
|
|
const stop = () => {
|
|
if(interval !== undefined)
|
|
clearInterval(interval);
|
|
interval = undefined;
|
|
};
|
|
|
|
const start = rate => {
|
|
if(typeof rate !== 'number')
|
|
rate = 30000;
|
|
|
|
if(interval !== undefined || currentRate !== rate)
|
|
stop();
|
|
|
|
update();
|
|
setInterval(update, rate);
|
|
};
|
|
|
|
start();
|
|
|
|
return {
|
|
get client() { return client; },
|
|
get element() { return element; },
|
|
|
|
start: start,
|
|
stop: stop,
|
|
};
|
|
};
|