luci-app-travelmate: sync with travelmate 0.9.0
[project/luci.git] / applications / luci-app-travelmate / luasrc / model / cbi / travelmate / overview_tab.lua
index 6b07aab..64ab880 100644 (file)
@@ -2,12 +2,13 @@
 -- This is free software, licensed under the Apache License, Version 2.0
 
 local fs = require("nixio.fs")
-local uci = require("uci")
+local uci = require("luci.model.uci").cursor()
 local json = require("luci.jsonc")
 local nw  = require("luci.model.network").init()
 local fw  = require("luci.model.firewall").init()
-local uplink = uci.get("network", "trm_wwan") or ""
+local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
 local trminput = uci.get("travelmate", "global", "trm_rtfile") or "/tmp/trm_runtime.json"
+local uplink = uci.get("network", trmiface) or ""
 local parse = json.parse(fs.readfile(trminput) or "")
 
 m = Map("travelmate", translate("Travelmate"),
@@ -16,70 +17,86 @@ m = Map("travelmate", translate("Travelmate"),
        .. "<a href=\"%s\" target=\"_blank\">"
        .. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md"))
 
--- Main travelmate options
+function m.on_after_commit(self)
+       luci.sys.call("/etc/init.d/travelmate restart >/dev/null 2>&1")
+       luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
+end
 
 s = m:section(NamedSection, "global", "travelmate")
 
-o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
-o1.default = o1.disabled
-o1.rmempty = false
-
-o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
-       translate("Keep travelmate in an active state."))
-o2.default = o2.enabled
-o2.rmempty = false
+-- Interface Wizard
 
-o3 = s:option(Value, "trm_iface", translate("Restrict interface trigger to certain interface(s)"),
-       translate("Space separated list of interfaces that trigger travelmate processing. "..
-       "To disable event driven (re-)starts remove all entries."))
-o3.rmempty = true
+if uplink == "" then
+       dv = s:option(DummyValue, "nil", translate("Interface Wizard"))
+       dv.template = "cbi/nullsection"
 
-o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"),
-       translate("Additional trigger delay in seconds before travelmate processing begins."))
-o4.default = 2
-o4.datatype = "range(1,90)"
-o4.rmempty = false
+       o = s:option(Value, "trm_iface", translate("Uplink interface"))
+       o.datatype = "and(uciname,rangelength(3,15))"
+       o.default = "trm_wwan"
+       o.rmempty = false
 
-o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
-o5.default = o5.disabled
-o5.rmempty = false
+       function o.validate(self, value)
+               iface = value
+               return iface
+       end
 
--- Interface setup
+       function o.write(self, section, value)
+               uci:set("travelmate", section, "trm_iface", iface)
+               uci:save("travelmate")
+               uci:commit("travelmate")
+       end
 
-if uplink == "" then
-       dv = s:option(DummyValue, "_dummy", translate("Interface Setup"))
-       dv.template = "cbi/nullsection"
        btn = s:option(Button, "", translate("Create Uplink Interface"),
-               translate("Automatically create a new wireless wan uplink interface 'trm_wwan', configure it to use dhcp and ")
+               translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
                .. translate("add it to the wan zone of the firewall. This step has only to be done once."))
        btn.inputtitle = translate("Add Interface")
        btn.inputstyle = "apply"
        btn.disabled = false
        function btn.write()
-               local name = "trm_wwan"
-               local net = nw:add_network(name, { proto = "dhcp" })
+               local net = nw:add_network(iface, { proto = "dhcp" })
                if net then
                        nw:save("network")
                        nw:commit("network")
                        local zone = fw:get_zone_by_network("wan")
                        if zone then
-                               zone:add_network(name)
+                               zone:add_network(iface)
                                fw:save("firewall")
                                fw:commit("firewall")
+                               luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
                        end
-                       luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
-                       luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
                end
+               luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
        end
-else
-       dv = s:option(DummyValue, "_dummy", translate("Interface Setup"),
-               translate("<br />&nbsp;Network Interface 'trm_wwan' created successfully. ")
-               .. translatef("Scan &amp; Add new wireless stations via standard "
-               .. "<a href=\"%s\">"
-               .. "Wireless Setup</a>", luci.dispatcher.build_url("admin/network/wireless")))
-       dv.template = "cbi/nullsection"
+       return m
 end
 
+-- Main travelmate options
+
+o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
+o1.default = o1.disabled
+o1.rmempty = false
+
+o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
+       translate("Keep travelmate in an active state."))
+o2.default = o2.enabled
+o2.rmempty = false
+
+o3 = s:option(Value, "trm_iface", translate("Uplink / Trigger interface"),
+       translate("Name of the uplink interface that triggers travelmate processing."))
+o3.datatype = "and(uciname,rangelength(3,15))"
+o3.default = "trm_wwan"
+o3.rmempty = false
+
+o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"),
+       translate("Additional trigger delay in seconds before travelmate processing begins."))
+o4.default = 2
+o4.datatype = "range(1,90)"
+o4.rmempty = false
+
+o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
+o5.default = o5.disabled
+o5.rmempty = false
+
 -- Runtime information
 
 ds = s:option(DummyValue, "_dummy", translate("Runtime information"))