define(["events", "playbackManager", "pluginManager"], function (events, playbackManager, pluginManager) { 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 = pluginManager.ofType("screensaver"); require(["connectionManager"], function (connectionManager) { var server = connectionManager.currentApiClient(); 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(); });