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