- alsabar.bar:set_width(width)
- alsabar.bar:set_height(height)
- alsabar.bar:set_ticks(ticks)
- alsabar.bar:set_ticks_size(ticks_size)
- alsabar.bar:set_vertical(vertical)
-
- function alsabar.update()
- -- Get mixer control contents
- local mixer = read_pipe(string.format("%s get %s", alsabar.cmd, alsabar.channel))
-
- -- Capture mixer control state: [5%] ... ... [on]
- local volu, mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
-
- -- HDMIs can have a channel different from Master for toggling mute
- if alsabar.togglechannel then
- mute = string.match(read_pipe(string.format("%s get %s", alsabar.cmd, alsabar.togglechannel)), "%[(%a+)%]")
- end
-
- if (volu and tonumber(volu) ~= alsabar._current_level) or (mute and string.match(mute, "on") ~= alsabar._muted)
- then
- alsabar._current_level = tonumber(volu)
- alsabar.bar:set_value(alsabar._current_level / 100)
- if not mute and tonumber(volu) == 0 or mute == "off"
- then
- alsabar._muted = true
- alsabar.tooltip:set_text (" [Muted] ")
- alsabar.bar:set_color(alsabar.colors.mute)
+
+ function alsabar.update(callback)
+ helpers.async(alsabar.cmd, function(mixer)
+ local volu,mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
+ if (volu and tonumber(volu) ~= alsabar._current_level) or (mute and string.match(mute, "on") ~= alsabar._muted) then
+ alsabar._current_level = tonumber(volu) or alsabar._current_level
+ alsabar.bar:set_value(alsabar._current_level / 100)
+ if (not mute and tonumber(volu) == 0) or mute == "off" then
+ alsabar._muted = true
+ alsabar.tooltip:set_text ("[Muted]")
+ alsabar.bar.color = alsabar.colors.mute
+ else
+ alsabar._muted = false
+ alsabar.tooltip:set_text(string.format("%s: %s", alsabar.channel, volu))
+ alsabar.bar.color = alsabar.colors.unmute
+ end
+
+ volume_now = {}
+ volume_now.level = tonumber(volu)
+ volume_now.status = mute
+
+ settings()
+
+ if type(callback) == "function" then callback() end
+ end
+ end)
+ end
+
+ function alsabar.notify()
+ alsabar.update(function()
+ local preset = alsabar.notification_preset
+
+ if alsabar._muted then
+ preset.title = string.format("%s - Muted", alsabar.channel)