1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/components/screensavermanager.js

134 lines
3.8 KiB
JavaScript
Raw Normal View History

2019-11-23 23:00:44 +03:00
define(['events', 'playbackManager'], function (events, playbackManager) {
function getMinIdleTime() {
// Returns the minimum amount of idle time required before the screen saver can be displayed
//return 3000;
return 180000;
}
var lastFunctionalEvent = 0;
function getFunctionalEventIdleTime() {
return new Date().getTime() - lastFunctionalEvent;
}
events.on(playbackManager, 'playbackstop', function (e, stopInfo) {
var state = stopInfo.state;
if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
lastFunctionalEvent = new Date().getTime();
}
});
function ScreenSaverManager() {
var self = this;
var activeScreenSaver;
function showScreenSaver(screensaver) {
if (activeScreenSaver) {
throw new Error('An existing screensaver is already active.');
}
console.log('Showing screensaver ' + screensaver.name);
screensaver.show();
activeScreenSaver = screensaver;
if (screensaver.hideOnClick !== false) {
window.addEventListener('click', hide, true);
}
if (screensaver.hideOnMouse !== false) {
window.addEventListener('mousemove', hide, true);
}
if (screensaver.hideOnKey !== false) {
window.addEventListener('keydown', hide, true);
}
}
function hide() {
if (activeScreenSaver) {
console.log('Hiding screensaver');
activeScreenSaver.hide();
activeScreenSaver = null;
}
window.removeEventListener('click', hide, true);
window.removeEventListener('mousemove', hide, true);
window.removeEventListener('keydown', hide, true);
}
self.isShowing = function () {
return activeScreenSaver != null;
};
self.show = function () {
var screensavers = Emby.PluginManager.ofType('screensaver');
require(['connectionManager'], function (connectionManager) {
var server = connectionManager.currentLoggedInServer();
show(screensavers, server);
});
};
function show(screensavers, currentServer) {
if (currentServer) {
var loggedInScreenSavers = screensavers.filter(function (screensaver) {
return !screensaver.supportsAnonymous;
});
if (loggedInScreenSavers.length) {
screensavers = loggedInScreenSavers;
}
} else {
screensavers = screensavers.filter(function (screensaver) {
return screensaver.supportsAnonymous;
});
}
// Perform some other filter here to get the configured screensaver
var current = screensavers.length ? screensavers[0] : null;
if (current) {
showScreenSaver(current);
}
}
self.hide = function () {
hide();
};
function onInterval() {
if (self.isShowing()) {
return;
}
require(['inputmanager'], function (inputmanager) {
if (inputmanager.idleTime() < getMinIdleTime()) {
return;
}
if (getFunctionalEventIdleTime < getMinIdleTime()) {
return;
}
if (playbackManager.isPlayingVideo()) {
return;
}
self.show();
});
}
setInterval(onInterval, 10000);
}
return new ScreenSaverManager();
});