spotify: try to support the new version of Spotify

It doesn't provide a DBus interface. Try to use xdotool instead. For
some reason, not working.
This commit is contained in:
Vincent Bernat 2015-07-12 11:31:13 +02:00
parent db2d169a57
commit 6c8985a9ae
3 changed files with 60 additions and 47 deletions

View file

@ -22,8 +22,7 @@ case "$1" in
;; ;;
lock) lock)
# First, stop Spotify # First, stop Spotify
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify \ xdotool key XF86AudioPause
/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
# Then, lock screen # Then, lock screen
i3lock_options="-e -i $HOME/.cache/awesome/current-wallpaper.png -t" i3lock_options="-e -i $HOME/.cache/awesome/current-wallpaper.png -t"
echo "$(date --rfc-3339=seconds) $me: lock: lock screen" echo "$(date --rfc-3339=seconds) $me: lock: lock screen"

View file

@ -8,61 +8,67 @@
local awful = require("awful") local awful = require("awful")
local pairs = pairs local pairs = pairs
local os = os
local capi = { local capi = {
client = client client = client
} }
module("vbe/spotify") module("vbe/spotify")
-- Send a command to spotify -- Get spotify window
local function spotify(command) local function spotify()
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")
local clients = capi.client.get() local clients = capi.client.get()
for k, c in pairs(clients) do for k, c in pairs(clients) do
if awful.rules.match(c, { instance = "spotify", if awful.rules.match(c, { instance = "spotify",
class = "Spotify" }) then class = "Spotify" }) then
if not c:isvisible() then return c
awful.tag.viewonly(c:tags()[1])
end
capi.client.focus = c
c:raise()
return
end end
end end
awful.util.spawn("spotify") return nil
-- To disable notifications, add the following line to end
-- ~/.config/spotify/Users/<spotifylogin>-user/prefs:
-- ui.track_notifications_enabled=false -- Send a command to spotify
local function cmd(command)
local client = spotify()
if client then
os.execute("xdotool key --window " .. client.window .. " " .. 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("space")
end
function play()
cmd("XF86AudioPlay")
end
function pause()
cmd("XF86AudioPause")
end
function stop()
cmd("XF86AudioStop")
end
function next()
cmd("XF86AudioNext")
end
function previous()
cmd("XF86AudioPrev")
end end

View file

@ -43,6 +43,10 @@ shifty.config.tags = {
screen = math.max(screen.count(), 2), screen = math.max(screen.count(), 2),
icon = tagicon("im"), icon = tagicon("im"),
nopopup = true, -- don't give focus on creation nopopup = true, -- don't give focus on creation
},
spotify = {
screen = 1,
exclusive = true
} }
} }
@ -60,6 +64,10 @@ shifty.config.apps = {
match = { class = { "Skype", "Pidgin" } }, match = { class = { "Skype", "Pidgin" } },
tag = "im", tag = "im",
}, },
{
match = { class = { "Spotify" } },
tag = "spotify"
},
{ {
match = { config.termclass }, match = { config.termclass },
startup = { startup = {