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)