Initial commit

This commit is contained in:
2024-07-06 20:31:50 +02:00
commit b5f83958c9
299 changed files with 11284 additions and 0 deletions

77
src/widgets/7_mpris.lua Normal file
View File

@@ -0,0 +1,77 @@
local wibox = require('wibox')
local awful = require('awful')
local lgi = require('lgi')
local theme = require('src.theme')
local mpris = require('src.util.mpris')
local mpris_icon = wibox.widget.imagebox(theme.widget_pause)
local mpris_widget = wibox.widget.textbox()
local function variant_strip(v)
if not tostring(v):find("GLib%.Variant$") then
if type(v) == "table" and #v > 0 then
v.n = nil
end
return v
end
if v:is_container() and not v:is_of_type(lgi.GLib.VariantType.VARIANT) then
local out = {}
local n_children = v:n_children()
local idx = 0
local is_dict = v:is_of_type(lgi.GLib.VariantType.DICTIONARY)
while idx < n_children do
local val = v:get_child_value(idx)
idx = idx + 1
if is_dict then
local key = val[1]
local value = variant_strip(val[2])
out[key] = variant_strip(value)
else
out[idx] = variant_strip(val)
end
end
return out
else
return variant_strip(v.value)
end
end
local function signal_cbk(_conn, _sender, _object_path, _interface_name, _signal_name, params, _user_data)
local data = variant_strip(params)
if type(data) ~= 'table' or type(data[2]) ~= 'table' then return end
data = data[2]
if data['PlaybackStatus'] then
if data['PlaybackStatus'] == 'Playing' then
mpris_icon:set_image(theme.widget_play)
elseif data['PlaybackStatus'] == 'Paused' then
mpris_icon:set_image(theme.widget_pause)
else
mpris_icon:set_image(theme.widget_stop)
mpris_widget.text = 'Nothing playing'
end
elseif data['Metadata'] then
data = data['Metadata']
local title = data['xesam:title'] or ''
local artist = (data['xesam:artist'] or {})[1] or ''
mpris_widget.text = artist .. ' | ' .. title
end
end
lgi.Gio.bus_get_sync(lgi.Gio.BusType.SESSION):signal_subscribe(
nil, 'org.freedesktop.DBus.Properties', 'PropertiesChanged', '/org/mpris/MediaPlayer2',
nil, lgi.Gio.DBusSignalFlags.NONE, signal_cbk
)
local mpris_buttons = awful.util.table.join(
awful.button({}, 1, mpris.play_pause),
awful.button({}, 2, mpris.previous),
awful.button({}, 3, mpris.skip)
)
mpris_icon:buttons(mpris_buttons)
mpris_widget:buttons(mpris_buttons)
return { wibox.layout.fixed.horizontal(mpris_icon, mpris_widget) }