Merge CBI change-detection

This commit is contained in:
Steven Barth 2008-11-03 10:05:48 +00:00
parent 4a15c6ffba
commit 14a2e32142

View file

@ -32,11 +32,13 @@ require("luci.http")
require("luci.uvl") require("luci.uvl")
require("luci.fs") require("luci.fs")
--local event = require "luci.sys.event"
local uci = require("luci.model.uci") local uci = require("luci.model.uci")
local class = luci.util.class local class = luci.util.class
local instanceof = luci.util.instanceof local instanceof = luci.util.instanceof
FORM_NODATA = 0 FORM_NODATA = 0
FORM_PROCEED = 0
FORM_VALID = 1 FORM_VALID = 1
FORM_INVALID = -1 FORM_INVALID = -1
FORM_CHANGED = 2 FORM_CHANGED = 2
@ -287,6 +289,9 @@ function Map.__init__(self, config, ...)
self.apply_on_parse = nil self.apply_on_parse = nil
self.uci = uci.cursor() self.uci = uci.cursor()
self.save = true self.save = true
self.changed = false
if not self.uci:load(self.config) then if not self.uci:load(self.config) then
error("Unable to read UCI data: " .. self.config) error("Unable to read UCI data: " .. self.config)
end end
@ -544,6 +549,7 @@ function AbstractSection.__init__(self, map, sectiontype, ...)
self.tag_error = {} self.tag_error = {}
self.tag_invalid = {} self.tag_invalid = {}
self.tag_deperror = {} self.tag_deperror = {}
self.changed = false
self.optional = true self.optional = true
self.addremove = false self.addremove = false
@ -643,6 +649,12 @@ function AbstractSection.cfgvalue(self, section)
return self.map:get(section) return self.map:get(section)
end end
-- Push events
function AbstractSection.push_events(self)
--luci.util.append(self.map.events, self.events)
self.map.changed = true
end
-- Removes the section -- Removes the section
function AbstractSection.remove(self, section) function AbstractSection.remove(self, section)
return self.map:del(section) return self.map:del(section)
@ -785,6 +797,10 @@ function NamedSection.parse(self, novld)
end end
end end
AbstractSection.parse_optionals(self, s) AbstractSection.parse_optionals(self, s)
if self.changed then
self:push_events()
end
end end
end end
@ -897,6 +913,10 @@ function TypedSection.parse(self, novld)
AbstractSection.parse_optionals(self, created) AbstractSection.parse_optionals(self, created)
end end
end end
if created or self.changed then
self:push_events()
end
end end
-- Verifies scope of sections -- Verifies scope of sections
@ -1040,11 +1060,19 @@ function AbstractValue.parse(self, section)
self.tag_invalid[section] = true self.tag_invalid[section] = true
end end
if fvalue and not (fvalue == cvalue) then if fvalue and not (fvalue == cvalue) then
self:write(section, fvalue) if self:write(section, fvalue) then
-- Push events
self.section.changed = true
--luci.util.append(self.map.events, self.events)
end
end end
else -- Unset the UCI or error else -- Unset the UCI or error
if self.rmempty or self.optional then if self.rmempty or self.optional then
self:remove(section) if self:remove(section) then
-- Push events
self.section.changed = true
--luci.util.append(self.map.events, self.events)
end
elseif self.track_missing and (not fvalue or fvalue ~= cvalue) then elseif self.track_missing and (not fvalue or fvalue ~= cvalue) then
self.tag_missing[section] = true self.tag_missing[section] = true
end end