194 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
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 = "Hack NF 12"
 | 
						|
mpc_widget.title.ellipsize = "end"
 | 
						|
mpc_widget.title.forced_width = beautiful.dpi(conf.mpc_width)
 | 
						|
 | 
						|
mpc_widget.artist = wibox.widget.textbox("connected")
 | 
						|
mpc_widget.artist.valign = "center"
 | 
						|
mpc_widget.artist.align = "left"
 | 
						|
mpc_widget.artist.font = "Hack NF 12"
 | 
						|
mpc_widget.artist.ellipsize = "end"
 | 
						|
mpc_widget.artist.forced_width = beautiful.dpi(conf.mpc_width)
 | 
						|
 | 
						|
mpc_widget.volume = wibox.widget.textbox("??")
 | 
						|
mpc_widget.volume.valign = "center"
 | 
						|
mpc_widget.volume.align = "left"
 | 
						|
mpc_widget.volume.font = "Hack NF 10"
 | 
						|
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 {
 | 
						|
	{
 | 
						|
		{   -- Right spacer
 | 
						|
			widget = wibox.widget.separator,
 | 
						|
			color = beautiful.color.transparent,
 | 
						|
			forced_width = beautiful.dpi(3)
 | 
						|
		},
 | 
						|
 | 
						|
		mpc_widget.left,
 | 
						|
		mpc_widget.right,
 | 
						|
 | 
						|
		{   -- Left spacer
 | 
						|
			widget = wibox.widget.separator,
 | 
						|
			color = beautiful.color.transparent,
 | 
						|
			forced_width = beautiful.dpi(3)
 | 
						|
		},
 | 
						|
		layout = wibox.layout.align.horizontal,
 | 
						|
	},
 | 
						|
	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
 | 
						|
			bin.mpc.command("toggle")
 | 
						|
		end
 | 
						|
		mpc_widget.readupdate()
 | 
						|
	end
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
mpc_widget.right:connect_signal("button::press",
 | 
						|
	function(_, _, _, button, mods)
 | 
						|
		if (button == 4) then -- Scroll up
 | 
						|
			bin.mpc.command("prev")
 | 
						|
		elseif (button == 5) then -- Scroll down
 | 
						|
			bin.mpc.command("next")
 | 
						|
		end
 | 
						|
 | 
						|
		mpc_widget.readupdate()
 | 
						|
	end
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
mpc_widget.left:connect_signal("button::press",
 | 
						|
	function(_, _, _, button, mods)
 | 
						|
		if (button == 4) then -- Scroll up
 | 
						|
			bin.mpc.command("volume +5")
 | 
						|
		elseif (button == 5) then -- Scroll down
 | 
						|
			bin.mpc.command("volume -5")
 | 
						|
		end
 | 
						|
		mpc_widget.readupdate()
 | 
						|
	end
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
mpc_widget.update = function(stdout)
 | 
						|
	if (stdout == "") then
 | 
						|
		return
 | 
						|
	end
 | 
						|
 | 
						|
	mpc_widget.title.markup = string.match(stdout, "title=(.*)artist=")
 | 
						|
	mpc_widget.artist.markup = string.match(stdout, "artist=(.*)")
 | 
						|
 | 
						|
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
mpc_widget.update_status = function(stdout)
 | 
						|
	play = string.match(stdout, "(%[playing)") or false
 | 
						|
	pause = string.match(stdout, "(%[paused)") or false
 | 
						|
	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
 | 
						|
 | 
						|
	volume = string.match(stdout, "volume: (%d?%d?%d)%%")
 | 
						|
	if (volume) then
 | 
						|
		mpc_widget.volume.markup = volume .. "%"
 | 
						|
	else
 | 
						|
		mpc_widget.volume.markup = ""
 | 
						|
	end
 | 
						|
end
 | 
						|
 | 
						|
mpc_widget.readupdate = function()
 | 
						|
	bin.mpc.command("current --format \"title=%title% artist=%artist%\"",
 | 
						|
		function(stdout, stderr, exitreason, exitcode)
 | 
						|
			mpc_widget.update(stdout)
 | 
						|
		end
 | 
						|
	)
 | 
						|
 | 
						|
	bin.mpc.command("status",
 | 
						|
		function(stdout, stderr, exitreason, exitcode)
 | 
						|
			mpc_widget.update_status(stdout)
 | 
						|
		end
 | 
						|
	)
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
-- The time here is super short because the --wait option is used in mpc.
 | 
						|
--  It will not return a response until changes are seen.
 | 
						|
bin.mpc.watch("current --wait", 0.01, function(_, stdout) mpc_widget.readupdate() end, mpc_widget.widget)
 | 
						|
bin.mpc.watch("current", 1, function(_, stdout) mpc_widget.readupdate() end, mpc_widget.widget)
 | 
						|
 | 
						|
 | 
						|
-- Make sure you do an initial read, though, otherwise the widget will
 | 
						|
--  not update until a change occurs.
 | 
						|
mpc_widget.readupdate()
 | 
						|
 | 
						|
 | 
						|
return mpc_widget.widget
 |