X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=libs%2Fcore%2Fluasrc%2Fmodel%2Fuci.lua;h=270877677f2487a2cb0d21c8b2b0f681664c1d49;hb=1b94b364980a5fa35f21eb861cc4c720390a2276;hp=46b0db8d82add75cda86f65df6a6c60ad1a86aec;hpb=21de97b23523aa365c929ce72a0fbeee7ba7b333;p=project%2Fluci.git diff --git a/libs/core/luasrc/model/uci.lua b/libs/core/luasrc/model/uci.lua index 46b0db8d8..270877677 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