From c0646ff1641100887c182cfe2be1c0e7c9f8c5ad Mon Sep 17 00:00:00 2001 From: Alexandre Terrien Date: Wed, 22 Jun 2016 23:21:01 +0200 Subject: [PATCH] Added gpmpd widget --- widgets/contrib/gpmdp.lua | 105 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 widgets/contrib/gpmdp.lua diff --git a/widgets/contrib/gpmdp.lua b/widgets/contrib/gpmdp.lua new file mode 100644 index 0000000..6b4341b --- /dev/null +++ b/widgets/contrib/gpmdp.lua @@ -0,0 +1,105 @@ + +--[[ + + Licensed under GNU General Public License v2 + * (c) 2016, Alexandre Terrien + +--]] + +local helpers = require("lain.helpers") +local json = require("lain.util.dkjson") + +local pread = require("awful.util").pread + +local naughty = require("naughty") +local wibox = require("wibox") + +local mouse = mouse + +local setmetatable = setmetatable + +-- Google Play Music Desktop infos +-- lain.widget.contrib.gpmdp +local gpmdp = {} + +local function worker(args) + local args = args or {} + local timeout = args.timeout or 2 + local notify = args.notify or "off" + local followmouse = args.followmouse or false + local file_location = args.file_location or + os.getenv("HOME") .. "/.config/Google Play Music Desktop Player/json_store/playback.json" + local settings = args.settings or function() end + + gpmdp.widget = wibox.widget.textbox('') + + gpmdp_notification_preset = { + title = "Now playing", + timeout = 6 + } + + helpers.set_map("gpmpd_current", nil) + + function gpmdp.update() + file, err = io.open(file_location, "r") + if not file + then + gpm_now = { + running = false, + playing = false + } + else + dict, pos, err = json.decode(file:read "*a", 1, nil) + file:close() + 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("gpmpd_current") + then + helpers.set_map("gpmpd_current", gpm_now.title) + + current_icon = "/tmp/gpmcover.png" + os.execute("curl " .. gpm_now.cover_url .. " -o " .. current_icon) + + if followmouse then + gpmdp_notification_preset.screen = mouse.screen + end + + gpmdp.id = naughty.notify({ + preset = gpmdp_notification_preset, + icon = current_icon, + replaces_id = gpmdp.id, + }).id + end + elseif (not gpm_now.running) + then + helpers.set_map("current mpd track", nil) + end + end + + helpers.newtimer("gpmdp", timeout, gpmdp.update) + + return setmetatable(gpmdp, { __index = gpmdp.widget }) +end + +return setmetatable(gpmdp, { __call = function(_, ...) return worker(...) end })