-- Handle volume (through pulseaudio)

local awful        = require("awful")
local naughty      = require("naughty")
local tonumber     = tonumber
local string       = string
local os           = os

-- A bit odd, but...
require("lib/icons")
local icons        = package.loaded["vbe/icons"]

module("vbe/volume")

local volid = nil
local function change(what)
   os.execute("amixer -q sset Master " .. what, false)
   -- Read the current value
   local out = awful.util.pread("amixer sget Master")
   local vol, mute = out:match("([%d]+)%%.*%[([%l]*)")
   if not mute or not vol then return end

   vol = tonumber(vol)
   local icon = "high"
   if mute ~= "on" or vol == 0 then
      icon = "muted"
   elseif vol < 30 then
      icon = "low"
   elseif vol < 60 then
      icon = "medium"
   end
   icon = icons.lookup({name = "audio-volume-" .. icon,
		       type = "status"})

   volid = naughty.notify({ text = string.format("%3d %%", vol),
			    icon = icon,
			    font = "Free Sans Bold 24",
			    replaces_id = volid }).id
end

function increase()
   change("5%+")
end

function decrease()
   change("5%-")
end

function toggle()
   change("toggle")
end

-- run pavucontrol
function mixer()
   awful.util.spawn("pavucontrol", false)
end