From 623e18da29733b1216829c82dcbe624b53b345f4 Mon Sep 17 00:00:00 2001 From: Jan Beinke <git@janbeinke.com> Date: Fri, 14 Feb 2020 11:30:26 +0100 Subject: [PATCH] Move some code to a Block util module and restructure Blocks.hs --- src/QBar/Blocks.hs | 14 +++++++------- src/QBar/Blocks/Battery.hs | 13 ++----------- src/QBar/Blocks/Utils.hs | 26 ++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 src/QBar/Blocks/Utils.hs diff --git a/src/QBar/Blocks.hs b/src/QBar/Blocks.hs index 04ce46e..cedacdb 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 9bef2f6..cfa9f28 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 0000000..17b759a --- /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 -- GitLab