diff options
-rw-r--r-- | libs/core/luasrc/model/uci.lua | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/libs/core/luasrc/model/uci.lua b/libs/core/luasrc/model/uci.lua index 46b0db8d82..270877677f 100644 --- a/libs/core/luasrc/model/uci.lua +++ b/libs/core/luasrc/model/uci.lua @@ -30,8 +30,9 @@ local table = require "table" local setmetatable, rawget, rawset = setmetatable, rawget, rawset -local error, pairs, ipairs, tostring = error, pairs, ipairs, tostring -local require, getmetatable, type = require, getmetatable, type +local require, getmetatable = require, getmetatable +local error, pairs, ipairs = error, pairs, ipairs +local type, tostring, tonumber = type, tostring, tonumber --- LuCI UCI model library. -- The typical workflow for UCI is: Get a cursor instance from the @@ -167,6 +168,34 @@ function Cursor.get_list(self, config, section, option) return nil end +--- Get the given option from the first section with the given type. +-- @param config UCI config +-- @param type UCI section type +-- @param option UCI option (optional) +-- @param default Default value (optional) +-- @return UCI value +function Cursor.get_first(self, conf, stype, opt, def) + local rv = def + + self:foreach(conf, stype, + function(s) + local val = not opt and s['.name'] or s[opt] + + if type(def) == "number" then + val = tonumber(val) + elseif type(def) == "boolean" then + val = (val == "1" or val == "true" or val == "enabled") + end + + if val ~= nil then + rv = val + return false + end + end) + + return rv +end + --- Set given values as list. -- @param config UCI config -- @param section UCI section name |