summaryrefslogtreecommitdiffhomepage
path: root/libs/cbi/luasrc/cbi.lua
diff options
context:
space:
mode:
Diffstat (limited to 'libs/cbi/luasrc/cbi.lua')
-rw-r--r--libs/cbi/luasrc/cbi.lua75
1 files changed, 22 insertions, 53 deletions
diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua
index 178c46f03..d6a5cca05 100644
--- a/libs/cbi/luasrc/cbi.lua
+++ b/libs/cbi/luasrc/cbi.lua
@@ -31,9 +31,11 @@ require("luci.util")
require("luci.http")
require("luci.model.uci")
+local uci = luci.model.uci
local class = luci.util.class
local instanceof = luci.util.instanceof
+
-- Loads a CBI map from given file, creating an environment and returns it
function load(cbimap)
require("luci.fs")
@@ -141,18 +143,16 @@ function Map.__init__(self, config, ...)
self.config = config
self.template = "cbi/map"
- self.uci = luci.model.uci.Session()
- self.ucidata, self.uciorder = self.uci:sections(self.config)
- if not self.ucidata or not self.uciorder then
+ if not uci.load(self.config) then
error("Unable to read UCI data: " .. self.config)
end
end
-- Use optimized UCI writing
function Map.parse(self, ...)
- self.uci:t_load(self.config)
Node.parse(self, ...)
- self.uci:t_save(self.config)
+ uci.save(self.config)
+ uci.unload(self.config)
end
-- Creates a child section
@@ -168,59 +168,31 @@ end
-- UCI add
function Map.add(self, sectiontype)
- local name = self.uci:t_add(self.config, sectiontype)
- if name then
- self.ucidata[name] = {}
- self.ucidata[name][".type"] = sectiontype
- table.insert(self.uciorder, name)
- end
- return name
+ return uci.add(self.config, sectiontype)
end
-- UCI set
function Map.set(self, section, option, value)
- local stat = self.uci:t_set(self.config, section, option, value)
- if stat then
- local val = self.uci:t_get(self.config, section, option)
- if option then
- self.ucidata[section][option] = val
- else
- if not self.ucidata[section] then
- self.ucidata[section] = {}
- end
- self.ucidata[section][".type"] = val
- table.insert(self.uciorder, section)
- end
- end
- return stat
+ return uci.set(self.config, section, option or value, option and value)
end
-- UCI del
function Map.del(self, section, option)
- local stat = self.uci:t_del(self.config, section, option)
- if stat then
- if option then
- self.ucidata[section][option] = nil
- else
- self.ucidata[section] = nil
- for i, k in ipairs(self.uciorder) do
- if section == k then
- table.remove(self.uciorder, i)
- end
- end
- end
+ if option then
+ return uci.delete(self.config, section, option)
+ else
+ return uci.delete(self.config, section)
end
- return stat
end
--- UCI get (cached)
+-- UCI get
function Map.get(self, section, option)
if not section then
- return self.ucidata, self.uciorder
- elseif option and self.ucidata[section] then
- return self.ucidata[section][option]
+ return uci.get_all(self.config)
+ elseif option then
+ return uci.get(self.config, section, option)
else
- return self.ucidata[section]
+ return uci.get_all(self.config, section)
end
end
@@ -396,15 +368,12 @@ end
-- Return all matching UCI sections for this TypedSection
function TypedSection.cfgsections(self)
local sections = {}
- local map, order = self.map:get()
-
- for i, k in ipairs(order) do
- if map[k][".type"] == self.sectiontype then
- if self:checkscope(k) then
- table.insert(sections, k)
- end
- end
- end
+ uci.foreach(self.map.config, self.sectiontype,
+ function (section)
+ if self:checkscope(section[".name"]) then
+ table.insert(sections, section[".name"])
+ end
+ end)
return sections
end