AwesomeFiles/config/awesome/ui/dashboard/music.lua
2022-03-26 18:45:05 +07:00

169 lines
5.2 KiB
Lua

-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
-- Theme handling library
local beautiful = require("beautiful")
local dpi = beautiful.xresources.apply_dpi
-- Widget library
local wibox = require("wibox")
-- Helpers
local helpers = require("helpers")
-- Music
----------
local music_text = wibox.widget{
font = beautiful.font_name .. "medium 8",
valign = "center",
widget = wibox.widget.textbox
}
local music_art = wibox.widget {
image = gears.filesystem.get_configuration_dir() .. "theme/assets/no_music.png",
resize = true,
widget = wibox.widget.imagebox
}
local music_art_container = wibox.widget {
music_art,
forced_height = dpi(120),
forced_width = dpi(120),
widget = wibox.container.background
}
local filter_color = {
type = 'linear',
from = {0, 0},
to = {0, 120},
stops = {{0, beautiful.dashboard_box_bg .. "cc"}, {1, beautiful.dashboard_box_bg}}
}
local music_art_filter = wibox.widget {
{
bg = filter_color,
forced_height = dpi(120),
forced_width = dpi(120),
widget = wibox.container.background
},
direction = "east",
widget = wibox.container.rotate
}
local music_title = wibox.widget{
font = beautiful.font_name .. "medium 9",
valign = "center",
widget = wibox.widget.textbox
}
local music_artist = wibox.widget{
font = beautiful.font_name .. "medium 12",
valign = "center",
widget = wibox.widget.textbox
}
local music_pos = wibox.widget{
font = beautiful.font_name .. "medium 8",
valign = "center",
widget = wibox.widget.textbox
}
-- playerctl
---------------
local playerctl = require("module.bling").signal.playerctl.lib()
playerctl:connect_signal("metadata", function(_, title, artist, album_path, __, ___, ____)
if title == "" then title = "Nothing Playing" end
if artist == "" then artist = "Nothing Playing" end
if album_path == "" then album_path = gears.filesystem.get_configuration_dir() .. "theme/assets/no_music.png" end
music_art:set_image(gears.surface.load_uncached(album_path))
music_title:set_markup_silently(helpers.colorize_text(title, beautiful.xforeground .. "b3"))
music_artist:set_markup_silently(helpers.colorize_text(artist, beautiful.xforeground .. "e6"))
end)
playerctl:connect_signal("playback_status", function(_, playing, __)
if playing then
music_text:set_markup_silently(helpers.colorize_text("Now Playing", beautiful.xforeground .. "cc"))
else
music_text:set_markup_silently(helpers.colorize_text("Music", beautiful.xforeground .. "cc"))
end
end)
playerctl:connect_signal("position", function(_, interval_sec, length_sec, player_name)
local pos_now = tostring(os.date("!%M:%S", math.floor(interval_sec)))
local pos_length = tostring(os.date("!%M:%S", math.floor(length_sec)))
local pos_markup = helpers.colorize_text(pos_now .. " / " .. pos_length, beautiful.xforeground .. "66")
music_pos:set_markup_silently(pos_markup)
end)
local music = wibox.widget{
{
{
{
music_art_container,
music_art_filter,
layout = wibox.layout.stack
},
{
{
music_text,
{
{
{
step_function = wibox.container.scroll
.step_functions
.waiting_nonlinear_back_and_forth,
speed = 50,
{
widget = music_artist,
},
forced_width = dpi(180),
widget = wibox.container.scroll.horizontal
},
{
step_function = wibox.container.scroll
.step_functions
.waiting_nonlinear_back_and_forth,
speed = 50,
{
widget = music_title,
},
forced_width = dpi(180),
widget = wibox.container.scroll.horizontal
},
layout = wibox.layout.fixed.vertical
},
bottom = dpi(15),
widget = wibox.container.margin
},
music_pos,
expand = "none",
layout = wibox.layout.align.vertical
},
top = dpi(9),
bottom = dpi(9),
left = dpi(10),
right = dpi(10),
widget = wibox.container.margin
},
layout = wibox.layout.stack
},
bg = beautiful.dashboard_box_bg,
shape = helpers.rrect(dpi(5)),
forced_width = dpi(200),
forced_height = dpi(120),
widget = wibox.container.background
},
margins = dpi(10),
widget = wibox.container.margin
}
return music