media_control.lua: make volume management fully async
This commit is contained in:
parent
5961d734b5
commit
fbc13ab63f
@ -187,6 +187,7 @@ theme.volume_osd_border_color = theme.border_normal
|
||||
theme.volume_osd_border_width = dpi(0)
|
||||
theme.volume_osd_progress_bg = theme.bg_minimize
|
||||
theme.volume_osd_progress_color = "#ffffff"
|
||||
theme.volume_osd_progress_color_muted = "#555555"
|
||||
theme.volume_osd_progress_border_color = theme.volume_osd_border_color
|
||||
theme.volume_osd_progress_border_width = dpi(0)
|
||||
theme.volume_osd_image_color = "#ffffff"
|
||||
|
@ -23,46 +23,53 @@ local config = require("config")
|
||||
local hasPlayerctl = os.execute("playerctl -v") == true
|
||||
|
||||
-- playerctl
|
||||
function sendToPlayerctl(command)
|
||||
os.execute("playerctl " .. command)
|
||||
function sendToPlayerctl(command, callback)
|
||||
callback = callback or function()
|
||||
end
|
||||
awful.spawn.easy_async("playerctl " .. command, callback)
|
||||
end
|
||||
|
||||
-- Spotify
|
||||
function sendToSpotify(command)
|
||||
awful.util.spawn_with_shell("dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player." .. command)
|
||||
function sendToSpotify(command, callback)
|
||||
callback = callback or function()
|
||||
end
|
||||
awful.spawn.easy_async_with_shell("dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player." .. command, callback)
|
||||
end
|
||||
|
||||
-- Brightness control
|
||||
function getBrightness()
|
||||
local handle = io.popen("xbacklight -get")
|
||||
local brightness = handle:read("*a")
|
||||
handle:close()
|
||||
return brightness
|
||||
function getBrightness(callback)
|
||||
callback = callback or function()
|
||||
end
|
||||
|
||||
awful.spawn.easy_async("xbacklight -get", function(stdout, stderr, reason, exit_code)
|
||||
callback(stdout)
|
||||
end)
|
||||
end
|
||||
|
||||
function increaseBrightness()
|
||||
os.execute("xbacklight -inc 2")
|
||||
function increaseBrightness(callback)
|
||||
callback = callback or function()
|
||||
end
|
||||
awful.spawn.easy_async("xbacklight -inc 2", callback)
|
||||
end
|
||||
|
||||
function decreaseBrightness()
|
||||
os.execute("xbacklight -dec 2")
|
||||
function decreaseBrightness(callback)
|
||||
callback = callback or function()
|
||||
end
|
||||
awful.spawn.easy_async("xbacklight -dec 2", callback)
|
||||
end
|
||||
|
||||
|
||||
-- Volume control
|
||||
function getVolume()
|
||||
if isMuted() then return 0 end
|
||||
local handle = io.popen("amixer " .. config.audio.card .. " sget '" .. config.audio.device .. "' -M | awk -F\"[][]\" '/%/ { print $2 }' | head -n 1", "r")
|
||||
local volume = string.gsub(handle:read("*a"), "[\n%%]+", "") / 100
|
||||
handle:close()
|
||||
return volume
|
||||
function isMuted(callback)
|
||||
awful.spawn.easy_async_with_shell("amixer " .. config.audio.card .. " sget '" .. config.audio.device .. "' | egrep 'Playback.*?\\[o' | egrep -o '\\[o.+\\]'", function(stdout, stderr, reason, exit_code)
|
||||
callback(string.match(string.gsub(stdout, "[\n]+", ""), "off"))
|
||||
end)
|
||||
end
|
||||
|
||||
function isMuted()
|
||||
local handle = io.popen("amixer " .. config.audio.card .. " sget '" .. config.audio.device .. "' | egrep 'Playback.*?\\[o' | egrep -o '\\[o.+\\]'", "r")
|
||||
local muted = string.match(string.gsub(handle:read("*a"), "[\n]+", ""), "off")
|
||||
handle:close()
|
||||
return muted
|
||||
function getVolume(callback)
|
||||
awful.spawn.easy_async_with_shell("amixer " .. config.audio.card .. " sget '" .. config.audio.device .. "' -M | awk -F\"[][]\" '/%/ { print $2 }' | head -n 1", function(stdout, stderr, reason, exit_code)
|
||||
callback(string.gsub(stdout, "[\n%%]+", "") / 100)
|
||||
end)
|
||||
end
|
||||
|
||||
function getVolumeImage(volume)
|
||||
@ -159,6 +166,18 @@ local previousTrack = function()
|
||||
end
|
||||
|
||||
local displayVolume = function()
|
||||
isMuted(function(muted)
|
||||
getVolume(function(volume)
|
||||
-- Update values
|
||||
imagebox.image = getVolumeImage(muted and 0 or volume)
|
||||
progressbar.value = volume
|
||||
progressbar.color = muted and beautiful.volume_osd_progress_color_muted or beautiful.volume_osd_progress_color
|
||||
|
||||
if timer ~= nil and timer.started then
|
||||
timer:again()
|
||||
return
|
||||
end
|
||||
|
||||
-- Update screen
|
||||
local screen = awful.screen:focused()
|
||||
volumeWibox.screen = screen
|
||||
@ -170,13 +189,6 @@ local displayVolume = function()
|
||||
y = (screen.geometry.y + position[2])
|
||||
})
|
||||
|
||||
-- Get volume
|
||||
local volume = getVolume()
|
||||
|
||||
-- Update values
|
||||
imagebox.image = getVolumeImage(volume)
|
||||
progressbar.value = volume
|
||||
|
||||
-- Show
|
||||
volumeWibox.visible = true
|
||||
|
||||
@ -193,19 +205,25 @@ local displayVolume = function()
|
||||
end
|
||||
}
|
||||
timer:start()
|
||||
end)
|
||||
end)
|
||||
end
|
||||
local raiseVolume = function()
|
||||
os.execute("amixer " .. config.audio.card .. " set '" .. config.audio.device .. "' 5%+ -M")
|
||||
awful.spawn.easy_async("amixer " .. config.audio.card .. " set '" .. config.audio.device .. "' 5%+ -M", function(stdout, stderr, reason, exit_code)
|
||||
displayVolume()
|
||||
end)
|
||||
end
|
||||
local lowerVolume = function()
|
||||
os.execute("amixer " .. config.audio.card .. " set '" .. config.audio.device .. "' 5%- -M")
|
||||
awful.spawn.easy_async("amixer " .. config.audio.card .. " set '" .. config.audio.device .. "' 5%- -M", function(stdout, stderr, reason, exit_code)
|
||||
displayVolume()
|
||||
end)
|
||||
end
|
||||
local toggleMute = function()
|
||||
local muted = isMuted()
|
||||
os.execute("amixer " .. config.audio.card .. " set '" .. config.audio.device .. "' " .. (muted and 'on' or 'off'))
|
||||
isMuted(function(muted)
|
||||
awful.spawn.easy_async("amixer " .. config.audio.card .. " set '" .. config.audio.device .. "' " .. (muted and 'on' or 'off'), function(stdout, stderr, reason, exit_code)
|
||||
displayVolume()
|
||||
end)
|
||||
end)
|
||||
end
|
||||
-- }}}
|
||||
|
||||
@ -240,9 +258,9 @@ function getKeys(keys)
|
||||
|
||||
-- Backlight control
|
||||
hotkey.make(keys.brightnessUp, increaseBrightness,
|
||||
{ description = "Increase screen backlight brightness", group = "media control"}),
|
||||
{ description = "Increase screen backlight brightness", group = "media control" }),
|
||||
hotkey.make(keys.brightnessDown, decreaseBrightness,
|
||||
{ description = "Decrease screen backlight brightness", group = "media control"})
|
||||
{ description = "Decrease screen backlight brightness", group = "media control" })
|
||||
end
|
||||
|
||||
return {
|
||||
|
Loading…
Reference in New Issue
Block a user