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()13 void PowerSaver::init()
14 {
15 	setState(true);
16 	updateMode();
17 }
18 
getTimeout()19 int 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()28 void 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()40 void PowerSaver::updateTimeouts()
41 {
42 	mScreenSaverTimeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime");
43 	mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - getMode() : -1;
44 	loadWakeupTime();
45 }
46 
getMode()47 PowerSaver::mode PowerSaver::getMode()
48 {
49 	return mMode;
50 }
51 
updateMode()52 void 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()68 bool PowerSaver::getState()
69 {
70 	return mState;
71 }
72 
setState(bool state)73 void PowerSaver::setState(bool state)
74 {
75 	bool ps_enabled = Settings::getInstance()->getString("PowerSaverMode") != "disabled";
76 	mState = ps_enabled && state;
77 }
78 
runningScreenSaver(bool state)79 void 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()89 bool PowerSaver::isScreenSaverActive()
90 {
91 	return mRunningScreenSaver;
92 }
93