diff --git a/src/QBar/Blocks/Battery.hs b/src/QBar/Blocks/Battery.hs index cfa9f28ca0486af63abbea8e35d12215bb77d992..f7d0358d71cb02702bbcb08c1e34086718b1c60f 100644 --- a/src/QBar/Blocks/Battery.hs +++ b/src/QBar/Blocks/Battery.hs @@ -158,8 +158,8 @@ batteryIsDischarging = any (singleBatteryIsDischarging . _status) batteryEstimate :: [BatteryState] -> Maybe Int batteryEstimate batteryStates | batteryPowerNow == 0 = Nothing - | isCharging, not isDischarging = Just $ div ((batteryEnergyFull - batteryEnergyNow) * 3600) batteryPowerNow - | isDischarging, not isCharging = Just $ div (batteryEnergyNow * 3600) batteryPowerNow + | isCharging, not isDischarging = ensure (>0) batteryEstimateCharging + | isDischarging, not isCharging = ensure (>0) batteryEstimateDischarging | otherwise = Nothing where isCharging :: Bool @@ -176,3 +176,9 @@ batteryEstimate batteryStates batteryEnergyFull :: Int batteryEnergyFull = sum . map _energyFull $ batteryStates + + batteryEstimateCharging :: Int + batteryEstimateCharging = div ((batteryEnergyFull - batteryEnergyNow) * 3600) batteryPowerNow + + batteryEstimateDischarging :: Int + batteryEstimateDischarging = div (batteryEnergyNow * 3600) batteryPowerNow diff --git a/src/QBar/Blocks/Utils.hs b/src/QBar/Blocks/Utils.hs index 17b759a98dae3608b1c27376555887cfeb6af8dc..59304f2adcfafc7a67cd689cf914ba85aaaff0c1 100644 --- a/src/QBar/Blocks/Utils.hs +++ b/src/QBar/Blocks/Utils.hs @@ -14,6 +14,11 @@ 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 "" +ensure :: (a -> Bool) -> a -> Maybe a +ensure f a + | f a = Just a + | otherwise = Nothing + tryMaybe :: IO a -> IO (Maybe a) tryMaybe a = tryMaybe' (Just <$> a)