diff --git a/src/QBar/BlockHelper.hs b/src/QBar/BlockHelper.hs index 685092175d9394500188635a71cc6429836cafec..7a7ab195d49d151048be8727d1c9a220f123e525 100644 --- a/src/QBar/BlockHelper.hs +++ b/src/QBar/BlockHelper.hs @@ -43,11 +43,11 @@ yieldEmptyBlockUpdate = void . respond $ Nothing runSignalBlock :: forall a. Maybe Interval -> Maybe ((a -> IO ()) -> BarIO ()) -> SignalBlock a -> Block runSignalBlock maybeInterval maybeSignalSourceThread signalBlock' = runSignalBlockConfiguration $ SignalBlockConfiguration { - initialize = const $ return (), + aquire = const $ return (), + release = return, signalThread = const <$> maybeSignalSourceThread, signalBlock = const signalBlock', - interval = maybeInterval, - finalize = return + interval = maybeInterval } @@ -64,11 +64,11 @@ runSignalBlockFn maybeInterval signalSourceThread renderFn = runSignalBlock mayb runSignalBlockFn' :: Maybe Interval -> (Maybe BlockEvent -> BarIO (Maybe BlockOutput)) -> Block runSignalBlockFn' maybeInterval renderFn = runSignalBlockConfiguration $ SignalBlockConfiguration { - initialize = const $ return (), + aquire = const $ return (), + release = return, signalThread = Nothing, signalBlock = const eventBlock, - interval = maybeInterval, - finalize = return + interval = maybeInterval } where eventBlock :: SignalBlock a @@ -78,15 +78,15 @@ runSignalBlockFn' maybeInterval renderFn = runSignalBlockConfiguration $ SignalB data SignalBlockConfiguration c p = SignalBlockConfiguration { - initialize :: (p -> IO ()) -> BarIO c, + aquire :: (p -> IO ()) -> BarIO c, + release :: c -> BarIO (), signalThread :: Maybe (c -> (p -> IO ()) -> BarIO ()), signalBlock :: c -> SignalBlock p, - interval :: Maybe Interval, - finalize :: c -> BarIO () + interval :: Maybe Interval } runSignalBlockConfiguration :: forall c p. SignalBlockConfiguration c p -> Block -runSignalBlockConfiguration SignalBlockConfiguration{initialize, signalThread, signalBlock, interval, finalize} = do +runSignalBlockConfiguration SignalBlockConfiguration{aquire, release, signalThread, signalBlock, interval} = do -- Initialize signalChan <- liftIO newTChanIO signalEvent <- liftIO Event.new @@ -95,7 +95,7 @@ runSignalBlockConfiguration SignalBlockConfiguration{initialize, signalThread, s where runSignalBlockWithThreadInternal :: TChan (Signal p) -> Event.Event -> Block runSignalBlockWithThreadInternal signalChan signalEvent = do - context <- lift $ initialize userSignalAction + context <- lift $ aquire userSignalAction -- Start signalSource thread userTask <- liftBarIO $ barAsync $ case signalThread of @@ -112,7 +112,7 @@ runSignalBlockConfiguration SignalBlockConfiguration{initialize, signalThread, s cancel userTask cancel intervalTask - liftBarIO $ finalize context + liftBarIO $ release context exitBlock diff --git a/src/QBar/Blocks/NetworkManager.hs b/src/QBar/Blocks/NetworkManager.hs index fd9bc043c25e32c85ba6b96e2fb1de2016d16906..b33e54f09b6a66f5c562dc840d36554efd568bb4 100644 --- a/src/QBar/Blocks/NetworkManager.hs +++ b/src/QBar/Blocks/NetworkManager.hs @@ -53,15 +53,15 @@ getConnectionInfo client connectionObjectPath = do networkManagerBlock :: Block networkManagerBlock = runSignalBlockConfiguration $ SignalBlockConfiguration { - initialize = initialize', - finalize = finalize', + aquire, + release, signalThread = Nothing, signalBlock = networkManagerBlock', interval = Just defaultInterval } where - initialize' :: (() -> IO ()) -> BarIO DBus.Client - initialize' trigger = liftIO $ do + aquire :: (() -> IO ()) -> BarIO DBus.Client + aquire trigger = liftIO $ do client <- DBus.connectSystem let matchRule = DBus.matchAny { DBus.matchPath = Just "/org/freedesktop/NetworkManager", @@ -69,8 +69,8 @@ networkManagerBlock = runSignalBlockConfiguration $ SignalBlockConfiguration { } void . DBus.addMatch client matchRule $ dbusSignalHandler trigger return client - finalize' :: DBus.Client -> BarIO () - finalize' = liftIO . DBus.disconnect + release :: DBus.Client -> BarIO () + release = liftIO . DBus.disconnect networkManagerBlock' :: DBus.Client -> SignalBlock () networkManagerBlock' client = (liftBarIO . networkManagerBlock'' client) >=> respondBlockUpdate >=> networkManagerBlock' client networkManagerBlock'' :: DBus.Client -> Signal () -> BarIO BlockOutput