From 8a00c4833c8829b841bc37dfd1073829f2015691 Mon Sep 17 00:00:00 2001 From: Jens Nolte <jens@nightmarestudio.de> Date: Sat, 29 Feb 2020 15:59:49 +0100 Subject: [PATCH] Implement automatic blockName generation --- src/QBar/Core.hs | 19 ++++++++++++++++--- src/QBar/DefaultConfig.hs | 12 ++++-------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/QBar/Core.hs b/src/QBar/Core.hs index 49b01a3..e0a2867 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 7c76cc8..a4865e9 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 -- GitLab