X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/b9f31a6c6237f326405d6530b34416f94250c475..a1ba90261b31ccce1ac2ecb7ca7aedbc20eca441:/widgets/contrib/gpmdp.lua

diff --git a/widgets/contrib/gpmdp.lua b/widgets/contrib/gpmdp.lua
index fa51440..94076c8 100644
--- a/widgets/contrib/gpmdp.lua
+++ b/widgets/contrib/gpmdp.lua
@@ -6,14 +6,15 @@
                                                      
 --]]
 
-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 os      = { getenv = os.getenv }
-
+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
@@ -24,12 +25,12 @@ 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"
     local settings      = args.settings or function() end
 
-    gpmdp.widget = wibox.widget.textbox('')
+    gpmdp.widget = wibox.widget.textbox()
 
     gpmdp_notification_preset = {
         title   = "Now playing",
@@ -39,14 +40,13 @@ local function worker(args)
     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 = {}
+            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
@@ -54,7 +54,7 @@ local function worker(args)
             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
@@ -64,32 +64,29 @@ local function worker(args)
         widget = gpmdp.widget
         settings()
 
-        if gpm_now.playing
-        then
-            if notify == "on" and gpm_now.title ~= helpers.get_map("gpmdp_current")
-            then
+        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)
-                os.execute("curl " .. gpm_now.cover_url .. " -o /tmp/gpmcover.png")
 
-                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 = "/tmp/gpmcover.png",
-                    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
+        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 })