diff --git a/src/Unused/CLI/ProgressBar.hs b/src/Unused/CLI/ProgressBar.hs new file mode 100644 index 0000000..45273c4 --- /dev/null +++ b/src/Unused/CLI/ProgressBar.hs @@ -0,0 +1,33 @@ +module Unused.CLI.ProgressBar + ( ProgressBar + , startProgressBar + , incrementProgressBar + , stopProgressBar + ) where + +import Control.Concurrent (ThreadId, killThread) +import System.ProgressBar (ProgressRef, startProgress, incProgress, msg, percentage) + +data ProgressBar = ProgressBar + { pbProgressRef :: ProgressRef + , pbThreadId :: ThreadId + } + +startProgressBar :: Int -> IO ProgressBar +startProgressBar i = do + (ref, tid) <- buildProgressBar $ toInteger i + return $ ProgressBar ref tid + +incrementProgressBar :: ProgressBar -> IO () +incrementProgressBar ProgressBar{ pbProgressRef = ref } = + incProgress ref 1 + +stopProgressBar :: ProgressBar -> IO () +stopProgressBar ProgressBar { pbThreadId = tid } = killThread tid + +buildProgressBar :: Integer -> IO (ProgressRef, ThreadId) +buildProgressBar = + startProgress (msg message) percentage progressBarWidth + where + message = "Working" + progressBarWidth = 60 diff --git a/src/Unused/CLI/SearchWithProgress.hs b/src/Unused/CLI/SearchWithProgress.hs index d3c5693..b4aca1b 100644 --- a/src/Unused/CLI/SearchWithProgress.hs +++ b/src/Unused/CLI/SearchWithProgress.hs @@ -2,23 +2,15 @@ module Unused.CLI.SearchWithProgress ( searchWithProgressBar ) where -import Control.Concurrent (ThreadId, killThread) -import System.ProgressBar (ProgressRef, startProgress, incProgress, msg, percentage) +import Unused.CLI.ProgressBar (ProgressBar, startProgressBar, incrementProgressBar, stopProgressBar) import Unused.TermSearch (search) searchWithProgressBar :: [String] -> IO [String] searchWithProgressBar terms = do putStr "\n\n" - (bar, tid) <- buildProgressBar $ toInteger $ length terms - concat <$> mapM (performSearch bar) terms <* killThread tid + bar <- startProgressBar $ length terms + concat <$> mapM (performSearch bar) terms <* stopProgressBar bar -performSearch :: ProgressRef -> String -> IO [String] -performSearch ref t = - search t <* incProgress ref 1 - -buildProgressBar :: Integer -> IO (ProgressRef, ThreadId) -buildProgressBar = - startProgress (msg message) percentage progressBarWidth - where - message = "Working" - progressBarWidth = 60 +performSearch :: ProgressBar -> String -> IO [String] +performSearch bar t = + search t <* incrementProgressBar bar diff --git a/unused.cabal b/unused.cabal index 7de00e7..6fb1174 100644 --- a/unused.cabal +++ b/unused.cabal @@ -28,6 +28,7 @@ library , Unused.CLI.SearchWithoutProgress , Unused.CLI.Util , Unused.CLI.Spinner + , Unused.CLI.ProgressBar build-depends: base >= 4.7 && < 5 , process , parsec