X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/c0646ff1641100887c182cfe2be1c0e7c9f8c5ad..43cd98510a33e9f2d50d315a9bfc31ff8d3062c9:/widgets/contrib/gpmdp.lua diff --git a/widgets/contrib/gpmdp.lua b/widgets/contrib/gpmdp.lua index 6b4341b..37da43d 100644 --- a/widgets/contrib/gpmdp.lua +++ b/widgets/contrib/gpmdp.lua @@ -1,105 +1,90 @@ --[[ - - Licensed under GNU General Public License v2 - * (c) 2016, Alexandre Terrien - + + 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 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 = next +local os = { getenv = os.getenv } +local table = table local setmetatable = setmetatable -- Google Play Music Desktop infos -- lain.widget.contrib.gpmdp -local gpmdp = {} +local gpmdp = helpers.make_widget_textbox() 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 followtag = args.followtag or false local file_location = args.file_location or - os.getenv("HOME") .. "/.config/Google Play Music Desktop Player/json_store/playback.json" + 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) + helpers.set_map("gpmdp_current", nil) function gpmdp.update() - file, err = io.open(file_location, "r") - if not file - then - gpm_now = { - running = false, - playing = false - } + 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(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 + 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 + + 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) + 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 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 followmouse then - gpmdp_notification_preset.screen = mouse.screen - end + if followtag then gpmdp_notification_preset.screen = focused() end - gpmdp.id = naughty.notify({ - preset = gpmdp_notification_preset, - icon = current_icon, - replaces_id = gpmdp.id, - }).id + 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("current mpd track", nil) + elseif not gpm_now.running then + helpers.set_map("gpmdp_current", nil) end end - helpers.newtimer("gpmdp", timeout, gpmdp.update) + gpmdp.timer = helpers.newtimer("gpmdp", timeout, gpmdp.update, true, true) - return setmetatable(gpmdp, { __index = gpmdp.widget }) + return gpmdp end return setmetatable(gpmdp, { __call = function(_, ...) return worker(...) end })