diff --git a/lib/spotify.lua b/lib/spotify.lua index 1c756cd..3e0182f 100644 --- a/lib/spotify.lua +++ b/lib/spotify.lua @@ -7,62 +7,72 @@ -- mdbus2 org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 local awful = require("awful") +local dbg = dbg local pairs = pairs +local os = os local capi = { client = client } module("vbe/spotify") --- Send a command to spotify -local function spotify(command) - awful.util.spawn("dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify " .. - "/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player." .. command, false) -end - -function playpause() - spotify("PlayPause") -end - -function play() - -- Play seems unable to play in many situations, let's use - -- PlayPause instead. - spotify("PlayPause") -end - -function pause() - spotify("Pause") -end - -function stop() - spotify("Stop") -end - -function next() - spotify("Next") -end - -function previous() - spotify("Previous") -end - -function show() - -- This should work, but no: - -- spotify("Raise") +-- Get spotify window +local function spotify() local clients = capi.client.get() for k, c in pairs(clients) do if awful.rules.match(c, { instance = "spotify", class = "Spotify" }) then - if not c:isvisible() then - awful.tag.viewonly(c:tags()[1]) - end - capi.client.focus = c - c:raise() - return + return c end end - awful.util.spawn("spotify") - -- To disable notifications, add the following line to - -- ~/.config/spotify/Users/-user/prefs: - -- ui.track_notifications_enabled=false + return nil +end + +-- Send a command to spotify +local function cmd(command) + local client = spotify() + if client then + os.execute("dbus-send --print-reply --reply-timeout=1000 --dest=org.gnome.SettingsDaemon " + .. "/org/gnome/SettingsDaemon/MediaKeys " + .. "org.gnome.SettingsDaemon.MediaKeys.PressMediaKey " + .. "string:" .. command) + end +end + +-- Show spotify +function show() + local client = spotify() + if client then + if not client:isvisible() then + awful.tag.viewonly(client:tags()[1]) + end + capi.client.focus = client + client:raise() + else + awful.util.spawn("spotify") + end +end + +function playpause() + cmd("Play") +end + +function play() + cmd("Play") +end + +function pause() + cmd("Pause") +end + +function stop() + cmd("Stop") +end + +function next() + cmd("Next") +end + +function previous() + cmd("Previous") end diff --git a/rc/start.lua b/rc/start.lua index 240a9d2..fe389cc 100644 --- a/rc/start.lua +++ b/rc/start.lua @@ -17,7 +17,9 @@ local execute = { "text/html", -- Default MIME types "xdg-mime default evince.desktop application/pdf", - "xdg-mime default gpicview.desktop image/png image/x-apple-ios-png image/jpeg image/jpg image/gif" + "xdg-mime default gpicview.desktop image/png image/x-apple-ios-png image/jpeg image/jpg image/gif", + -- dbus-mediakeys + "dbus-mediakeys &" } os.execute(table.concat(execute, ";")) diff --git a/rc/tags.lua b/rc/tags.lua index a9c4bcd..b409170 100644 --- a/rc/tags.lua +++ b/rc/tags.lua @@ -43,6 +43,10 @@ shifty.config.tags = { screen = math.max(screen.count(), 2), icon = tagicon("im"), nopopup = true, -- don't give focus on creation + }, + spotify = { + screen = 1, + exclusive = true } } @@ -60,6 +64,10 @@ shifty.config.apps = { match = { class = { "Skype", "Pidgin" } }, tag = "im", }, + { + match = { class = { "Spotify" } }, + tag = "spotify" + }, { match = { config.termclass }, startup = {