
module Messager where

import ServerMonad
import Builder.Utils

import Control.Concurrent.MVar
import Control.Monad
import System.IO

messager :: Directory -> Maybe (FilePath, Maybe Handle) -> Verbosity -> IO ()
messager directory (Just (fp, Nothing)) v
 = do h <- openFile fp AppendMode
      hSetBuffering h LineBuffering
      messager directory (Just (fp, Just h)) v
messager directory m v
 = do req <- takeMVar (dir_messagerVar directory)
      case req of
          Message v' str ->
              do case m of
                     Just (_, Just h) ->
                         hPutStrLn h str
                     _ ->
                         return ()
                 when (v >= v') $ putStrLn str
                 messager directory m v
          Reopen ->
              do case m of
                     Just (fp, Just h) ->
                         do hClose h
                            messager directory (Just (fp, Nothing)) v
                     _ ->
                         messager directory m v

