From c01bac436c9a12ed35522d97f3ce233eee5370c9 Mon Sep 17 00:00:00 2001
From: Jens Nolte <jens@nightmarestudio.de>
Date: Mon, 2 Dec 2019 03:54:58 +0100
Subject: [PATCH] Revert "Simplify persistent block script"

This reverts commit 66778fdb3245dfa48ddd3406acdcf3431fead5e7.
---
 src/QBar/Core.hs | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/QBar/Core.hs b/src/QBar/Core.hs
index 3aa7a1a..0e90b35 100644
--- a/src/QBar/Core.hs
+++ b/src/QBar/Core.hs
@@ -272,29 +272,39 @@ blockScript path = forever $ yield =<< (lift $ blockScriptAction)
     createScriptBlock :: T.Text -> BlockOutput
     createScriptBlock text = pangoMarkup $ setBlockName (T.pack path) $ createBlock text
 
-
 startPersistentBlockScript :: FilePath -> CachedBlock
+-- This is only using 'CachedBlock' because the code was already written and tested
+-- This could probably be massively simplified by using the new 'pushBlock'
 startPersistentBlockScript path = do
   bar <- lift $ ask
   do
     (output, input, seal) <- liftIO $ spawn' $ latest $ emptyBlock
+    initialDataEvent <- liftIO $ Event.new
     task <- liftIO $ async $ do
       let processConfig = setStdin closed $ setStdout createPipe $ shell path
       finally (
         catch (
           withProcessWait processConfig $ \ process -> do
             let handle = getStdout process
-            runEffect $ (fromHandle bar handle) >-> toOutput output
+            runEffect $ (fromHandle bar handle) >-> signalFirstBlock initialDataEvent >-> toOutput output
           )
           ( \ e ->
             -- output error
-            runEffect $ (yield $ createErrorBlock $ "[" <> (T.pack $ show (e :: IOException)) <> "]") >-> toOutput output
+            runEffect $ (yield $ createErrorBlock $ "[" <> (T.pack $ show (e :: IOException)) <> "]") >-> signalFirstBlock initialDataEvent >-> toOutput output
           )
         )
         (atomically seal)
     liftIO $ link task
+    liftIO $ Event.wait initialDataEvent
     cacheFromInput input
   where
+    signalFirstBlock :: Event.Event -> Pipe BlockOutput BlockOutput IO ()
+    signalFirstBlock event = do
+      -- Await first block
+      await >>= yield
+      lift $ Event.set event
+      -- Replace with cat
+      cat
     fromHandle :: Bar -> Handle -> Producer BlockOutput IO ()
     fromHandle bar handle = forever $ do
       line <- lift $ TIO.hGetLine handle
-- 
GitLab