packages feed

musicScroll-0.2.0.0: src/MusicScroll/RealMain.hs

module MusicScroll.RealMain (realMain) where

import Control.Concurrent.Async (withAsync, waitAnyCancel)
import Control.Concurrent.STM (atomically)
import Control.Concurrent.STM.TBQueue (newTBQueue)
import Data.Functor (void)

import MusicScroll.LyricsPipeline
import MusicScroll.MPRIS
import MusicScroll.UI

realMain :: IO ()
realMain =
  do dbusSongChan <- atomically (newTBQueue sizeOfQueue)
     eventChan    <- atomically (newTBQueue sizeOfQueue)
     suplChan     <- atomically (newTBQueue sizeOfQueue)
     withAsync (setupUIThread eventChan suplChan) $ \setupUIA ->
       withAsync (lyricsThread dbusSongChan suplChan eventChan) $ \lyricsA ->
         withAsync (dbusThread dbusSongChan eventChan) $ \dbusA ->
           void $ waitAnyCancel [setupUIA, lyricsA, dbusA]