1 #include "PowerSaver.h" 2 3 #include "AudioManager.h" 4 #include "Settings.h" 5 6 bool PowerSaver::mState = false; 7 bool PowerSaver::mRunningScreenSaver = false; 8 9 int PowerSaver::mWakeupTimeout = -1; 10 int PowerSaver::mScreenSaverTimeout = -1; 11 PowerSaver::mode PowerSaver::mMode = PowerSaver::DISABLED; 12 init()13void PowerSaver::init() 14 { 15 setState(true); 16 updateMode(); 17 } 18 getTimeout()19int PowerSaver::getTimeout() 20 { 21 if (SDL_GetAudioStatus() == SDL_AUDIO_PAUSED) 22 AudioManager::getInstance()->deinit(); 23 24 // Used only for SDL_WaitEventTimeout. Use `getMode()` for modes. 25 return mRunningScreenSaver ? mWakeupTimeout : mScreenSaverTimeout; 26 } 27 loadWakeupTime()28void PowerSaver::loadWakeupTime() 29 { 30 // TODO : Move this to Screensaver Class 31 std::string behaviour = Settings::getInstance()->getString("ScreenSaverBehavior"); 32 if (behaviour == "random video") 33 mWakeupTimeout = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") - getMode(); 34 else if (behaviour == "slideshow") 35 mWakeupTimeout = Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout") - getMode(); 36 else // Dim and Blank 37 mWakeupTimeout = -1; 38 } 39 updateTimeouts()40void PowerSaver::updateTimeouts() 41 { 42 mScreenSaverTimeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime"); 43 mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - getMode() : -1; 44 loadWakeupTime(); 45 } 46 getMode()47PowerSaver::mode PowerSaver::getMode() 48 { 49 return mMode; 50 } 51 updateMode()52void PowerSaver::updateMode() 53 { 54 std::string mode = Settings::getInstance()->getString("PowerSaverMode"); 55 56 if (mode == "disabled") { 57 mMode = DISABLED; 58 } else if (mode == "instant") { 59 mMode = INSTANT; 60 } else if (mode == "enhanced") { 61 mMode = ENHANCED; 62 } else { 63 mMode = DEFAULT; 64 } 65 updateTimeouts(); 66 } 67 getState()68bool PowerSaver::getState() 69 { 70 return mState; 71 } 72 setState(bool state)73void PowerSaver::setState(bool state) 74 { 75 bool ps_enabled = Settings::getInstance()->getString("PowerSaverMode") != "disabled"; 76 mState = ps_enabled && state; 77 } 78 runningScreenSaver(bool state)79void PowerSaver::runningScreenSaver(bool state) 80 { 81 mRunningScreenSaver = state; 82 if (mWakeupTimeout < mMode) 83 { 84 // Disable PS if wake up time is less than mode as PS will never trigger 85 setState(!state); 86 } 87 } 88 isScreenSaverActive()89bool PowerSaver::isScreenSaverActive() 90 { 91 return mRunningScreenSaver; 92 } 93