From a00417d8011690d977cbdab1f1378ec369e5f355 Mon Sep 17 00:00:00 2001 From: copycat-killer Date: Tue, 24 Jan 2017 16:15:40 +0100 Subject: [PATCH] helpers.newtimer: added stoppable option --- helpers.lua | 10 ++++++---- widgets/abase.lua | 16 ++++++++-------- widgets/base.lua | 19 ++++++++++--------- widgets/contrib/gpmdp.lua | 19 ++++++++++--------- widgets/contrib/moc.lua | 2 +- widgets/contrib/tpbat/smapi.lua | 6 ++---- widgets/imap.lua | 2 +- widgets/maildir.lua | 4 ++-- widgets/mpd.lua | 2 +- widgets/net.lua | 3 ++- widgets/weather.lua | 4 ++-- wiki | 2 +- 12 files changed, 46 insertions(+), 43 deletions(-) diff --git a/helpers.lua b/helpers.lua index 9755dc0..7c44648 100644 --- a/helpers.lua +++ b/helpers.lua @@ -92,8 +92,9 @@ end helpers.timer_table = {} -function helpers.newtimer(_name, timeout, fun, nostart) - local name = timeout +function helpers.newtimer(name, timeout, fun, nostart, stoppable) + if not name or #name == 0 then return end + name = (stoppable and name) or timeout if not helpers.timer_table[name] then helpers.timer_table[name] = timer({ timeout = timeout }) helpers.timer_table[name]:start() @@ -102,6 +103,7 @@ function helpers.newtimer(_name, timeout, fun, nostart) if not nostart then helpers.timer_table[name]:emit_signal("timeout") end + return stoppable and helpers.timer_table[name] end -- }}} @@ -175,9 +177,9 @@ function helpers.spairs(t) end end --- create a lain textbox widget +-- create a textbox with no spacing issues function helpers.make_widget_textbox() - local w = wibox.widget.textbox('') + local w = wibox.widget.textbox() local t = wibox.widget.base.make_widget(w) t.widget = w return t diff --git a/widgets/abase.lua b/widgets/abase.lua index a176cf1..7eef754 100644 --- a/widgets/abase.lua +++ b/widgets/abase.lua @@ -14,13 +14,13 @@ local setmetatable = setmetatable -- lain.widgets.abase local function worker(args) - local abase = {} - local args = args or {} - local timeout = args.timeout or 5 - local cmd = args.cmd or "" - local settings = args.settings or function() end - - abase.widget = wibox.widget.textbox() + local abase = helpers.make_widget_textbox() + local args = args or {} + local timeout = args.timeout or 5 + local nostart = args.nostart or false + local stoppable = args.stoppable or false + local cmd = args.cmd or "" + local settings = args.settings or function() end function abase.update() helpers.async(cmd, function(f) @@ -33,7 +33,7 @@ local function worker(args) end) end - helpers.newtimer(cmd, timeout, abase.update) + abase.timer = helpers.newtimer(cmd, timeout, abase.update, nostart, stoppable) return setmetatable(abase, { __index = abase.widget }) end diff --git a/widgets/base.lua b/widgets/base.lua index 94ee58f..87b0c85 100644 --- a/widgets/base.lua +++ b/widgets/base.lua @@ -6,8 +6,7 @@ --]] -local newtimer = require("lain.helpers").newtimer -local read_pipe = require("lain.helpers").read_pipe +local helpers = require("lain.helpers") local wibox = require("wibox") local setmetatable = setmetatable @@ -15,16 +14,18 @@ local setmetatable = setmetatable -- lain.widgets.base local function worker(args) - local base = {} - local args = args or {} - local timeout = args.timeout or 5 - local cmd = args.cmd or "" - local settings = args.settings or function() end + local base = helpers.make_widget_textbox() + local args = args or {} + local timeout = args.timeout or 5 + local nostart = args.nostart or false + local stoppable = args.stoppable or false + local cmd = args.cmd or "" + local settings = args.settings or function() end base.widget = wibox.widget.textbox() function base.update() - output = read_pipe(cmd) + output = helpers.read_pipe(cmd) if output ~= base.prev then widget = base.widget settings() @@ -32,7 +33,7 @@ local function worker(args) end end - newtimer(cmd, timeout, base.update) + base.timer = helpers.newtimer(cmd, timeout, base.update, nostart, stoppable) return setmetatable(base, { __index = base.widget }) end diff --git a/widgets/contrib/gpmdp.lua b/widgets/contrib/gpmdp.lua index 811d1f6..21776ac 100644 --- a/widgets/contrib/gpmdp.lua +++ b/widgets/contrib/gpmdp.lua @@ -67,23 +67,24 @@ local function worker(args) 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(string.format("curl %d -o /tmp/gpmcover.png", gpm_now.cover_url)) 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 }) end diff --git a/widgets/contrib/moc.lua b/widgets/contrib/moc.lua index d2f544f..6190f5f 100644 --- a/widgets/contrib/moc.lua +++ b/widgets/contrib/moc.lua @@ -91,7 +91,7 @@ local function worker(args) end) end - helpers.newtimer("moc", timeout, moc.update) + moc.timer = helpers.newtimer("moc", timeout, moc.update, true, true) return setmetatable(moc, { __index = moc.widget }) end diff --git a/widgets/contrib/tpbat/smapi.lua b/widgets/contrib/tpbat/smapi.lua index 271d9c2..9002585 100644 --- a/widgets/contrib/tpbat/smapi.lua +++ b/widgets/contrib/tpbat/smapi.lua @@ -81,13 +81,11 @@ function smapi:battery(name) local time_val = bat_now.status == 'discharging' and 'remaining_running_time' or 'remaining_charging_time' local mins_left = self:get(time_val) - if mins_left:find("^%d+") == nil - then - return "N/A" - end + if not mins_left:find("^%d+") then return "N/A" end local hrs = math.floor(mins_left / 60) local min = mins_left % 60 + return string.format("%02d:%02d", hrs, min) end diff --git a/widgets/imap.lua b/widgets/imap.lua index e00be5b..5896ae1 100644 --- a/widgets/imap.lua +++ b/widgets/imap.lua @@ -74,7 +74,7 @@ local function worker(args ) end - helpers.newtimer(mail, timeout, update) + imap.timer = helpers.newtimer(mail, timeout, update, true, true) return setmetatable(imap, { __index = imap.widget }) end diff --git a/widgets/maildir.lua b/widgets/maildir.lua index bef09f4..1f4cd45 100644 --- a/widgets/maildir.lua +++ b/widgets/maildir.lua @@ -30,7 +30,7 @@ local function worker(args) maildir.widget = wibox.widget.textbox() - function update() + function maildir.update() if ext_mail_cmd then awful.spawn(ext_mail_cmd) end -- Find pathes to mailboxes. @@ -76,7 +76,7 @@ local function worker(args) settings() end - helpers.newtimer(mailpath, timeout, update, true) + maildir.timer = helpers.newtimer(mailpath, timeout, maildir.update, true, true) return setmetatable(maildir, { __index = maildir.widget }) end diff --git a/widgets/mpd.lua b/widgets/mpd.lua index 02b5680..ac4fd5f 100644 --- a/widgets/mpd.lua +++ b/widgets/mpd.lua @@ -126,7 +126,7 @@ local function worker(args) end) end - helpers.newtimer("mpd", timeout, mpd.update) + mpd.timer = helpers.newtimer("mpd", timeout, mpd.update, true, true) return mpd end diff --git a/widgets/net.lua b/widgets/net.lua index 983ec7a..a6cb3b6 100644 --- a/widgets/net.lua +++ b/widgets/net.lua @@ -12,6 +12,7 @@ local naughty = require("naughty") local wibox = require("wibox") local string = { format = string.format, match = string.match } +local tostring = tostring local setmetatable = setmetatable -- Network infos @@ -116,7 +117,7 @@ local function worker(args) settings() end - helpers.newtimer(net.iface, timeout, update) + helpers.newtimer("net-" .. tostring(net.iface), timeout, update) return net end diff --git a/widgets/weather.lua b/widgets/weather.lua index 32e3065..ff86d7e 100644 --- a/widgets/weather.lua +++ b/widgets/weather.lua @@ -160,8 +160,8 @@ local function worker(args) weather.attach(weather.widget) - newtimer("weather-" .. city_id, timeout, weather.update) - newtimer("weather_forecast-" .. city_id, timeout, weather.forecast_update) + weather.timer = newtimer("weather-" .. city_id, timeout, weather.update, false, true) + weather.timer_forecast = newtimer("weather_forecast-" .. city_id, timeout, weather.forecast_update, false, true) return setmetatable(weather, { __index = weather.widget }) end diff --git a/wiki b/wiki index 991e3bb..df5dd68 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 991e3bb813a650a6d6bcd27a9563a746fe489716 +Subproject commit df5dd684ec35c1fc8e044fb5fd0bdb76f7f568fa -- 2.39.2