Merge pull request #3400 from TDT-AG/pr/20191210-luci-mk
[oweals/luci.git] / applications / luci-app-opkg / luasrc / controller / opkg.lua
index 39c5d1fb85d45d2ec7e19ec670bfe4097d7be623..ebdcf1b09c82a584491934750f50a239c5f808b3 100644 (file)
@@ -3,21 +3,26 @@
 
 module("luci.controller.opkg", package.seeall)
 
-function index()
-       entry({"admin", "system", "opkg"}, template("opkg"), _("Software"), 30)
-       entry({"admin", "system", "opkg", "list"}, call("action_list")).leaf = true
-       entry({"admin", "system", "opkg", "exec"}, post("action_exec")).leaf = true
-       entry({"admin", "system", "opkg", "statvfs"}, call("action_statvfs")).leaf = true
-       entry({"admin", "system", "opkg", "config"}, post_on({ data = true }, "action_config")).leaf = true
-end
-
 function action_list(mode)
+       local util = require "luci.util"
        local cmd
 
        if mode == "installed" then
                cmd = { "/bin/cat", "/usr/lib/opkg/status" }
        else
-               cmd = { "/bin/sh", "-c", [[find /tmp/opkg-lists/ -type f '!' -name '*.sig' | xargs -r gzip -cd]] }
+               local lists_dir = nil
+
+               local fd = io.popen([[sed -rne 's#^lists_dir \S+ (\S+)#\1#p' /etc/opkg.conf /etc/opkg/*.conf 2>/dev/null]], "r")
+               if fd then
+                       lists_dir = fd:read("*l")
+                       fd:close()
+               end
+
+               if not lists_dir or #lists_dir == 0 then
+                       lists_dir = "/tmp/opkg-lists"
+               end
+
+               cmd = { "/bin/sh", "-c", [[find %s -type f '!' -name '*.sig' | xargs -r gzip -cd]] % util.shellquote(lists_dir) }
        end
 
        luci.http.prepare_content("text/plain; charset=utf-8")