From 3f913bcd291252ca8f1fff565e100683606e0a55 Mon Sep 17 00:00:00 2001 From: grafixeyehero Date: Sat, 23 Nov 2019 23:00:44 +0300 Subject: [PATCH] initial add screen sever --- src/components/backdropscreensaver/plugin.js | 55 ++++++ src/components/logoscreensaver/logowhite.png | Bin 0 -> 39729 bytes src/components/logoscreensaver/plugin.js | 191 +++++++++++++++++++ src/components/logoscreensaver/style.css | 18 ++ src/components/screensavermanager.js | 134 +++++++++++++ 5 files changed, 398 insertions(+) create mode 100644 src/components/backdropscreensaver/plugin.js create mode 100644 src/components/logoscreensaver/logowhite.png create mode 100644 src/components/logoscreensaver/plugin.js create mode 100644 src/components/logoscreensaver/style.css create mode 100644 src/components/screensavermanager.js diff --git a/src/components/backdropscreensaver/plugin.js b/src/components/backdropscreensaver/plugin.js new file mode 100644 index 0000000000..0c4883d61f --- /dev/null +++ b/src/components/backdropscreensaver/plugin.js @@ -0,0 +1,55 @@ +define([], function () { + + return function () { + + var self = this; + + self.name = 'Backdrop ScreenSaver'; + self.type = 'screensaver'; + self.id = 'backdropscreensaver'; + self.supportsAnonymous = false; + + var currentSlideshow; + + self.show = function () { + + var query = { + ImageTypes: "Backdrop", + EnableImageTypes: "Backdrop", + IncludeItemTypes: "Movie,Series,MusicArtist,Game", + SortBy: "Random", + Recursive: true, + Fields: "Taglines", + ImageTypeLimit: 1, + StartIndex: 0, + Limit: 200 + }; + + Emby.Models.items(query).then(function (result) { + + if (result.Items.length) { + + require(['slideshow'], function (slideshow) { + + var newSlideShow = new slideshow({ + showTitle: true, + cover: true, + items: result.Items + }); + + newSlideShow.show(); + currentSlideshow = newSlideShow; + }); + } + }); + }; + + self.hide = function () { + + if (currentSlideshow) { + currentSlideshow.hide(); + currentSlideshow = null; + } + }; + } +}); \ No newline at end of file diff --git a/src/components/logoscreensaver/logowhite.png b/src/components/logoscreensaver/logowhite.png new file mode 100644 index 0000000000000000000000000000000000000000..560d910d74f696d9f4a5a8ff2e08aa32cbd2fa2e GIT binary patch literal 39729 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 OWvHjCpUXO@geCwqo=^S& literal 0 HcmV?d00001 diff --git a/src/components/logoscreensaver/plugin.js b/src/components/logoscreensaver/plugin.js new file mode 100644 index 0000000000..77df0218a0 --- /dev/null +++ b/src/components/logoscreensaver/plugin.js @@ -0,0 +1,191 @@ +define(['pluginManager'], function (pluginManager) { + + return function () { + + var self = this; + + self.name = 'Logo ScreenSaver'; + self.type = 'screensaver'; + self.id = 'logoscreensaver'; + self.supportsAnonymous = true; + + var interval; + + function animate() { + + var animations = [ + + bounceInLeft, + bounceInRight, + swing, + tada, + wobble, + rotateIn, + rotateOut + ]; + + var elem = document.querySelector('.logoScreenSaverImage'); + + if (elem && elem.animate) { + var random = getRandomInt(0, animations.length - 1); + + animations[random](elem, 1); + } + } + + function getRandomInt(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; + } + + function bounceInLeft(elem, iterations) { + var keyframes = [ + { transform: 'translate3d(-3000px, 0, 0)', opacity: '0', offset: 0 }, + { transform: 'translate3d(25px, 0, 0)', opacity: '1', offset: 0.6 }, + { transform: 'translate3d(-100px, 0, 0)', offset: 0.75 }, + { transform: 'translate3d(5px, 0, 0)', offset: 0.9 }, + { transform: 'none', opacity: '1', offset: 1 }]; + var timing = { duration: 900, iterations: iterations, easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)' }; + return elem.animate(keyframes, timing); + } + + function bounceInRight(elem, iterations) { + var keyframes = [ + { transform: 'translate3d(3000px, 0, 0)', opacity: '0', offset: 0 }, + { transform: 'translate3d(-25px, 0, 0)', opacity: '1', offset: 0.6 }, + { transform: 'translate3d(100px, 0, 0)', offset: 0.75 }, + { transform: 'translate3d(-5px, 0, 0)', offset: 0.9 }, + { transform: 'none', opacity: '1', offset: 1 }]; + var timing = { duration: 900, iterations: iterations, easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)' }; + return elem.animate(keyframes, timing); + } + function shake(elem, iterations) { + var keyframes = [ + { transform: 'translate3d(0, 0, 0)', offset: 0 }, + { transform: 'translate3d(-10px, 0, 0)', offset: 0.1 }, + { transform: 'translate3d(10px, 0, 0)', offset: 0.2 }, + { transform: 'translate3d(-10px, 0, 0)', offset: 0.3 }, + { transform: 'translate3d(10px, 0, 0)', offset: 0.4 }, + { transform: 'translate3d(-10px, 0, 0)', offset: 0.5 }, + { transform: 'translate3d(10px, 0, 0)', offset: 0.6 }, + { transform: 'translate3d(-10px, 0, 0)', offset: 0.7 }, + { transform: 'translate3d(10px, 0, 0)', offset: 0.8 }, + { transform: 'translate3d(-10px, 0, 0)', offset: 0.9 }, + { transform: 'translate3d(0, 0, 0)', offset: 1 }]; + var timing = { duration: 900, iterations: iterations }; + return elem.animate(keyframes, timing); + } + + function swing(elem, iterations) { + var keyframes = [ + { transform: 'translate(0%)', offset: 0 }, + { transform: 'rotate3d(0, 0, 1, 15deg)', offset: 0.2 }, + { transform: 'rotate3d(0, 0, 1, -10deg)', offset: 0.4 }, + { transform: 'rotate3d(0, 0, 1, 5deg)', offset: 0.6 }, + { transform: 'rotate3d(0, 0, 1, -5deg)', offset: 0.8 }, + { transform: 'rotate3d(0, 0, 1, 0deg)', offset: 1 }]; + var timing = { duration: 900, iterations: iterations }; + return elem.animate(keyframes, timing); + } + + function tada(elem, iterations) { + var keyframes = [ + { transform: 'scale3d(1, 1, 1)', offset: 0 }, + { transform: 'scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)', offset: 0.1 }, + { transform: 'scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)', offset: 0.2 }, + { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.3 }, + { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)', offset: 0.4 }, + { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.5 }, + { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)', offset: 0.6 }, + { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.7 }, + { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)', offset: 0.8 }, + { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.9 }, + { transform: 'scale3d(1, 1, 1)', offset: 1 }]; + var timing = { duration: 900, iterations: iterations }; + return elem.animate(keyframes, timing); + } + + function wobble(elem, iterations) { + var keyframes = [ + { transform: 'translate(0%)', offset: 0 }, + { transform: 'translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg)', offset: 0.15 }, + { transform: 'translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg)', offset: 0.45 }, + { transform: 'translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg)', offset: 0.6 }, + { transform: 'translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg)', offset: 0.75 }, + { transform: 'translateX(0%)', offset: 1 }]; + var timing = { duration: 900, iterations: iterations }; + return elem.animate(keyframes, timing); + } + + function rotateIn(elem, iterations) { + var transformOrigin = elem.style['transform-origin']; + var keyframes = [{ transform: 'rotate3d(0, 0, 1, -200deg)', opacity: '0', transformOrigin: 'center', offset: 0 }, + { transform: 'none', opacity: '1', transformOrigin: 'center', offset: 1 }]; + var timing = { duration: 900, iterations: iterations }; + return elem.animate(keyframes, timing); + } + + function rotateOut(elem, iterations) { + var transformOrigin = elem.style['transform-origin']; + var keyframes = [{ transform: 'none', opacity: '1', transformOrigin: 'center', offset: 0 }, + { transform: 'rotate3d(0, 0, 1, 200deg)', opacity: '0', transformOrigin: 'center', offset: 1 }]; + var timing = { duration: 900, iterations: iterations }; + return elem.animate(keyframes, timing); + + } + + function fadeOut(elem, iterations) { + var keyframes = [ + { opacity: '1', offset: 0 }, + { opacity: '0', offset: 1 }]; + var timing = { duration: 400, iterations: iterations }; + return elem.animate(keyframes, timing); + } + + function stopInterval() { + if (interval) { + clearInterval(interval); + interval = null; + } + } + + self.show = function () { + + require(['css!' + pluginManager.mapPath(self, 'style.css')], function () { + + var elem = document.querySelector('.logoScreenSaver'); + + if (!elem) { + elem = document.createElement('div'); + elem.classList.add('logoScreenSaver'); + document.body.appendChild(elem); + + elem.innerHTML = ''; + } + + stopInterval(); + interval = setInterval(animate, 3000); + }); + }; + + self.hide = function () { + + stopInterval(); + + var elem = document.querySelector('.logoScreenSaver'); + + if (elem) { + + var onAnimationFinish = function () { + elem.parentNode.removeChild(elem); + }; + + if (elem.animate) { + var animation = fadeOut(elem, 1); + animation.onfinish = onAnimationFinish; + } else { + onAnimationFinish(); + } + } + }; + } +}); \ No newline at end of file diff --git a/src/components/logoscreensaver/style.css b/src/components/logoscreensaver/style.css new file mode 100644 index 0000000000..92c8139717 --- /dev/null +++ b/src/components/logoscreensaver/style.css @@ -0,0 +1,18 @@ +.logoScreenSaver { + background: #101010; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1000; + text-align: center; +} + +.logoScreenSaverImage { + height: 120px; + position: absolute; + top: 50%; + margin-top: -60px; + margin-left: -197px; +} diff --git a/src/components/screensavermanager.js b/src/components/screensavermanager.js new file mode 100644 index 0000000000..d186b538b3 --- /dev/null +++ b/src/components/screensavermanager.js @@ -0,0 +1,134 @@ +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(); +}); \ No newline at end of file