diff options
| author | Martin Perner <martin@perner.cc> | 2011-08-30 16:38:04 +0200 | 
|---|---|---|
| committer | Martin Perner <martin@perner.cc> | 2011-08-30 16:44:23 +0200 | 
| commit | 23a3b81bfd480e5a1d63bbad91e2b611b99758e1 (patch) | |
| tree | 01c49d1fc6b67e49d92552cbe29638d4632dffd2 | |
| parent | d17958115fbb80d5baf58830f33390cd21acedac (diff) | |
| download | xmobar-23a3b81bfd480e5a1d63bbad91e2b611b99758e1.tar.gz xmobar-23a3b81bfd480e5a1d63bbad91e2b611b99758e1.tar.bz2  | |
catch alsa exception on decibel acquire
This closes #17.
For some reasons the alsa interface does not provide a dB value on all
systems. Instead an error is returned.
The alsa-mixer library checks for such return values and throws an
exception if one is detected.
This patch catches the exception and returns 0 as dB value.
| -rw-r--r-- | README | 8 | ||||
| -rw-r--r-- | src/Plugins/Monitors/Volume.hs | 5 | ||||
| -rw-r--r-- | xmobar.cabal | 1 | 
3 files changed, 10 insertions, 4 deletions
@@ -603,10 +603,12 @@ Monitors have default aliases.      - `--lowd` _number_ Low threshold for dB. Defaults to -30.0.  - Variables that can be used with the `-t`/`--template` argument:              `volume`, `volumebar`, `dB`, `status` +- Note that `dB` might only return 0 on your system. This is known +  to happen on systems with a pulseaudio backend.  - Default template: `Vol: <volume>% <status>` -- Requires the package [alsa-mixer] installed in your system. In addition, -  to activate this plugin you must pass `--flags="with_alsa"` during -  compilation. +- Requires the package [alsa-core] and [alsa-mixer] installed in your +  system. In addition, to activate this plugin you must pass +  `--flags="with_alsa"` during compilation.  `MPD Args RefreshRate` diff --git a/src/Plugins/Monitors/Volume.hs b/src/Plugins/Monitors/Volume.hs index 50a6ed4..3e3a8b9 100644 --- a/src/Plugins/Monitors/Volume.hs +++ b/src/Plugins/Monitors/Volume.hs @@ -14,10 +14,12 @@  module Plugins.Monitors.Volume (runVolume, volumeConfig) where +import Prelude hiding ( catch )  import Control.Monad ( liftM, mplus )  import Data.Maybe  import Plugins.Monitors.Common  import Sound.ALSA.Mixer +import Sound.ALSA.Exception ( catch )  import System.Console.GetOpt  volumeConfig :: IO MConfig @@ -115,7 +117,8 @@ runVolume mixerName controlName argv = do          maybeNA = maybe (return "N/A")      (lo, hi) <- io $ getRange volumeControl      val <- io $ getChannel FrontLeft $ value volumeControl -    db <- io $ getChannel FrontLeft $ dB volumeControl +    db <- io $ catch (getChannel FrontLeft $ dB volumeControl) +                     (\_ -> return $ Just 0)      sw <- io $ getChannel FrontLeft switchControl      p <- maybeNA (formatVol lo hi) val      b <- maybeNA (formatVolBar lo hi) val diff --git a/xmobar.cabal b/xmobar.cabal index ecafe1d..5d77997 100644 --- a/xmobar.cabal +++ b/xmobar.cabal @@ -122,6 +122,7 @@ executable xmobar      if flag(with_alsa) || flag(all_extensions)         build-depends: alsa-mixer == 0.1.* +       build-depends: alsa-core == 0.5.*         other-modules: Plugins.Monitors.Volume         cpp-options: -DALSA  | 
