packages feed

dbus-th-0.1.0.0: Test.hs

{-# LANGUAGE TemplateHaskell, TypeOperators, OverloadedStrings #-}

import Control.Monad
import qualified Data.Map as M
import DBus.TH
import System.Environment

type Ints = [Int32]

type Buddies = M.Map String Int32

interface "im.pidgin.purple.PurpleInterface" (Just "Purple")
    [ "Strreplace" =:: ''String :-> ''String :-> ''String :-> Return ''String `as` "replace"
    , "AccountsFind" =:: ''String :-> ''String :-> Return ''Int32
    , "AccountsGetAllActive" =:: Return ''Ints
    , "FindBuddy" =:: ''Int32 :-> ''String :-> Return ''Int32
    , "BuddyGetGroup" =:: ''Int32 :-> Return ''Int32
    , "GroupGetName"  =:: ''Int32 :-> Return ''String
    , "BlistGetBuddies" =:: Return ''Ints
    , "BuddyGetAlias" =:: ''Int32 :-> Return ''String ]

main = do
  [account, buddy] <- getArgs
  dbus <- connectSession
  purple <- proxy dbus "im.pidgin.purple.PurpleService" "/im/pidgin/purple/PurpleObject"
  Just res <- replace purple "ab12cc 12 ee" "12" "ZZ"
  putStrLn res
  Just acc <- accountsFind purple account "prpl-jabber"
  Just buddiesL <- blistGetBuddies purple
  buddies <- forM buddiesL $ \buddy -> do
                    Just name <- buddyGetAlias purple buddy
                    return (name, buddy)
  let buddiesMap = M.fromList buddies
  let Just juick = M.lookup buddy buddiesMap
  Just grp <- buddyGetGroup purple juick
  Just grpName <- groupGetName purple grp
  putStrLn $ buddy ++ "'s group: " ++ show grpName