{-# LANGUAGE OverloadedStrings #-} module Network.OnRmt (onRmt, OnRmtParams(..), onRmtDefaults) where import Data.List import Control.Applicative import Control.Concurrent import Control.Monad import Graphics.Vty import Graphics.Vty.Widgets.All import Graphics.Vty.Widgets.ItemField import Network.OnRmt.MainScreen import Network.OnRmt.AsyncControls import qualified Data.Text as T import Network.OnRmt.Worker runTest uictl reqwork = reqwork $ StartRun ["id"] runRun uictl reqwork = do inp <- getEditText $ inpRgn $ scrn uictl let inp' = if T.null inp then "id" else inp cmds = T.lines inp' reqwork $ StartRun cmds -- | The onRmtDefaults function returns the default parameter -- settings: -- numParallel = 10 onRmtDefaults :: OnRmtParams onRmtDefaults = OnRmtParams { appName = "OnRmt v1.0.3" , maxParallel = 10 } -- | The onRmt function is the main entry point. It creates the -- vty-ui interface and provides the main operational loop for user -- interaction and remote operations. onRmt getentries params = do uictl <- startupUI params setProgressText (progress $ scrn uictl) $ T.pack "Idle" workchan <- newChan -- forkIO $ populateStates scrn (showLog uictl) (updStates uictl) itemfield (scrn uictl) `onNewItemSelected` \(NewItemSelected n) -> writeChan workchan $ ShowSelInfo n runButton (scrn uictl) `onButtonPressed` \_ -> runRun uictl (writeChan workchan) testButton (scrn uictl) `onButtonPressed` \_ -> runTest uictl (writeChan workchan) clearButton (scrn uictl) `onButtonPressed` \_ -> writeChan workchan ClearAll -- buttonWidget (statusButton $ scrn uictl) `onGainFocus` \_ -> writeChan workchan TempStatus (statusButton $ scrn uictl) `onButtonPressed` \_ -> writeChan workchan TempStatus prepPwButton uictl workchan forkIO $ worker uictl workchan getentries runUi (coll $ scrn uictl) defaultContext prepPwButton uictl workchan = let w = buttonWidget $ addPwButton $ scrn uictl wwc = writeChan workchan in do addPwButton (scrn uictl) `onButtonPressed` \_ -> wwc EndResponse w `onGainFocus` \_ -> wwc StartResponse w `onLoseFocus` \_ -> wwc AbandonResponse w `onKeyPressed` \_ k _ -> case k of KASCII c -> (wwc $ AddToResponse $ T.singleton c) >> return True _ -> return False