79 lines
2.3 KiB
JavaScript
79 lines
2.3 KiB
JavaScript
(function () {
|
|
var hasAccess = false;
|
|
|
|
function getAuthToken() {
|
|
try {
|
|
var creds = JSON.parse(localStorage.getItem('jellyfin_credentials'));
|
|
var server = creds && creds.Servers && creds.Servers[0];
|
|
return (server && server.AccessToken) || null;
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function checkAccess() {
|
|
var token = getAuthToken();
|
|
if (!token) {
|
|
return Promise.resolve(false);
|
|
}
|
|
|
|
return fetch('/JellyLms/RemoteControl/Access', { headers: { 'X-Emby-Token': token } })
|
|
.then(function (resp) { return resp.ok; })
|
|
.catch(function () { return false; });
|
|
}
|
|
|
|
function addButton(headerRight) {
|
|
if (headerRight.querySelector('.headerLmsRemoteButton')) {
|
|
return;
|
|
}
|
|
|
|
var btn = document.createElement('button');
|
|
btn.setAttribute('is', 'paper-icon-button-light');
|
|
btn.setAttribute('type', 'button');
|
|
btn.className = 'headerLmsRemoteButton headerButton headerButtonRight paper-icon-button-light';
|
|
btn.title = 'Multi-room Remote';
|
|
btn.innerHTML = '<span class="material-icons speaker_group" aria-hidden="true"></span>';
|
|
btn.addEventListener('click', function () {
|
|
window.location.href = '/JellyLms/RemoteControl';
|
|
});
|
|
|
|
var castButton = headerRight.querySelector('.headerCastButton');
|
|
if (castButton) {
|
|
headerRight.insertBefore(btn, castButton);
|
|
} else {
|
|
headerRight.appendChild(btn);
|
|
}
|
|
}
|
|
|
|
function tryInject() {
|
|
if (!hasAccess) {
|
|
return;
|
|
}
|
|
|
|
var headerRight = document.querySelector('.headerRight');
|
|
if (headerRight) {
|
|
addButton(headerRight);
|
|
}
|
|
}
|
|
|
|
function init() {
|
|
checkAccess().then(function (ok) {
|
|
hasAccess = ok;
|
|
if (!ok) {
|
|
return;
|
|
}
|
|
|
|
tryInject();
|
|
|
|
var observer = new MutationObserver(tryInject);
|
|
observer.observe(document.body, { childList: true, subtree: true });
|
|
});
|
|
}
|
|
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', init);
|
|
} else {
|
|
init();
|
|
}
|
|
})();
|