2017-08-14 13:17:44 +02:00
|
|
|
|
|
|
|
--[[
|
|
|
|
|
|
|
|
Licensed under GNU General Public License v2
|
|
|
|
* (c) 2017, Greg Flynn
|
|
|
|
|
|
|
|
--]]
|
|
|
|
local awful = require("awful")
|
|
|
|
local naughty = require("naughty")
|
2019-09-17 00:40:42 +02:00
|
|
|
local dpi = require("beautiful.xresources").apply_dpi
|
2017-08-14 13:17:44 +02:00
|
|
|
local io, next, os, string, table = io, next, os, string, table
|
|
|
|
|
|
|
|
-- Google Play Music Desktop Player widget
|
|
|
|
-- requires: curl and dkjson or lain
|
|
|
|
|
|
|
|
local gpmdp = {
|
|
|
|
notify = "on",
|
|
|
|
followtag = false,
|
|
|
|
file_location = os.getenv("HOME") .. "/.config/Google Play Music Desktop Player/json_store/playback.json",
|
|
|
|
notification_preset = {
|
|
|
|
title = "Now playing",
|
|
|
|
icon_size = dpi(128),
|
|
|
|
timeout = 6
|
|
|
|
},
|
|
|
|
notification = nil,
|
|
|
|
current_track = nil,
|
|
|
|
album_cover = "/tmp/gpmcover"
|
|
|
|
}
|
|
|
|
|
|
|
|
function gpmdp.notification_on()
|
|
|
|
local gpm_now = gpmdp.latest
|
|
|
|
gpmdp.current_track = gpm_now.title
|
|
|
|
|
|
|
|
if gpmdp.followtag then gpmdp.notification_preset.screen = awful.screen.focused() end
|
|
|
|
awful.spawn.easy_async({"curl", gpm_now.cover_url, "-o", gpmdp.album_cover}, function(stdout)
|
|
|
|
local old_id = nil
|
|
|
|
if gpmdp.notification then old_id = gpmdp.notification.id end
|
|
|
|
|
|
|
|
gpmdp.notification = naughty.notify({
|
|
|
|
preset = gpmdp.notification_preset,
|
|
|
|
icon = gpmdp.album_cover,
|
|
|
|
replaces_id = old_id
|
|
|
|
})
|
|
|
|
end)
|
|
|
|
end
|
|
|
|
|
|
|
|
function gpmdp.notification_off()
|
|
|
|
if not gpmdp.notification then return end
|
|
|
|
naughty.destroy(gpmdp.notification)
|
|
|
|
gpmdp.notification = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
function gpmdp.get_lines(file)
|
|
|
|
local f = io.open(file)
|
|
|
|
if not f then
|
|
|
|
return
|
|
|
|
else
|
|
|
|
f:close()
|
|
|
|
end
|
|
|
|
|
|
|
|
local lines = {}
|
|
|
|
for line in io.lines(file) do
|
|
|
|
lines[#lines + 1] = line
|
|
|
|
end
|
|
|
|
return lines
|
|
|
|
end
|
|
|
|
|
|
|
|
gpmdp.widget = awful.widget.watch({"pidof", "Google Play Music Desktop Player"}, 2, function(widget, stdout)
|
|
|
|
local filelines = gpmdp.get_lines(gpmdp.file_location)
|
|
|
|
if not filelines then return end -- GPMDP not running?
|
|
|
|
|
|
|
|
gpm_now = { running = stdout ~= '' }
|
|
|
|
|
|
|
|
if not next(filelines) then
|
|
|
|
gpm_now.running = false
|
|
|
|
gpm_now.playing = false
|
|
|
|
else
|
|
|
|
dict, pos, err = require("dkjson").decode(table.concat(filelines), 1, nil) -- dkjson
|
|
|
|
-- dict, pos, err = require("lain.util").dkjson.decode(table.concat(filelines), 1, nil) -- lain
|
|
|
|
gpm_now.artist = dict.song.artist
|
|
|
|
gpm_now.album = dict.song.album
|
|
|
|
gpm_now.title = dict.song.title
|
|
|
|
gpm_now.cover_url = dict.song.albumArt
|
|
|
|
gpm_now.playing = dict.playing
|
|
|
|
end
|
|
|
|
gpmdp.latest = gpm_now
|
|
|
|
|
|
|
|
-- customize here
|
2019-09-17 00:40:42 +02:00
|
|
|
gpmdp.notification_preset.text = string.format("%s (%s) - %s", gpm_now.artist, gpm_now.album, gpm_now.title)
|
2017-08-14 13:17:44 +02:00
|
|
|
widget:set_text(gpm_now.artist .. " - " .. gpm_now.title)
|
|
|
|
|
|
|
|
if gpm_now.playing then
|
|
|
|
if gpmdp.notify == "on" and gpm_now.title ~= gpmdp.current_track then
|
|
|
|
gpmdp.notification_on()
|
|
|
|
end
|
|
|
|
elseif not gpm_now.running then
|
|
|
|
gpmdp.current_track = nil
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
-- add mouse hover
|
|
|
|
gpmdp.widget:connect_signal("mouse::enter", gpmdp.notification_on)
|
|
|
|
gpmdp.widget:connect_signal("mouse::leave", gpmdp.notification_off)
|
|
|
|
|
|
|
|
return gpmdp
|