luci-app-ddns: get rid of luci-lib-ipkg depdency

Invoking opkg to obtain the installed package version is very slow and
resource intensive, parse the related control file directly to avoid
the extraneous dependency and resource consumption.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2022-10-20 10:07:21 +02:00
parent 1a47b37f1d
commit 3395656b9f
2 changed files with 13 additions and 8 deletions

View file

@ -12,7 +12,7 @@ PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=Ansuel Smith <ansuelsmth@gmail.com>
LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts)
LUCI_DEPENDS:=+luci-lib-ipkg +luci-mod-admin-full +ddns-scripts
LUCI_DEPENDS:=+luci-mod-admin-full +ddns-scripts
LUCI_PKGARCH:=all
include ../../luci.mk

View file

@ -153,21 +153,26 @@ local methods = {
},
get_ddns_state = {
call = function()
local ipkg = require "luci.model.ipkg"
local uci = UCI.cursor()
local dateformat = uci:get("ddns", "global", "ddns_dateformat") or "%F %R"
local services_mtime = fs.stat(ddns_package_path .. "/list", 'mtime')
uci:unload("ddns")
local ver, srv_ver_cmd
local res = {}
local ver
if ipkg then
ver = ipkg.info(srv_name)[srv_name].Version
else
srv_ver_cmd = luci_helper .. " -V | awk {'print $2'} "
ver = util.exec(srv_ver_cmd)
local _, ctrl = pcall(io.lines, "/usr/lib/opkg/info/%s.control" % srv_name)
if ctrl then
for line in ctrl do
ver = line:match("^Version: (.+)$")
if ver then
break
end
end
end
ver = ver or util.trim(util.exec("%s -V | awk {'print $2'}" % luci_helper))
res['_version'] = ver and #ver > 0 and ver or nil
res['_enabled'] = sys.init.enabled("ddns")
res['_curr_dateformat'] = os.date(dateformat)