diff --git a/src/QBar/Blocks.hs b/src/QBar/Blocks.hs index 04ce46ec2a1d083c22b3d838493159153569901a..cedacdb842cff8332a245aa46460ee0c2a61a8c4 100644 --- a/src/QBar/Blocks.hs +++ b/src/QBar/Blocks.hs @@ -1,8 +1,8 @@ -module QBar.Blocks ( - module QBar.Blocks.Battery, - module QBar.Blocks.Date -) where +module QBar.Blocks + ( QBar.Blocks.Battery.batteryBlock, + QBar.Blocks.Date.dateBlock, + ) +where - -import QBar.Blocks.Battery -import QBar.Blocks.Date +import qualified QBar.Blocks.Battery +import qualified QBar.Blocks.Date diff --git a/src/QBar/Blocks/Battery.hs b/src/QBar/Blocks/Battery.hs index 9bef2f65189ef5fc4857768384ff0d039b6cce1d..cfa9f28ca0486af63abbea8e35d12215bb77d992 100644 --- a/src/QBar/Blocks/Battery.hs +++ b/src/QBar/Blocks/Battery.hs @@ -4,7 +4,8 @@ module QBar.Blocks.Battery where -import QBar.Core hiding (name) +import QBar.Core +import QBar.Blocks.Utils import QBar.BlockOutput import Pipes @@ -12,18 +13,12 @@ import qualified Data.Text.Lazy as T import qualified Data.Text.Lazy.IO as TIO import System.Directory -import Control.Exception (catch, IOException) import Data.Maybe import Text.Read (readMaybe) -import Numeric (showFFloat) import Control.Lens -formatFloatN :: RealFloat a => Int -> a -> T.Text -formatFloatN n f = T.pack $ showFFloat (Just n) f "" - - data BatteryStatus = BatteryCharging | BatteryDischarging | BatteryOther deriving (Show) @@ -36,10 +31,6 @@ data BatteryState = BatteryState } deriving (Show) -tryMaybe :: IO a -> IO (Maybe a) -tryMaybe a = catch (Just <$> a) (\ (_ :: IOException) -> return Nothing) - - getBatteryState :: FilePath -> IO (Maybe BatteryState) getBatteryState path = tryMaybe $ do status' <- TIO.readFile (path <> "/status") diff --git a/src/QBar/Blocks/Utils.hs b/src/QBar/Blocks/Utils.hs new file mode 100644 index 0000000000000000000000000000000000000000..17b759a98dae3608b1c27376555887cfeb6af8dc --- /dev/null +++ b/src/QBar/Blocks/Utils.hs @@ -0,0 +1,26 @@ +{-# LANGUAGE ScopedTypeVariables #-} + +module QBar.Blocks.Utils where + +import Control.Exception (IOException, catch) +import qualified Data.Attoparsec.Text.Lazy as AT +import qualified Data.Text.Lazy as T +import qualified Data.Text.Lazy.IO as TIO +import Numeric (showFFloat) + +formatFloatN :: RealFloat a => Int -> a -> T.Text +formatFloatN = formatFloatN' 0 + +formatFloatN' :: RealFloat a => Int -> Int -> a -> T.Text +formatFloatN' padWithZeros decimalPlaces f = T.justifyRight (fromIntegral padWithZeros) '0' . T.pack $ showFFloat (Just decimalPlaces) f "" + +tryMaybe :: IO a -> IO (Maybe a) +tryMaybe a = tryMaybe' (Just <$> a) + +tryMaybe' :: IO (Maybe a) -> IO (Maybe a) +tryMaybe' a = catch a (\(_ :: IOException) -> return Nothing) + +parseFile :: FilePath -> AT.Parser a -> IO (Maybe a) +parseFile path parser = tryMaybe' $ do + fileContents <- TIO.readFile path + return . AT.maybeResult $ AT.parse parser fileContents