From 14a2e32142cc2bba58de79de8b2b410be21b7ac7 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Mon, 3 Nov 2008 10:05:48 +0000 Subject: [PATCH] Merge CBI change-detection --- libs/cbi/luasrc/cbi.lua | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua index 328722f9a..78f6b7d5e 100644 --- a/libs/cbi/luasrc/cbi.lua +++ b/libs/cbi/luasrc/cbi.lua @@ -32,11 +32,13 @@ require("luci.http") require("luci.uvl") require("luci.fs") +--local event = require "luci.sys.event" local uci = require("luci.model.uci") local class = luci.util.class local instanceof = luci.util.instanceof FORM_NODATA = 0 +FORM_PROCEED = 0 FORM_VALID = 1 FORM_INVALID = -1 FORM_CHANGED = 2 @@ -287,6 +289,9 @@ function Map.__init__(self, config, ...) self.apply_on_parse = nil self.uci = uci.cursor() self.save = true + + self.changed = false + if not self.uci:load(self.config) then error("Unable to read UCI data: " .. self.config) end @@ -544,6 +549,7 @@ function AbstractSection.__init__(self, map, sectiontype, ...) self.tag_error = {} self.tag_invalid = {} self.tag_deperror = {} + self.changed = false self.optional = true self.addremove = false @@ -643,6 +649,12 @@ function AbstractSection.cfgvalue(self, section) return self.map:get(section) end +-- Push events +function AbstractSection.push_events(self) + --luci.util.append(self.map.events, self.events) + self.map.changed = true +end + -- Removes the section function AbstractSection.remove(self, section) return self.map:del(section) @@ -785,6 +797,10 @@ function NamedSection.parse(self, novld) end end AbstractSection.parse_optionals(self, s) + + if self.changed then + self:push_events() + end end end @@ -897,6 +913,10 @@ function TypedSection.parse(self, novld) AbstractSection.parse_optionals(self, created) end end + + if created or self.changed then + self:push_events() + end end -- Verifies scope of sections @@ -1040,11 +1060,19 @@ function AbstractValue.parse(self, section) self.tag_invalid[section] = true end 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 else -- Unset the UCI or error 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 self.tag_missing[section] = true end -- 2.25.1