vicious/init.lua

269 lines
6.1 KiB
Lua
Raw Normal View History

2009-11-04 23:39:38 +01:00
---------------------------------------------------
-- Vicious widgets for the awesome window manager
2009-11-04 23:39:38 +01:00
---------------------------------------------------
2009-09-29 22:33:19 +02:00
-- Licensed under the GNU General Public License v2
2010-01-02 21:21:54 +01:00
-- * (c) 2010, Adrian C. <anrxc@sysphere.org>
-- * (c) 2009, Lucas de Vries <lucas@glacicle.com>
2009-11-04 23:39:38 +01:00
---------------------------------------------------
-- {{{ Grab environment
local type = type
local pairs = pairs
local tonumber = tonumber
local helpers = require("vicious.helpers")
local capi = { timer = timer }
local os = { time = os.time }
local table = {
insert = table.insert,
remove = table.remove
}
-- }}}
-- {{{ Configure widgets
require("vicious.cpu")
2009-08-06 18:21:13 +02:00
require("vicious.cpuinf")
2009-08-03 04:43:53 +02:00
require("vicious.cpufreq")
require("vicious.thermal")
require("vicious.uptime")
2009-07-30 02:11:54 +02:00
require("vicious.bat")
require("vicious.mem")
require("vicious.fs")
require("vicious.dio")
2009-08-06 02:41:46 +02:00
require("vicious.hddtemp")
require("vicious.net")
require("vicious.wifi")
require("vicious.mbox")
2009-07-31 08:00:07 +02:00
require("vicious.mboxc")
require("vicious.mdir")
require("vicious.gmail")
require("vicious.entropy")
require("vicious.org")
require("vicious.pkg")
require("vicious.mpd")
require("vicious.volume")
2009-07-29 20:13:40 +02:00
require("vicious.weather")
require("vicious.date")
-- }}}
-- Vicious: widgets for the awesome window manager
module("vicious")
2009-09-14 17:25:23 +02:00
-- {{{ Initialise tables
local timers = {}
local registered = {}
local widget_cache = {}
-- Initialise the function table
widgets = {}
-- }}}
-- {{{ Widget types
for i, w in pairs(_M) do
-- Ensure we don't call ourselves
if w and w ~= _M and type(w) == "table" then
-- Ignore the function table and helpers
if i ~= "widgets" and i ~= "helpers" then
2009-08-01 23:15:09 +02:00
-- Place widgets in the namespace table
widgets[i] = w
end
end
end
-- }}}
-- {{{ Main functions
2009-09-14 17:25:23 +02:00
-- {{{ Register a widget
2009-08-27 00:46:10 +02:00
function register(widget, wtype, format, timer, warg)
local reg = {}
local widget = widget
-- Set properties
reg.type = wtype
reg.format = format
reg.timer = timer
reg.warg = warg
reg.widget = widget
-- Update function
reg.update = function ()
update(widget, reg)
end
2009-09-19 17:31:52 +02:00
-- Default to 2s timer
if reg.timer == nil then
2009-09-19 17:31:52 +02:00
reg.timer = 2
end
2009-09-14 17:25:23 +02:00
-- Register a reg object
regregister(reg)
2009-09-14 17:25:23 +02:00
-- Return a reg object for reuse
return reg
end
-- }}}
-- {{{ Register from reg object
function regregister(reg)
if not reg.running then
if registered[reg.widget] == nil then
registered[reg.widget] = {}
table.insert(registered[reg.widget], reg)
else
2009-09-14 17:25:23 +02:00
local already = false
for w, i in pairs(registered) do
if w == reg.widget then
2009-08-08 17:42:28 +02:00
for _, v in pairs(i) do
if v == reg then
already = true
break
end
end
if already then
break
end
end
end
if not already then
table.insert(registered[reg.widget], reg)
end
end
2009-09-14 17:25:23 +02:00
-- Start the timer
if reg.timer > 0 then
timers[reg.update] = {
timer = capi.timer({ timeout = reg.timer })
}
timers[reg.update].timer:add_signal("timeout", reg.update)
timers[reg.update].timer:start()
end
-- Initial update
reg.update()
reg.running = true
end
end
-- }}}
2009-09-14 17:25:23 +02:00
-- {{{ Unregister a widget
function unregister(widget, keep, reg)
if reg == nil then
for w, i in pairs(registered) do
if w == widget then
2009-08-08 17:42:28 +02:00
for _, v in pairs(i) do
reg = unregister(w, keep, v)
end
end
end
return reg
end
if not keep then
for w, i in pairs(registered) do
if w == widget then
for k, v in pairs(i) do
if v == reg then
table.remove(registered[w], k)
end
end
end
end
end
2009-09-14 17:25:23 +02:00
-- Stop the timer
if timers[reg.update].timer.started then
timers[reg.update].timer:stop()
end
reg.running = false
return reg
end
-- }}}
2009-09-14 17:25:23 +02:00
-- {{{ Suspend vicious
function suspend()
for w, i in pairs(registered) do
2009-08-08 17:42:28 +02:00
for _, v in pairs(i) do
unregister(w, true, v)
end
end
end
-- }}}
2009-09-14 17:25:23 +02:00
-- {{{ Activate vicious
function activate(widget)
for w, i in pairs(registered) do
if widget == nil or w == widget then
2009-08-08 17:42:28 +02:00
for _, v in pairs(i) do
regregister(v)
end
end
end
end
-- }}}
2009-09-25 21:16:55 +02:00
-- {{{ Enable caching for a widget
function cache(widget)
2009-09-25 21:16:55 +02:00
if widget_cache[widget] == nil then
widget_cache[widget] = {}
end
end
-- }}}
2009-09-14 17:25:23 +02:00
-- {{{ Update a widget
function update(widget, reg, disablecache)
-- Check if there are any equal widgets
if reg == nil then
for w, i in pairs(registered) do
if w == widget then
2009-08-08 17:42:28 +02:00
for _, v in pairs(i) do
update(w, v, disablecache)
end
end
end
return
end
local t = os.time()
local data = {}
2009-09-14 17:25:23 +02:00
-- Do we have output chached for a widget newer than last update
if widget_cache[reg.type] ~= nil then
local c = widget_cache[reg.type]
2009-08-05 21:19:41 +02:00
if c.time == nil or c.time <= t - reg.timer or disablecache then
c.time = t
c.data = reg.type(reg.format, reg.warg)
end
2009-08-06 21:59:12 +02:00
data = c.data
else
data = reg.type(reg.format, reg.warg)
end
if type(data) == "table" then
if type(reg.format) == "string" then
data = helpers.format(reg.format, data)
elseif type(reg.format) == "function" then
data = reg.format(widget, data)
end
end
2009-08-06 21:59:12 +02:00
if widget.add_value ~= nil then
widget:add_value(tonumber(data) / 100)
elseif widget.set_value ~= nil then
widget:set_value(tonumber(data) / 100)
else
widget.text = data
end
return data
end
-- }}}
-- }}}