Merge branch 'async' of github.com:vicious-widgets/vicious into async

This commit is contained in:
mutlusun 2019-08-23 09:48:05 +02:00
commit 687fd49376
No known key found for this signature in database
GPG Key ID: C0AF8F434E1AB79B
3 changed files with 75 additions and 57 deletions

View File

@ -21,6 +21,7 @@ Fixed:
* wifi_linux, wifiiw_linux, hwmontemp_linux, hddtemp_linux * wifi_linux, wifiiw_linux, hwmontemp_linux, hddtemp_linux
* bat_freebsd, mem_freebsd, net_freebsd, thermal_freebsd, uptime_freebsd, * bat_freebsd, mem_freebsd, net_freebsd, thermal_freebsd, uptime_freebsd,
cpu_freebsd, cpufreq_freebsd, fanspeed_freebsd cpu_freebsd, cpufreq_freebsd, fanspeed_freebsd
* bat_openbsd
* volume, gmail, mdir, mpd, fs * volume, gmail, mdir, mpd, fs
- [mpd] Lua 5.3 compatibility (for real this time); also correct a typo - [mpd] Lua 5.3 compatibility (for real this time); also correct a typo
- [pkg,weather,contrib/btc] Allow function call without Awesome - [pkg,weather,contrib/btc] Allow function call without Awesome
@ -28,10 +29,10 @@ Fixed:
- [os] Splitted os_all into os_linux and os_bsd (and refactored to async) - [os] Splitted os_all into os_linux and os_bsd (and refactored to async)
Removed: Removed:
- `helpers.sysctl` and `helpers.sysctl_table` were removed in favour of - `helpers.sysctl` and `helpers.sysctl_table` were removed in favour of
`helpers.sysctl_async`. `helpers.sysctl_async`.
# Changes in 2.3.3 # Changes in 2.3.3
Feature: Add battery widget type for OpenBSD Feature: Add battery widget type for OpenBSD

View File

@ -542,7 +542,6 @@ Supported platforms: GNU/Linux.
`${rate}` (Mb/s), `${freq}` (MHz), `${linp}` (link quality in percent), `${rate}` (Mb/s), `${freq}` (MHz), `${linp}` (link quality in percent),
`${txpw}` (transmission power, in dBm) and `${sign}` (signal level, in dBm) `${txpw}` (transmission power, in dBm) and `${sign}` (signal level, in dBm)
## <a name="custom-widget"></a>Custom widget types ## <a name="custom-widget"></a>Custom widget types
Use any of the existing widget types as a starting point for your Use any of the existing widget types as a starting point for your

View File

@ -1,67 +1,85 @@
-- bat_openbsd.lua - provide battery information on OpenBSD
-- Copyright (C) 2019 Enric Morales
-- Copyright (C) 2019 Nguyễn Gia Phong
--
-- This file is part of Vicious.
--
-- Vicious is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as
-- published by the Free Software Foundation, either version 2 of the
-- License, or (at your option) any later version.
--
-- Vicious is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU Affero General Public License for more details.
--
-- You should have received a copy of the GNU Affero General Public License
-- along with Vicious. If not, see <https://www.gnu.org/licenses/>.
-- {{{ Grab environment -- {{{ Grab environment
local setmetatable = setmetatable
local tonumber = tonumber local tonumber = tonumber
local string = { format = string.format, gmatch = string.gmatch }
local io = { popen = io.popen }
local math = { floor = math.floor, modf = math.modf } local math = { floor = math.floor, modf = math.modf }
local helpers = require"vicious.helpers"
local spawn = require"vicious.spawn"
-- }}} -- }}}
local bat_openbsd = {} local STATES = { [0] = "", -- not charging
[1] = "-", -- discharging
[2] = "!", -- critical
[3] = "+", -- charging
[4] = "N/A", -- unknown status
[255] = "N/A" } -- unimplemented by the driver
local function worker(format, warg) return helpers.setasyncall{
local battery = warg or "bat0" async = function (format, warg, callback)
local filter = string.format("hw.sensors.acpi%s", battery) local filter = "hw.sensors.acpi" .. (warg or "bat0")
local cmd = string.format("sysctl -a | grep '^%s'", filter) local pattern = filter .. ".(%S+)=(%S+)"
local proc = io.popen(cmd) local bat_info = {}
local bat_info = {} spawn.with_line_callback_with_shell(
for line in proc:lines("*l") do ("sysctl -a | grep '^%s'"):format(filter),
for key, value in string.gmatch(line, "(%S+)=(%S+)") do { stdout = function (line)
key = key:gsub(filter .. ".", "") for key, value in line:gmatch(pattern) do
bat_info[key] = value bat_info[key] = value
end end
end end,
output_done = function ()
-- current state
local state = STATES[tonumber(bat_info.raw0)]
-- current state -- battery capacity in percent
local states = {[0] = "", -- not charging local percent = tonumber(
[1] = "-", -- discharging bat_info.watthour3 / bat_info.watthour0 * 100)
[2] = "!", -- critical
[3] = "+", -- charging
[4] = "N/A", -- unknown status
[255] = "N/A"} -- unimplemented by the driver
local state = states[tonumber(bat_info.raw0)]
-- battery capacity in percent local time
local percent = tonumber(bat_info.watthour3 / bat_info.watthour0 * 100) if tonumber(bat_info.power0) < 1 then
time = ""
else
local raw_time = bat_info.watthour3 / bat_info.power0
local hours, hour_fraction = math.modf(raw_time)
local minutes = math.floor(60 * hour_fraction)
time = ("%d:%0.2d"):format(hours, minutes)
end
local time -- calculate wear level from (last full / design) capacity
if tonumber(bat_info.power0) < 1 then local wear = "N/A"
time = "" if bat_info.watthour0 and bat_info.watthour4 then
else local l_full = tonumber(bat_info.watthour0)
local raw_time = bat_info.watthour3 / bat_info.power0 local design = tonumber(bat_info.watthour4)
local hours, hour_fraction = math.modf(raw_time) wear = math.floor(l_full / design * 100)
local minutes = math.floor(60 * hour_fraction) end
time = string.format("%d:%0.2d", hours, minutes)
end
-- calculate wear level from (last full / design) capacity -- dis-/charging rate as presented by battery
local wear = "N/A" local rate = bat_info.power0
if bat_info.watthour0 and bat_info.watthour4 then
local l_full = tonumber(bat_info.watthour0)
local design = tonumber(bat_info.watthour4)
wear = math.floor(l_full / design * 100)
end
-- dis-/charging rate as presented by battery -- Pass the following arguments to callback function:
local rate = bat_info.power0 -- * battery state symbol (↯, -, !, + or N/A)
-- * remaining_capacity (in percent)
-- returns -- * remaining_time, by battery
-- * state (high "↯", discharging "-", charging "+", N/A "⌁" } -- * wear level (in percent)
-- * remaining_capacity (percent) -- * present_rate (in Watts)
-- * remaining_time, by battery callback{state, percent, time, wear, rate}
-- * wear level (percent) end })
-- * present_rate (W) end }
return {state, percent, time, wear, rate}
end
return setmetatable(bat_openbsd, { __call = function(_, ...) return worker(...) end })