aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/Utils
diff options
context:
space:
mode:
Diffstat (limited to 'app/Utils')
-rw-r--r--app/Utils/Prompt.hs50
-rw-r--r--app/Utils/PromptMessage.hs39
2 files changed, 89 insertions, 0 deletions
diff --git a/app/Utils/Prompt.hs b/app/Utils/Prompt.hs
new file mode 100644
index 0000000..51b3f0c
--- /dev/null
+++ b/app/Utils/Prompt.hs
@@ -0,0 +1,50 @@
+-- |
+-- Copyright : (c) 2015 Egor Tensin <Egor.Tensin@gmail.com>
+-- License : MIT
+-- Maintainer : Egor.Tensin@gmail.com
+-- Stability : experimental
+-- Portability : portable
+
+module Utils.Prompt
+ ( withPrompt
+ , withoutPrompt
+ ) where
+
+import Control.Monad (void, when)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Except (ExceptT)
+import Data.Char (toLower)
+import System.IO (hFlush, stdout)
+
+prompt :: String -> IO String
+prompt msg = do
+ putStr msg
+ hFlush stdout
+ getLine
+
+promptYesNo :: String -> IO Bool
+promptYesNo msg = do
+ response <- map toLower <$> prompt msg
+ if response `elem` yeses
+ then return True
+ else if response `elem` noes
+ then return False
+ else promptToContinue
+ where
+ yeses = ["y", "yes"]
+ noes = ["n", "no"]
+
+promptToContinue :: IO Bool
+promptToContinue = promptYesNo "Continue? (y/n) "
+
+withPrompt :: String -> ExceptT IOError IO a -> ExceptT IOError IO Bool
+withPrompt msg m = do
+ lift $ do
+ putStr msg
+ hFlush stdout
+ agreed <- lift promptToContinue
+ when agreed $ void m
+ return agreed
+
+withoutPrompt :: ExceptT IOError IO a -> ExceptT IOError IO Bool
+withoutPrompt m = m >> return True
diff --git a/app/Utils/PromptMessage.hs b/app/Utils/PromptMessage.hs
new file mode 100644
index 0000000..37fc1e6
--- /dev/null
+++ b/app/Utils/PromptMessage.hs
@@ -0,0 +1,39 @@
+-- |
+-- Copyright : (c) 2016 Egor Tensin <Egor.Tensin@gmail.com>
+-- License : MIT
+-- Maintainer : Egor.Tensin@gmail.com
+-- Stability : experimental
+-- Portability : Windows-only
+
+module Utils.PromptMessage
+ ( oldNewMessage
+ , newMessage
+ , wipeMessage
+ ) where
+
+import Text.Printf (printf)
+
+import qualified WindowsEnv
+
+oldNewMessage :: WindowsEnv.Profile -> WindowsEnv.VarName -> WindowsEnv.VarValue -> WindowsEnv.VarValue -> String
+oldNewMessage profile name oldValue newValue =
+ descrMsg ++ oldValueMsg ++ newValueMsg
+ where
+ profileKey = WindowsEnv.profileKeyPath profile
+ descrMsg = printf "Saving variable '%s' to '%s'...\n" name (show profileKey)
+ oldValueMsg = printf "\tOld value: %s\n" oldValue
+ newValueMsg = printf "\tNew value: %s\n" newValue
+
+newMessage :: WindowsEnv.Profile -> WindowsEnv.VarName -> WindowsEnv.VarValue -> String
+newMessage profile name newValue =
+ descrMsg ++ newValueMsg
+ where
+ profileKey = WindowsEnv.profileKeyPath profile
+ descrMsg = printf "Saving variable '%s' to '%s'...\n" name (show profileKey)
+ newValueMsg = printf "\tNew value: %s\n" newValue
+
+wipeMessage :: WindowsEnv.Profile -> WindowsEnv.VarName -> String
+wipeMessage profile name =
+ printf "Deleting variable '%s' from '%s'...\n" name (show profileKey)
+ where
+ profileKey = WindowsEnv.profileKeyPath profile