movie-monad-0.0.2.0: src/ScreensaverAndPowerManagement.hs
{-
Movie Monad
(C) 2017 David lettier
lettier.com
-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module ScreensaverAndPowerManagement where
import System.Process
import Control.Monad
import Data.Text
import qualified Records as R (ScreensaverAndPowerManagementActions(..))
import Utils (safeRunProcessGetOutput, linuxProcessIsRunning, spawnLinuxProcessAndDisown)
disable :: String -> IO R.ScreensaverAndPowerManagementActions
disable "linux" = do
disabledPowerManagement <- disablePowerManagement
disabledXScreensaver <- disableXScreensaver
disabledCinnamonScreensaver <- disableCinnamonScreensaver
disabledGnomeScreensaver <- disableGnomeScreensaver
return R.ScreensaverAndPowerManagementActions {
R.disabledPowerManagement = disabledPowerManagement
, R.disabledXScreensaver = disabledXScreensaver
, R.disabledCinnamonScreensaver = disabledCinnamonScreensaver
, R.disabledGnomeScreensaver = disabledGnomeScreensaver
}
disable _ =
return R.ScreensaverAndPowerManagementActions {
R.disabledPowerManagement = False
, R.disabledXScreensaver = False
, R.disabledCinnamonScreensaver = False
, R.disabledGnomeScreensaver = False
}
enable :: String -> R.ScreensaverAndPowerManagementActions -> IO ()
enable
"linux"
R.ScreensaverAndPowerManagementActions {
R.disabledPowerManagement = disabledPowerManagement
, R.disabledXScreensaver = disabledXScreensaver
, R.disabledCinnamonScreensaver = disabledCinnamonScreensaver
, R.disabledGnomeScreensaver = disabledGnomeScreensaver
}
= do
when disabledPowerManagement enablePowerManagement
when disabledXScreensaver enableXScreensaver
when disabledCinnamonScreensaver enableCinnamonScreensaver
when disabledGnomeScreensaver enableGnomeScreensaver
return ()
enable _ _ = return ()
disablePowerManagement :: IO Bool
disablePowerManagement = do
(_, out, _) <- safeRunProcessGetOutput "xset" ["-q"]
let isEnabled =
Data.Text.isInfixOf "dpms is enabled" $
Data.Text.toLower $
Data.Text.pack out
if isEnabled
then do
_ <- System.Process.spawnCommand "sleep 1; xset -dpms s off"
return True
else return False
enablePowerManagement :: IO ()
enablePowerManagement =
void $
System.Process.spawnCommand "sleep 1; xset +dpms s on"
disableXScreensaver :: IO Bool
disableXScreensaver =
disableScreensaver
"xscreensaver"
"xscreensaver-command --exit"
enableXScreensaver :: IO ()
enableXScreensaver = spawnLinuxProcessAndDisown "xscreensaver -no-splash"
disableCinnamonScreensaver :: IO Bool
disableCinnamonScreensaver =
disableScreensaver
"cinnamon-screensaver"
"cinnamon-screensaver-command --exit"
enableCinnamonScreensaver :: IO ()
enableCinnamonScreensaver = spawnLinuxProcessAndDisown "cinnamon-screensaver"
disableGnomeScreensaver :: IO Bool
disableGnomeScreensaver =
disableScreensaver
"gnome-screensaver"
"gnome-screensaver-command --exit"
enableGnomeScreensaver :: IO ()
enableGnomeScreensaver = spawnLinuxProcessAndDisown "gnome-screensaver"
disableScreensaver :: String -> String -> IO Bool
disableScreensaver processName disableCommand = do
isRunning <- linuxProcessIsRunning processName
if isRunning
then do
spawnLinuxProcessAndDisown disableCommand
return True
else return False