spotify: try to support the new version of Spotify

Use dbus-mediakeys to get an appropriate DBus interface. In future
versions, this should not be needed anymore. See:
 https://github.com/vincentbernat/dbus-mediakeys
This commit is contained in:
Vincent Bernat 2015-07-12 11:31:13 +02:00
parent 86c36c91c6
commit e3747d1b9f
3 changed files with 66 additions and 46 deletions

View file

@ -7,62 +7,72 @@
-- mdbus2 org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 -- mdbus2 org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2
local awful = require("awful") local awful = require("awful")
local dbg = dbg
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("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 end

View file

@ -17,7 +17,9 @@ local execute = {
"text/html", "text/html",
-- Default MIME types -- Default MIME types
"xdg-mime default evince.desktop application/pdf", "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, ";")) os.execute(table.concat(execute, ";"))

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 = {