packages feed

court-0.1.0.0: src/Main.hs

import Control.Concurrent

import System.IO
import System.Posix.Process
import System.Posix.User

import Court.Builder
import Court.Options
import Court.PluginManager
import Court.Queue

main :: IO ()
main = do
  hSetBuffering stderr LineBuffering
  opts <- getOptions

  case optGroup opts of
    Nothing -> return ()
    Just name -> do
      groupEntry <- getGroupEntryForName name
      setGroupID $ groupID groupEntry

  case optUser opts of
    Nothing -> return ()
    Just name -> do
      userEntry <- getUserEntryForName name
      setUserID $ userID userEntry

  if optDaemonize opts
    then forkProcess (createSession >> main' opts) >> return ()
    else main' opts

main' :: Options -> IO ()
main' opts = do
  queueTVar <- newTVarIO mempty
  _ <- forkIO $ builder opts queueTVar
  pluginManager opts queueTVar