{-# LANGUAGE OverloadedStrings #-} module System.Log.DBus.Server where import DBus import DBus.Client import qualified DBus.Introspection as I import System.Log.Logger import Text.Read maybeToEither :: b -> Maybe a -> Either b a maybeToEither = flip maybe Right . Left setLogLevelFromPriorityString :: String -> String -> IO (Either Reply ()) setLogLevelFromPriorityString logPrefix levelString = let maybePriority = readMaybe levelString getMaybeResult = sequenceA $ setLogLevel logPrefix <$> maybePriority in maybeToEither (ReplyError errorInvalidParameters []) <$> getMaybeResult setLogLevel :: String -> Priority -> IO () setLogLevel logPrefix level = getLogger logPrefix >>= saveGlobalLogger . setLevel level logInterface :: Interface logInterface = defaultInterface { interfaceName = "org.taffybar.LogServer" , interfaceMethods = [ autoMethod "SetLogLevel" setLogLevelFromPriorityString ] } logPath :: ObjectPath logPath = "/org/taffybar/LogServer" startLogServer :: Client -> IO () startLogServer client = export client logPath logInterface logIntrospectionInterface :: I.Interface logIntrospectionInterface = buildIntrospectionInterface logInterface