xmonad-config/lib/Xmobar/Plugins/Bluetooth.hs

36 lines
1.0 KiB
Haskell
Raw Normal View History

2020-03-21 01:18:38 -04:00
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
module Xmobar.Plugins.Bluetooth where
import DBus
import DBus.Client
import Xmobar
data Bluetooth = Bluetooth (String, String, String) Int
deriving (Read, Show)
2020-03-21 01:18:38 -04:00
callGetPowered :: Client -> IO (Either MethodError Variant)
callGetPowered client =
getProperty client (methodCall "/org/bluez/hci0" "org.bluez.Adapter1" "Powered")
{ methodCallDestination = Just "org.bluez" }
2020-03-21 14:30:27 -04:00
2020-03-21 01:18:38 -04:00
instance Exec Bluetooth where
alias (Bluetooth _ _) = "bluetooth"
rate (Bluetooth _ r) = r
run (Bluetooth (text, colorOn, colorOff) _) = do
2020-03-21 01:18:38 -04:00
client <- connectSystem
reply <- callGetPowered client
disconnect client
return $ fmtState $ procReply reply
2020-03-21 01:18:38 -04:00
where
procReply = \case
-- TODO handle errors?
Right r -> fromVariant r
Left _ -> Nothing
2020-03-21 01:18:38 -04:00
fmtState = \case
Just s -> wrapColor text $ if s then colorOn else colorOff
Nothing -> "N/A"
wrapColor s c = "<fc=" ++ c ++ ">" ++ s ++ "</fc>"