{-# LANGUAGE OverloadedStrings #-}
module System.Taffybar.Widget.FSMonitor ( fsMonitorNew ) where
import Control.Monad.IO.Class
import qualified GI.Gtk
import System.Process ( readProcess )
import System.Taffybar.Widget.Generic.PollingLabel ( pollingLabelNew )
import qualified Data.Text as T
fsMonitorNew
:: MonadIO m
=> Double
-> [String]
-> m GI.Gtk.Widget
fsMonitorNew :: forall (m :: * -> *). MonadIO m => Double -> [String] -> m Widget
fsMonitorNew Double
interval [String]
fsList = IO Widget -> m Widget
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Widget -> m Widget) -> IO Widget -> m Widget
forall a b. (a -> b) -> a -> b
$ do
label <- Double -> IO Text -> IO Widget
forall (m :: * -> *). MonadIO m => Double -> IO Text -> m Widget
pollingLabelNew Double
interval (IO Text -> IO Widget) -> IO Text -> IO Widget
forall a b. (a -> b) -> a -> b
$ [String] -> IO Text
showFSInfo [String]
fsList
GI.Gtk.widgetShowAll label
GI.Gtk.toWidget label
showFSInfo :: [String] -> IO T.Text
showFSInfo :: [String] -> IO Text
showFSInfo [String]
fsList = do
fsOut <- String -> [String] -> String -> IO String
readProcess String
"df" (String
"-kP"String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
fsList) String
""
let fss = (String -> [String]) -> [String] -> [[String]]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
take Int
2 ([String] -> [String])
-> (String -> [String]) -> String -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
forall a. [a] -> [a]
reverse ([String] -> [String])
-> (String -> [String]) -> String -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
words) ([String] -> [[String]]) -> [String] -> [[String]]
forall a b. (a -> b) -> a -> b
$ Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ String -> [String]
lines String
fsOut
return $ T.pack $ unwords $ map ((\String
s -> String
"[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
s String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"]") . unwords) fss