diff --git a/src/QBar/Core.hs b/src/QBar/Core.hs index 49b01a314879e4fbf07716858e6460bd4a7419ac..e0a2867e030fcafa2e0a30aad6cc851e29f09e1a 100644 --- a/src/QBar/Core.hs +++ b/src/QBar/Core.hs @@ -5,6 +5,7 @@ module QBar.Core where import QBar.BlockOutput import QBar.Time +import QBar.Util import Control.Concurrent.Async import Control.Concurrent.Event as Event @@ -17,6 +18,7 @@ import Control.Monad.Writer (WriterT) import Data.Aeson.TH import Data.Either (isRight) import Data.Int (Int64) +import Data.Maybe (fromMaybe) import qualified Data.Text.Lazy as T import Pipes import Pipes.Concurrent @@ -242,14 +244,25 @@ newCache'' = do -- |Creates a cache from a push block. cachePushBlock :: PushBlock -> BlockCache -cachePushBlock pushBlock = newCache $ () <$ (pushBlock >-> updateBarP) +cachePushBlock pushBlock = newCache $ () <$ (pushBlock >-> updateBarP >-> fixBlockName >-> PP.map (\a -> [a])) where - updateBarP :: Pipe BlockUpdate [BlockState] BarIO PushMode + updateBarP :: Pipe BlockUpdate BlockState BarIO r updateBarP = forever $ do (state, reason) <- await - yield [state] + yield state updateBar reason + -- |Sets 'blockName' to a random (but static) identifier if an event handler is set but the 'blockName' is not set. + fixBlockName :: Pipe BlockState BlockState BarIO r + fixBlockName = do + defaultBlockName <- randomIdentifier + forever $ do + state <- await + yield $ if hasEventHandler state + then (_Just . _1 . blockName) %~ (Just . fromMaybe defaultBlockName) $ state + else state + + modify :: (BlockOutput -> BlockOutput) -> Pipe BlockUpdate BlockUpdate BarIO r modify x = PP.map (over (_1 . _Just . _1) x) diff --git a/src/QBar/DefaultConfig.hs b/src/QBar/DefaultConfig.hs index 7c76cc81d2a1dda9059c63c5874c93da4c837c78..a4865e9dea97ceefcbbb4af9bc7ef8e876adb7c7 100644 --- a/src/QBar/DefaultConfig.hs +++ b/src/QBar/DefaultConfig.hs @@ -6,16 +6,13 @@ import QBar.Core import Pipes -import Control.Lens - defaultBarConfig :: BarIO () defaultBarConfig = do - let battery = batteryBlock >-> modify (blockName ?~ "battery") - let cpuUsage = cpuUsageBlock 1 >-> modify ((blockName ?~ "cpuUsage") . addIcon "💻\xFE0E") + let cpuUsage = cpuUsageBlock 1 >-> modify (addIcon "💻\xFE0E") -- TODO: commented-out blocks should be added as soon as they are implemented in qbar addBlock dateBlock - addBlock battery + addBlock batteryBlock --addBlock volumeBlock addBlock cpuUsage --addBlock ramUsageBlock @@ -30,11 +27,10 @@ legacyBarConfig = do let ram = (scriptBlock $ blockLocation "memory") >-> modify (addIcon "ðŸ\xFE0E") >-> autoPadding let temperature = (scriptBlock $ blockLocation "temperature") >-> autoPadding let volumeBlock = persistentScriptBlock $ blockLocation "volume-pulseaudio -S -F3" - let battery = batteryBlock >-> modify (blockName ?~ "battery") - let cpuUsage = cpuUsageBlock 1 >-> modify ((blockName ?~ "cpuUsage") . addIcon "💻\xFE0E") + let cpuUsage = cpuUsageBlock 1 >-> modify (addIcon "💻\xFE0E") addBlock dateBlock - addBlock battery + addBlock batteryBlock addBlock volumeBlock addBlock temperature addBlock ram