{- Movie Monad (C) 2017 David lettier lettier.com -} {-# LANGUAGE ScopedTypeVariables #-} module Utils where import System.Exit import System.Process import System.FilePath import Control.Monad import Control.Exception import Data.List import Data.Text import Data.Int import qualified GI.Gtk fileNameFromFilePathName :: Data.Text.Text -> Data.Text.Text fileNameFromFilePathName = Data.Text.pack . System.FilePath.takeFileName . Data.Text.unpack enumToInt32 :: (Enum a, Ord a) => a -> Int32 enumToInt32 enum = fromIntegral (fromEnum enum) :: Int32 isTextEmpty :: Data.Text.Text -> Bool isTextEmpty = Data.Text.null . Data.Text.strip getSelectedVideoWidth :: GI.Gtk.ComboBoxText -> IO Int getSelectedVideoWidth = fmap (\ x -> read (Data.Text.unpack x) :: Int) . GI.Gtk.comboBoxTextGetActiveText linuxProcessIsRunning :: String -> IO Bool linuxProcessIsRunning processName = do (_, out, _) <- safeRunProcessGetOutput "pgrep" ["-f", processName] return (not $ Data.List.null out) spawnLinuxProcessAndDisown :: String -> IO () spawnLinuxProcessAndDisown processCommand = void $ System.Process.spawnCommand ( "nohup " ++ processCommand ++ " /dev/null & disown" ) safeRunProcessGetOutput :: String -> [String] -> IO (System.Exit.ExitCode, String, String) safeRunProcessGetOutput processName args = catch ( readProcessWithExitCode processName args "" ) (\ (e :: Control.Exception.IOException) -> putStr (show e) >> return (ExitFailure 1, "", "") ) clamp :: Ord a => a -> a -> a -> a clamp minimum' maximum' el | el < minimum' = minimum' | el > maximum' = maximum' | otherwise = el