Files
mac-dots/sketchybar/items/media.lua
xenomxrph 8d16baf6f1 initalize
2025-07-16 15:00:51 +02:00

119 lines
2.8 KiB
Lua

local colors = require("config.colors")
local whitelist = {
["Psst"] = true,
};
local media_cover = sbar.add("item", {
position = "left",
background = {
image = {
string = "media.artwork",
scale = 0.80,
},
color = colors.transparent,
},
label = { drawing = false },
icon = { drawing = false },
drawing = false,
updates = true,
popup = {
align = "center",
horizontal = true,
}
})
local media_artist = sbar.add("item", {
position = "left",
drawing = false,
padding_left = 3,
padding_right = 0,
width = 0,
icon = { drawing = false },
label = {
width = 0,
font = { size = 9 },
color = colors.with_alpha(colors.white, 0.6),
max_chars = 24,
y_offset = 6,
},
})
local media_title = sbar.add("item", {
position = "left",
drawing = false,
padding_left = 3,
padding_right = 0,
icon = { drawing = false },
label = {
font = { size = 11 },
width = 0,
max_chars = 35,
y_offset = -5,
},
})
sbar.add("item", {
position = "popup." .. media_cover.name,
icon = { string = icons.media.back },
label = { drawing = false },
click_script = "nowplaying-cli previous",
})
sbar.add("item", {
position = "popup." .. media_cover.name,
icon = { string = icons.media.play_pause },
label = { drawing = false },
click_script = "nowplaying-cli togglePlayPause",
})
sbar.add("item", {
position = "popup." .. media_cover.name,
icon = { string = icons.media.forward },
label = { drawing = false },
click_script = "nowplaying-cli next",
})
local interrupt = 0
local function animate_detail(detail)
if (not detail) then interrupt = interrupt - 1 end
if interrupt > 0 and (not detail) then return end
sbar.animate("tanh", 30, function()
media_artist:set({ label = { width = detail and "dynamic" or 0 } })
media_title:set({ label = { width = detail and "dynamic" or 0 } })
end)
end
media_cover:subscribe("media_change", function(env)
if whitelist[env.INFO.app] then
local drawing = (env.INFO.state == "playing")
media_artist:set({ drawing = drawing, label = env.INFO.artist, })
media_title:set({ drawing = drawing, label = env.INFO.title, })
media_cover:set({ drawing = drawing })
if drawing then
animate_detail(true)
interrupt = interrupt + 1
sbar.delay(5, animate_detail)
else
media_cover:set({ popup = { drawing = false } })
end
end
end)
media_cover:subscribe("mouse.entered", function(env)
interrupt = interrupt + 1
animate_detail(true)
end)
media_cover:subscribe("mouse.exited", function(env)
animate_detail(false)
end)
media_cover:subscribe("mouse.clicked", function(env)
media_cover:set({ popup = { drawing = "toggle" } })
end)
media_title:subscribe("mouse.exited.global", function(env)
media_cover:set({ popup = { drawing = false } })
end)