summaryrefslogtreecommitdiff
path: root/spotify-widget
diff options
context:
space:
mode:
Diffstat (limited to 'spotify-widget')
-rw-r--r--spotify-widget/spotify.lua70
1 files changed, 50 insertions, 20 deletions
diff --git a/spotify-widget/spotify.lua b/spotify-widget/spotify.lua
index f9ffa02..a3f72f0 100644
--- a/spotify-widget/spotify.lua
+++ b/spotify-widget/spotify.lua
@@ -2,33 +2,63 @@ local wibox = require("wibox")
local awful = require("awful")
local watch = require("awful.widget.watch")
-spotify_widget = wibox.widget.textbox()
-spotify_widget:set_font('Play 9')
+local get_spotify_status_cmd = '/home/'.. os.getenv("USER") .. '/.config/awesome/awesome-wm-widgets/spotify-widget/spotify_stat'
+local get_current_song_cmd = 'sp current-oneline'
--- optional icon, could be replaced by spotfiy logo (https://developer.spotify.com/design/)
-spotify_icon = wibox.widget.imagebox()
-spotify_icon:set_image("/usr/share/icons/Arc/devices/22/audio-headphones.png")
-
-watch(
- "sp current-oneline", 1,
- function(widget, stdout, _, _, _)
- if string.find(stdout, 'Error: Spotify is not running.') ~= nil then
- widget:set_text("")
- else
- widget:set_text(stdout)
- end
+spotify_widget = wibox.widget {
+ {
+ id = "icon",
+ widget = wibox.widget.imagebox,
+ },
+ {
+ id = 'current_song',
+ widget = wibox.widget.textbox,
+ font = 'Play 9'
+ },
+ layout = wibox.layout.align.horizontal,
+ set_image = function(self, path)
+ self.icon.image = path
+ end,
+ set_text = function(self, path)
+ self.current_song.text = path
end,
- spotify_widget
-)
+}
+
+local update_widget_icon = function(widget, stdout, _, _, _)
+ stdout = string.gsub(stdout, "\n", "")
+ if (stdout == 'RUNNING') then
+ widget:set_image("/usr/share/icons/Arc/actions/24/player_play.png")
+ elseif (stdout == "CORKED") then
+ widget:set_image("/usr/share/icons/Arc/actions/24/player_pause.png")
+ else
+ widget:set_image(nil)
+ end
+end
+
+local update_widget_text = function(widget, stdout, _, _, _)
+ if string.find(stdout, 'Error: Spotify is not running.') ~= nil then
+ widget:set_text('')
+ widget:set_visible(false)
+ else
+ widget:set_text(stdout)
+ widget:set_visible(true)
+ end
+end
+
+watch(get_spotify_status_cmd, 1, update_widget_icon, spotify_widget)
+watch(get_current_song_cmd, 1, update_widget_text, spotify_widget)
--[[
-- Adds mouse control to the widget:
-- - left click - play/pause
-- - scroll up - play next song
-- - scroll down - play previous song ]]
-spotify_widget:connect_signal("button::press", function(_,_,_,button)
- if (button == 1) then awful.spawn("sp play", false)
- elseif (button == 4) then awful.spawn("sp next", false)
- elseif (button == 5) then awful.spawn("sp prev", false)
+spotify_widget:connect_signal("button::press", function(_, _, _, button)
+ if (button == 1) then awful.spawn("sp play", false) -- left click
+ elseif (button == 4) then awful.spawn("sp next", false) -- scroll up
+ elseif (button == 5) then awful.spawn("sp prev", false) -- scroll down
end
+ awful.spawn.easy_async(get_spotify_status_cmd, function(stdout, stderr, exitreason, exitcode)
+ update_widget_icon(spotify_widget, stdout, stderr, exitreason, exitcode)
+ end)
end) \ No newline at end of file