packages feed

manatee-mplayer-0.0.1: Daemon.hs

-- Author:     Andy Stewart <lazycat.manatee@gmail.com>
-- Maintainer: Andy Stewart <lazycat.manatee@gmail.com>
-- 
-- Copyright (C) 2010 Andy Stewart, all rights reserved.
-- 
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- any later version.
-- 
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
-- 
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

{-# LANGUAGE DeriveDataTypeable, ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where

import Control.Concurrent.MVar
import Control.Monad (forever)
import Manatee.Core.DBus
import Manatee.Core.Types
import Manatee.Extension.Mplayer.DBus
import Manatee.Extension.Mplayer.Daemon
import Manatee.Toolkit.General.DBus
import System.Environment
import System.Posix.Types

main :: IO ()
main = do
  args <- getArgs

  -- Init mplayer status. 
  status <- mplayerInitStatus

  -- Build match rule listen dbus message.
  client <- mkSessionClientWithName mplayerDaemonBusName
  mkMplayerDaemonMatchRules client 
       [(Play,          mplayerPlay status) 
       ,(Pause,         mplayerPause status)
       ,(Stop,          mplayerStop status)
       ,(Forward,       mplayerForward status)
       ,(Backward,      mplayerBackward status)
       ,(VolumeInc,     mplayerVolumeInc status)
       ,(VolumeDec,     mplayerVolumeDec status)
       ]

  case args of
    [] -> putStrLn "PlaylistBuffer should call 'manatee-mplayer-daemon processId', and not 'manatee-mplayer-daemon'."
    [x] -> do
      let processId = read x :: ProcessID
      mkMplayerClientSignal client processId DaemonProcessStartup DaemonProcessStartupArgs

  -- Quit process when received exit signal from manatee daemon process.
  waitBroadcastExitSignal client