luci-mod-admin-full: fixes for usbport LED triggers

The previous commit erroneously used "ports" instead of "port" as name for the
option widget, causing wrong uci values to be written.

Also work around some cbi idiosyncrasies regarding MultiValue widgets which
prevented rendering the correct initial selection state.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2017-01-30 15:50:08 +01:00
parent 7c744309c5
commit 926935f831

View file

@ -7,10 +7,11 @@ local sysfs_path = "/sys/class/leds/"
local leds = {} local leds = {}
local fs = require "nixio.fs" local fs = require "nixio.fs"
local util = require "nixio.util" local nu = require "nixio.util"
local util = require "luci.util"
if fs.access(sysfs_path) then if fs.access(sysfs_path) then
leds = util.consume((fs.dir(sysfs_path))) leds = nu.consume((fs.dir(sysfs_path)))
end end
if #leds == 0 then if #leds == 0 then
@ -110,12 +111,32 @@ function usbdev.remove(self, section)
end end
usbport = s:option(MultiValue, "ports", translate("USB Ports")) usbport = s:option(MultiValue, "port", translate("USB Ports"))
usbport:depends("trigger", "usbport") usbport:depends("trigger", "usbport")
usbport.rmempty = true usbport.rmempty = true
usbport.widget = "checkbox" usbport.widget = "checkbox"
usbport.cast = "table"
usbport.size = 1 usbport.size = 1
function usbport.valuelist(self, section)
local port, ports = nil, {}
for port in util.imatch(m.uci:get("system", section, "port")) do
local b, n = port:match("^usb(%d+)-port(%d+)$")
if not (b and n) then
b, n = port:match("^(%d+)-(%d+)$")
end
if b and n then
ports[#ports+1] = "usb%u-port%u" %{ tonumber(b), tonumber(n) }
end
end
return ports
end
function usbport.validate(self, value)
return type(value) == "string" and { value } or value
end
for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*/manufacturer") do for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*/manufacturer") do
local id = p:match("%d+-%d+") local id = p:match("%d+-%d+")
local mf = nixio.fs.readfile("/sys/bus/usb/devices/" .. id .. "/manufacturer") or "?" local mf = nixio.fs.readfile("/sys/bus/usb/devices/" .. id .. "/manufacturer") or "?"
@ -123,8 +144,8 @@ for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*/manufacturer") do
usbdev:value(id, "%s (%s - %s)" %{ id, mf, pr }) usbdev:value(id, "%s (%s - %s)" %{ id, mf, pr })
end end
for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*") do for p in nixio.fs.glob("/sys/bus/usb/devices/*/usb[0-9]*-port[0-9]*") do
local bus, port = p:match("(%d+)-(%d+)") local bus, port = p:match("usb(%d+)-port(%d+)")
if bus and port then if bus and port then
usbport:value("usb%u-port%u" %{ tonumber(bus), tonumber(port) }, usbport:value("usb%u-port%u" %{ tonumber(bus), tonumber(port) },
"Hub %u, Port %u" %{ tonumber(bus), tonumber(port) }) "Hub %u, Port %u" %{ tonumber(bus), tonumber(port) })