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

134 lines
3.5 KiB
JavaScript
Raw Normal View History

import { Events } from 'jellyfin-apiclient';
2020-08-16 20:24:45 +02:00
import { playbackManager } from '../components/playback/playbackmanager';
import { pluginManager } from '../components/pluginManager';
2022-03-31 16:18:45 -04:00
import inputManager from './inputManager';
import * as userSettings from './settings/userSettings';
import ServerConnections from '../components/ServerConnections';
2021-01-26 15:43:40 -05:00
import './screensavermanager.scss';
function getMinIdleTime() {
// Returns the minimum amount of idle time required before the screen saver can be displayed
//time units used Millisecond
return 180000;
}
let lastFunctionalEvent = 0;
function getFunctionalEventIdleTime() {
return new Date().getTime() - lastFunctionalEvent;
}
2020-09-08 02:05:02 -04:00
Events.on(playbackManager, 'playbackstop', function (e, stopInfo) {
const state = stopInfo.state;
if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
lastFunctionalEvent = new Date().getTime();
2019-11-23 23:00:44 +03:00
}
});
2019-11-23 23:00:44 +03:00
function getScreensaverPlugin(isLoggedIn) {
let option;
try {
option = userSettings.get('screensaver', false);
} catch (err) {
option = isLoggedIn ? 'backdropscreensaver' : 'logoscreensaver';
2019-11-23 23:00:44 +03:00
}
const plugins = pluginManager.ofType('screensaver');
2019-11-23 23:00:44 +03:00
2020-08-07 09:27:11 +01:00
for (const plugin of plugins) {
if (plugin.id === option) {
return plugin;
}
}
return null;
}
2019-11-23 23:00:44 +03:00
function ScreenSaverManager() {
let activeScreenSaver;
2019-11-23 23:00:44 +03:00
function showScreenSaver(screensaver) {
if (activeScreenSaver) {
throw new Error('An existing screensaver is already active.');
}
2019-11-23 23:00:44 +03:00
console.debug('Showing screensaver ' + screensaver.name);
2019-11-23 23:00:44 +03:00
document.body.classList.add('screensaver-noScroll');
screensaver.show();
activeScreenSaver = screensaver;
2019-11-23 23:00:44 +03:00
if (screensaver.hideOnClick !== false) {
window.addEventListener('click', hide, true);
2019-11-23 23:00:44 +03:00
}
if (screensaver.hideOnMouse !== false) {
window.addEventListener('mousemove', hide, true);
2019-11-23 23:00:44 +03:00
}
if (screensaver.hideOnKey !== false) {
window.addEventListener('keydown', hide, true);
}
}
2019-11-23 23:00:44 +03:00
function hide() {
if (activeScreenSaver) {
console.debug('Hiding screensaver');
activeScreenSaver.hide().then(() => {
document.body.classList.remove('screensaver-noScroll');
});
activeScreenSaver = null;
}
2019-11-23 23:00:44 +03:00
window.removeEventListener('click', hide, true);
window.removeEventListener('mousemove', hide, true);
window.removeEventListener('keydown', hide, true);
}
2019-11-27 20:39:45 +03:00
this.isShowing = () => {
return activeScreenSaver != null;
};
2019-11-27 20:39:45 +03:00
this.show = function () {
let isLoggedIn;
const apiClient = ServerConnections.currentApiClient();
2019-11-23 23:00:44 +03:00
if (apiClient && apiClient.isLoggedIn()) {
isLoggedIn = true;
}
2019-11-23 23:00:44 +03:00
const screensaver = getScreensaverPlugin(isLoggedIn);
2019-11-23 23:00:44 +03:00
if (screensaver) {
showScreenSaver(screensaver);
}
};
2019-11-23 23:00:44 +03:00
this.hide = function () {
hide();
};
2019-11-23 23:00:44 +03:00
const onInterval = () => {
if (this.isShowing()) {
return;
}
2019-11-23 23:00:44 +03:00
if (inputManager.idleTime() < getMinIdleTime()) {
return;
}
2019-11-23 23:00:44 +03:00
if (getFunctionalEventIdleTime < getMinIdleTime()) {
return;
}
2019-11-23 23:00:44 +03:00
if (playbackManager.isPlayingVideo()) {
return;
2019-11-23 23:00:44 +03:00
}
this.show();
};
2019-11-23 23:00:44 +03:00
setInterval(onInterval, 10000);
}
export default new ScreenSaverManager;