diff options
| author | jao <jao@gnu.org> | 2016-05-05 06:12:08 +0200 | 
|---|---|---|
| committer | jao <jao@gnu.org> | 2016-05-05 06:12:08 +0200 | 
| commit | 1e9d5e4e99c9a737a8ffea602ea10d6e0f17b3de (patch) | |
| tree | dc0a847b0caff77521a356a0b6e19fee35db13ea /src/Plugins | |
| parent | a2ed4f38c415259040d3e7513e72c1fab018feb1 (diff) | |
| download | xmobar-1e9d5e4e99c9a737a8ffea602ea10d6e0f17b3de.tar.gz xmobar-1e9d5e4e99c9a737a8ffea602ea10d6e0f17b3de.tar.bz2  | |
Batt: reading status more robustly
Diffstat (limited to 'src/Plugins')
| -rw-r--r-- | src/Plugins/Monitors/Batt.hs | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/src/Plugins/Monitors/Batt.hs b/src/Plugins/Monitors/Batt.hs index 2207a66..7e83f13 100644 --- a/src/Plugins/Monitors/Batt.hs +++ b/src/Plugins/Monitors/Batt.hs @@ -22,6 +22,8 @@ import System.IO (IOMode(ReadMode), hGetLine, withFile)  import System.Posix.Files (fileExist)  import System.Console.GetOpt  import Data.List (sort, sortOn, group) +import Data.Maybe (fromMaybe) +import Text.Read (readMaybe)  data BattOpts = BattOpts    { onString :: String @@ -85,7 +87,7 @@ parseOpts argv =      (o, _, []) -> return $ foldr id defaultOpts o      (_, _, errs) -> ioError . userError $ concat errs -data Status = Charging | Discharging | Full | Idle deriving (Read, Eq) +data Status = Charging | Discharging | Full | Idle | Unknown deriving (Read, Eq)  data Result = Result Float Float Float Status | NA @@ -173,7 +175,8 @@ readBatteries opts bfs =             mwatts = if watts == 0 then 1 else sign * watts             time' b = (if ac then full b - now b else now b) / mwatts             statuses :: [Status] -           statuses = map read (sort (map status bats)) +           statuses = map (fromMaybe Unknown . readMaybe) +                          (sort (map status bats))             acst = head $ last $ sortOn length (group statuses)         return $ if isNaN left then NA else Result left watts time acst @@ -209,6 +212,7 @@ runBatt' bfs args = do            where hours = show (x `div` 3600)                  minutes = show ((x `mod` 3600) `div` 60)          fmtStatus opts Idle = idleString opts +        fmtStatus opts Unknown = idleString opts          fmtStatus opts Full = idleString opts          fmtStatus opts Charging = onString opts          fmtStatus opts Discharging = offString opts @@ -222,6 +226,7 @@ runBatt' bfs args = do            let x' = minimum [1, x]            case st of                 Idle -> showIconPattern (idleIconPattern opts) x' +               Unknown -> showIconPattern (idleIconPattern opts) x'                 Full -> showIconPattern (idleIconPattern opts) x'                 Charging -> showIconPattern (onIconPattern opts) x'                 Discharging -> showIconPattern (offIconPattern opts) x'  | 
