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

135 lines
3.7 KiB
JavaScript
Raw Normal View History

define(["events", "playbackManager", "pluginManager", "inputManager", "connectionManager", "userSettings"], function (events, playbackManager, pluginManager, inputManager, connectionManager, userSettings) {
"use strict";
2019-11-23 23:00:44 +03:00
function getMinIdleTime() {
// Returns the minimum amount of idle time required before the screen saver can be displayed
//time units used Millisecond
2019-11-23 23:00:44 +03:00
return 180000;
}
var lastFunctionalEvent = 0;
2019-11-23 23:00:44 +03:00
function getFunctionalEventIdleTime() {
return new Date().getTime() - lastFunctionalEvent;
}
2019-11-23 23:25:10 +03:00
events.on(playbackManager, "playbackstop", function (e, stopInfo) {
2019-11-23 23:00:44 +03:00
var state = stopInfo.state;
2019-11-23 23:25:10 +03:00
if (state.NowPlayingItem && state.NowPlayingItem.MediaType == "Video") {
2019-11-23 23:00:44 +03:00
lastFunctionalEvent = new Date().getTime();
}
});
var isLoggedIn;
var defaultOption = isLoggedIn ? "backdropscreensaver" : "logoscreensaver";
function getScreensaverPlugin() {
var apiClient = connectionManager.currentApiClient();
if (apiClient && apiClient.isLoggedIn()) {
isLoggedIn = true;
}
var option;
try {
option = userSettings.get("screensaver", false);
} catch (err) {
option = null;
}
if (option === "none" || defaultOption === "none") {
return null;
}
var plugin = pluginManager.ofType("screensaver").filter(function (i) {
return i.id === option;
})[0];
return plugin = plugin || pluginManager.ofType("screensaver").filter(function (i) {
return i.id === defaultOption;
})[0];
}
2019-11-23 23:00:44 +03:00
function ScreenSaverManager() {
var self = this;
var activeScreenSaver;
function showScreenSaver(screensaver) {
if (activeScreenSaver) {
2019-11-23 23:25:10 +03:00
throw new Error("An existing screensaver is already active.");
2019-11-23 23:00:44 +03:00
}
2019-11-23 23:25:10 +03:00
console.log("Showing screensaver " + screensaver.name);
2019-11-23 23:00:44 +03:00
screensaver.show();
activeScreenSaver = screensaver;
if (screensaver.hideOnClick !== false) {
2019-11-23 23:25:10 +03:00
window.addEventListener("click", hide, true);
2019-11-23 23:00:44 +03:00
}
if (screensaver.hideOnMouse !== false) {
2019-11-23 23:25:10 +03:00
window.addEventListener("mousemove", hide, true);
2019-11-23 23:00:44 +03:00
}
if (screensaver.hideOnKey !== false) {
2019-11-23 23:25:10 +03:00
window.addEventListener("keydown", hide, true);
2019-11-23 23:00:44 +03:00
}
}
function hide() {
if (activeScreenSaver) {
2019-11-23 23:25:10 +03:00
console.log("Hiding screensaver");
2019-11-23 23:00:44 +03:00
activeScreenSaver.hide();
activeScreenSaver = null;
}
2019-11-23 23:25:10 +03:00
window.removeEventListener("click", hide, true);
window.removeEventListener("mousemove", hide, true);
window.removeEventListener("keydown", hide, true);
2019-11-23 23:00:44 +03:00
}
self.isShowing = function () {
return activeScreenSaver != null;
};
self.show = function () {
var screensaver = getScreensaverPlugin(isLoggedIn);
2019-11-23 23:00:44 +03:00
if (screensaver) {
showScreenSaver(screensaver);
2019-11-23 23:00:44 +03:00
}
};
2019-11-23 23:00:44 +03:00
self.hide = function () {
hide();
};
function onInterval() {
if (self.isShowing()) {
return;
}
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
self.show();
2019-11-23 23:00:44 +03:00
}
setInterval(onInterval, 10000);
}
return new ScreenSaverManager();
2019-11-23 23:25:10 +03:00
});