X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/40798583795b58e496db607d9d23324b4a7ae09c..4c392a6d980af9c72052145c6a7a812c51e6ecee:/.config/awesome/lain/widget/contrib/gpmdp.lua diff --git a/.config/awesome/lain/widget/contrib/gpmdp.lua b/.config/awesome/lain/widget/contrib/gpmdp.lua new file mode 100644 index 0000000..e980209 --- /dev/null +++ b/.config/awesome/lain/widget/contrib/gpmdp.lua @@ -0,0 +1,88 @@ + +--[[ + + 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