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