X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/7a4d6f5ffa594603ef83bc8b0e9945d12e082490..81b985db46ed6d465dfec620fd0d9be5544428cf:/widgets/alsa.lua

diff --git a/widgets/alsa.lua b/widgets/alsa.lua
index 7c26908..28bb05c 100644
--- a/widgets/alsa.lua
+++ b/widgets/alsa.lua
@@ -1,101 +1,63 @@
 
 --[[
-                                                      
-     Licensed under GNU General Public License v2     
-      * (c) 2013,      Luke Bonham                    
-      * (c) 2010-2012, Peter Hofmann                  
-      * (c) 2010,      Adrian C. <anrxc@sysphere.org> 
-                                                      
+                                                  
+     Licensed under GNU General Public License v2 
+      * (c) 2013, Luke Bonham                     
+      * (c) 2010, Adrian C. <anrxc@sysphere.org>  
+                                                  
 --]]
 
-local markup          = require("lain.util.markup")
-local run_in_terminal = require("lain.helpers").run_in_terminal
+local newtimer        = require("lain.helpers").newtimer
 
-local awful           = require("awful")
-local beautiful       = require("beautiful")
 local wibox           = require("wibox")
 
-local io              = io
-local string          = { format = string.format,
-                          match  = string.match }
+local io              = { popen  = io.popen }
+local string          = { match  = string.match }
 
 local setmetatable    = setmetatable
 
--- ALSA volume infos
--- nain.widgets.alsa
-local alsa = {
-    volume = 0,
-    mute = false,
-}
-
-function worker(args)
-    local args = args or {}
-    local channel = args.channel or "Master"
-    local step = args.step or "1%"
-    local header = args.header or " Vol "
-    local header_color = args.header_color or beautiful.fg_normal or "#FFFFFF"
-    local color = args.color or beautiful.fg_focus or "#FFFFFF"
-
-    local myvolume = wibox.widget.textbox()
-    local myvolumeupdate = function()
-        local f = io.popen('amixer get ' .. channel)
+-- ALSA volume
+-- lain.widgets.alsa
+local alsa = {}
+
+local function worker(args)
+    local args     = args or {}
+    local timeout  = args.timeout or 5
+    local channel  = args.channel or "Master"
+    local settings = args.settings or function() end
+
+    alsa.widget = wibox.widget.textbox('')
+
+    function alsa.update()
+        local f = assert(io.popen('amixer get ' .. channel))
         local mixer = f:read("*all")
         f:close()
 
-        local volume, mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
+        volume_now = {}
+
+        volume_now.level, volume_now.status = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
 
-        if volume == nil
+        if volume_now.level == nil
         then
-            alsa.volume = 0
-        else
-            alsa.volume = volume
+            volume_now.level  = "0"
+            volume_now.status = "off"
         end
 
-        if mute == nil or mute == 'on'
+        if volume_now.status == ""
         then
-            alsa.mute = true
-            mute = ''
-        else
-            alsa.mute = false
-            mute = 'M'
+            if volume_now.level == "0"
+            then
+                volume_now.status = "off"
+            else
+                volume_now.status = "on"
+            end
         end
 
-        local ret = markup(color, string.format("%d%s", volume, mute))
-        myvolume:set_markup(markup(header_color, header) .. ret .. " ")
+        widget = alsa.widget
+        settings()
     end
 
-    local myvolumetimer = timer({ timeout = 5 })
-    myvolumetimer:connect_signal("timeout", myvolumeupdate)
-    myvolumetimer:start()
-    myvolumetimer:emit_signal("timeout")
-
-    myvolume:buttons(awful.util.table.join(
-        awful.button({}, 1,
-            function()
-                run_in_terminal('alsamixer')
-             end),
-        awful.button({}, 3,
-            function()
-                awful.util.spawn('amixer sset ' .. channel ' toggle')
-            end),
-
-        awful.button({}, 4,
-            function()
-                awful.util.spawn('amixer sset ' .. channel .. ' ' .. step '+')
-                myvolumeupdate()
-            end),
-
-        awful.button({}, 5,
-            function()
-                awful.util.spawn('amixer sset ' .. channel .. ' ' .. step '-')
-                myvolumeupdate()
-            end)
-    ))
-
-    alsa.widget = myvolume
-    alsa.channel = channel
-    alsa.step = step
-    alsa.notify = myvolumeupdate
+    newtimer("alsa", timeout, alsa.update)
 
     return setmetatable(alsa, { __index = alsa.widget })
 end