219 lines
4.8 KiB
Lua
219 lines
4.8 KiB
Lua
local mpc = req_rel(..., "util")
|
|
local mpc_widget = {}
|
|
|
|
mpc_widget.title = wibox.widget.textbox("MPD is not")
|
|
mpc_widget.title.valign = "center"
|
|
mpc_widget.title.align = "left"
|
|
mpc_widget.title.font = config.core.font.normal
|
|
mpc_widget.title.ellipsize = "end"
|
|
mpc_widget.title.forced_width = beautiful.dpi(config.mpc.width)
|
|
|
|
mpc_widget.artist = wibox.widget.textbox("connected")
|
|
mpc_widget.artist.valign = "center"
|
|
mpc_widget.artist.align = "left"
|
|
mpc_widget.artist.font = config.core.font.normal
|
|
mpc_widget.artist.ellipsize = "end"
|
|
mpc_widget.artist.forced_width = beautiful.dpi(config.mpc.width)
|
|
|
|
mpc_widget.volume = wibox.widget.textbox("??")
|
|
mpc_widget.volume.valign = "center"
|
|
mpc_widget.volume.align = "left"
|
|
mpc_widget.volume.font = config.core.font.normal_small
|
|
mpc_widget.volume.ellipsize = "end"
|
|
mpc_widget.volume.forced_width = beautiful.dpi(10)
|
|
|
|
|
|
mpc_widget.icon_play = wibox.widget {
|
|
resize = true,
|
|
image = beautiful.icons.music.blue.playing,
|
|
widget = wibox.widget.imagebox
|
|
}
|
|
|
|
|
|
|
|
mpc_widget.left = wibox.widget {
|
|
wibox.widget {
|
|
{
|
|
mpc_widget.icon_play,
|
|
top = beautiful.dpi(2),
|
|
bottom = beautiful.dpi(2),
|
|
left = 0, right = 0,
|
|
layout = wibox.container.margin,
|
|
},
|
|
mpc_widget.volume,
|
|
|
|
forced_num_cols = 1,
|
|
forced_num_rows = 2,
|
|
homogeneous = true,
|
|
expand = true,
|
|
layout = wibox.layout.grid
|
|
},
|
|
layout = wibox.container.background
|
|
}
|
|
|
|
mpc_widget.right = wibox.widget {
|
|
wibox.widget {
|
|
mpc_widget.title,
|
|
mpc_widget.artist,
|
|
|
|
forced_num_cols = 1,
|
|
forced_num_rows = 2,
|
|
homogeneous = true,
|
|
expand = true,
|
|
layout = wibox.layout.grid
|
|
},
|
|
layout = wibox.container.background,
|
|
}
|
|
|
|
mpc_widget.widget = wibox.widget {
|
|
{
|
|
{
|
|
mpc_widget.left,
|
|
mpc_widget.right,
|
|
|
|
forced_num_cols = 2,
|
|
forced_num_rows = 1,
|
|
homogeneous = false,
|
|
vertical_homogenous = true;
|
|
horizontal_homogenous = false;
|
|
expand = true,
|
|
layout = wibox.layout.grid
|
|
},
|
|
|
|
top = 0, bottom = 0,
|
|
left = beautiful.dpi(2),
|
|
right = beautiful.dpi(2),
|
|
layout = wibox.container.margin,
|
|
},
|
|
layout = wibox.container.background,
|
|
}
|
|
|
|
|
|
mpc_widget.widget:connect_signal("mouse::enter",function(result)
|
|
mpc_widget.widget.bg = beautiful.color.bar.hover_bg
|
|
end)
|
|
|
|
mpc_widget.widget:connect_signal("mouse::leave", function(result)
|
|
mpc_widget.widget.bg = beautiful.color.transparent
|
|
end)
|
|
|
|
|
|
mpc_widget.widget:connect_signal("button::press",
|
|
function(_, _, _, button, mods)
|
|
if (button == 3) or (button == 1)then
|
|
mpc.mpc_command("toggle")
|
|
end
|
|
mpc_widget.readupdate()
|
|
end
|
|
)
|
|
|
|
|
|
mpc_widget.right:connect_signal("button::press",
|
|
function(_, _, _, button, mods)
|
|
if (button == 4) then -- Scroll up
|
|
mpc.mpc_command("prev")
|
|
elseif (button == 5) then -- Scroll down
|
|
mpc.mpc_command("next")
|
|
end
|
|
|
|
mpc_widget.readupdate()
|
|
end
|
|
)
|
|
|
|
|
|
mpc_widget.left:connect_signal("button::press",
|
|
function(_, _, _, button, mods)
|
|
if (button == 4) then -- Scroll up
|
|
mpc.mpc_command("volume +5")
|
|
elseif (button == 5) then -- Scroll down
|
|
mpc.mpc_command("volume -5")
|
|
end
|
|
mpc_widget.readupdate()
|
|
end
|
|
)
|
|
|
|
|
|
--[[
|
|
function pango.escape(text)
|
|
local replacements = {
|
|
["&"] = "&",
|
|
["<"] = "<",
|
|
[">"] = ">",
|
|
["\""] = """,
|
|
["'"] = "'",
|
|
}
|
|
return string.gsub(text, "[&<>'\"]", replacements)
|
|
end
|
|
]]--
|
|
|
|
mpc_widget.readupdate = function()
|
|
-- Update title and artist
|
|
mpc.mpc_command("current --format \"title=%title% artist=%artist%\"",
|
|
function(stdout, stderr, exitreason, exitcode)
|
|
if (stdout == "") then
|
|
return
|
|
end
|
|
|
|
--debug_message(stdout);
|
|
--debug_message(string.match(stdout, "title=(.*)artist="));
|
|
|
|
mpc_widget.title.text = string.match(stdout, "title=(.*)artist=")
|
|
mpc_widget.artist.text = string.match(stdout, "artist=(.*)")
|
|
end
|
|
)
|
|
|
|
-- Update status
|
|
mpc.mpc_command("status",
|
|
function(stdout, stderr, exitreason, exitcode)
|
|
local play = string.match(stdout, "(%[playing)") or false
|
|
local pause = string.match(stdout, "(%[paused)") or false
|
|
local stop = not (play or pause)
|
|
|
|
if (play) then
|
|
mpc_widget.icon_play.image = beautiful.icons.music.blue.playing
|
|
elseif (pause) then
|
|
mpc_widget.icon_play.image = beautiful.icons.music.blue.paused
|
|
elseif (stop) then
|
|
mpc_widget.icon_play.image = beautiful.icons.music.blue.stopped
|
|
end
|
|
|
|
local volume = string.match(stdout, "volume: ?(%d?%d?%d)%%")
|
|
|
|
if (volume) then
|
|
mpc_widget.volume.text = volume .. "%"
|
|
else
|
|
mpc_widget.volume.text = ""
|
|
end
|
|
end
|
|
)
|
|
end
|
|
|
|
|
|
-- Short delay here, the --wait option makes mpc block until
|
|
-- a change is detected.
|
|
mpc.mpc_watch(
|
|
"current --wait",
|
|
0.01,
|
|
function(_, stdout)
|
|
mpc_widget.readupdate()
|
|
end,
|
|
mpc_widget.widget
|
|
)
|
|
|
|
mpc.mpc_watch(
|
|
"current",
|
|
1,
|
|
function(_, stdout)
|
|
mpc_widget.readupdate()
|
|
end,
|
|
mpc_widget.widget
|
|
)
|
|
|
|
|
|
-- Make sure you do an initial read, otherwise the widget will
|
|
-- not update until a change occurs.
|
|
mpc_widget.readupdate()
|
|
|
|
|
|
return mpc_widget
|