--- /dev/null
+
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2016, Alexandre Terrien
+
+--]]
+
+local helpers = require("lain.helpers")
+local json = require("lain.util.dkjson")
+local focused = require("awful.screen").focused
+local pread = require("awful.util").pread
+local naughty = require("naughty")
+local wibox = require("wibox")
+local next, getenv, table = next, os.getenv, table
+
+-- Google Play Music Desktop infos
+-- lain.widget.contrib.gpmdp
+-- requires: curl
+
+local function factory(args)
+ local gpmdp = { widget = wibox.widget.textbox() }
+ local args = args or {}
+ local timeout = args.timeout or 2
+ local notify = args.notify or "off"
+ local followtag = args.followtag or false
+ local file_location = args.file_location or
+ getenv("HOME") .. "/.config/Google Play Music Desktop Player/json_store/playback.json"
+ local settings = args.settings or function() end
+
+ gpmdp_notification_preset = {
+ title = "Now playing",
+ timeout = 6
+ }
+
+ helpers.set_map("gpmdp_current", nil)
+
+ function gpmdp.update()
+ local filelines = helpers.lines_from(file_location)
+
+ if not next(filelines) then
+ local gpm_now = { running = false, playing = false }
+ else
+ dict, pos, err = json.decode(table.concat(filelines), 1, nil)
+ local gpm_now = {}
+ 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
+
+ if pread("pidof 'Google Play Music Desktop Player'") ~= '' then
+ gpm_now.running = true
+ else
+ gpm_now.running = false
+ end
+
+ gpmdp_notification_preset.text = string.format("%s (%s) - %s", gpm_now.artist, gpm_now.album, gpm_now.title)
+ widget = gpmdp.widget
+ settings()
+
+ if gpm_now.playing then
+ if notify == "on" and gpm_now.title ~= helpers.get_map("gpmdp_current") then
+ helpers.set_map("gpmdp_current", gpm_now.title)
+
+ if followtag then gpmdp_notification_preset.screen = focused() end
+
+ helpers.async(string.format("curl %d -o /tmp/gpmcover.png", gpm_now.cover_url),
+ function(f)
+ gpmdp.id = naughty.notify({
+ preset = gpmdp_notification_preset,
+ icon = "/tmp/gpmcover.png",
+ replaces_id = gpmdp.id
+ }).id
+ end)
+ end
+ elseif not gpm_now.running then
+ helpers.set_map("gpmdp_current", nil)
+ end
+ end
+
+ gpmdp.timer = helpers.newtimer("gpmdp", timeout, gpmdp.update, true, true)
+
+ return gpmdp
+end
+
+return factory