* Updated INSTALL file
authorSteven Barth <steven@midlink.org>
Wed, 2 Apr 2008 10:10:32 +0000 (10:10 +0000)
committerSteven Barth <steven@midlink.org>
Wed, 2 Apr 2008 10:10:32 +0000 (10:10 +0000)
INSTALL
src/ffluci/model/ipkg.lua
src/ffluci/util.lua

diff --git a/INSTALL b/INSTALL
index 20e9a49..a9196f0 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -35,8 +35,8 @@ TOC:
        Prerequisites:
                CGI enabled webserver
                Lua 5.1.x or later
-               LuaFileSystem Lua extension
-               Haserl 0.9x or later with Lua support builtin
+               Luaposix Lua extension
+               Haserl 0.9.23 or later with Lua support builtin
        
        Installation:
        Use make to build a distribution of FFLuCI
index a0ca8a8..4779854 100644 (file)
@@ -27,3 +27,84 @@ limitations under the License.
 ]]--
 module("ffluci.model.ipkg", package.seeall)
 require("ffluci.sys")
+require("ffluci.util")
+
+ipkg = "ipkg"
+local statuslist = nil
+
+-- Returns repository information
+function info(pkg)
+       -- To be implemented
+end
+
+-- Returns a table with status information
+function status(refresh)
+       if not statuslist or refresh then
+               statuslist = _parselist(ffluci.sys.exec(ipkg .. " status"))
+       end
+       
+       return statuslist 
+end
+
+-- Installs a package
+function install(pkg)
+       if not pkg then
+               return nil
+       end
+       
+       local c = ipkg .. " install '" .. pkg:gsub("'", "") .. "' >/dev/null 2>&1"
+       local r = os.execute(c)
+       return (r == 0), r      
+end
+
+function installed(pkg, ...)
+       local p = status(...)[pkg]
+       return (p and p.Status and p.Status.installed)
+end
+
+function _parselist(rawdata)   
+       if type(rawdata) ~= "string" then
+               error("IPKG: Invalid rawdata given")
+       end
+       
+       rawdata = ffluci.util.split(rawdata) 
+       local data = {}
+       local c = {}
+       local l = nil
+       
+       for k, line in pairs(rawdata) do
+               if line:sub(1, 1) ~= " " then
+                       local split = ffluci.util.split(line, ":", 1)
+                       local key = nil
+                       local val = nil
+                       
+                       if split[1] then
+                               key = ffluci.util.trim(split[1])
+                       end
+                       
+                       if split[2] then
+                               val = ffluci.util.trim(split[2])
+                       end
+                       
+                       if key and val then
+                               if key == "Package" then
+                                       c = {Package = val}
+                                       data[val] = c
+                               elseif key == "Status" then
+                                       c.Status = {}
+                                       for i, j in pairs(ffluci.util.split(val, " ")) do
+                                               c.Status[j] = true
+                                       end
+                               else
+                                       c[key] = val
+                               end
+                               l = key
+                       end
+               else
+                       -- Multi-line field
+                       c[l] = c[l] .. "\n" .. line:sub(2)
+               end
+       end
+       
+       return data
+end
\ No newline at end of file
index 54ee071..a33d141 100644 (file)
@@ -145,9 +145,10 @@ function sessionid()
 end
 
 
--- Splits a string into an array (Taken from lua-users.org)
-function split(str, pat)
+-- Splits a string into an array (Adapted from lua-users.org)
+function split(str, pat, max)
        pat = pat or "\n"
+       max = max or -1
        
        local t = {}
        local fpat = "(.-)" .. pat
@@ -155,10 +156,14 @@ function split(str, pat)
        local s, e, cap = str:find(fpat, 1)
        
        while s do
+               max = max - 1
                if s ~= 1 or cap ~= "" then
                        table.insert(t,cap)
                end
                last_end = e+1
+               if max == 0 then
+                       break
+               end
                s, e, cap = str:find(fpat, last_end)
        end
        
@@ -170,6 +175,10 @@ function split(str, pat)
        return t
 end
 
+-- Removes whitespace from beginning and end of a string
+function trim (string)
+       return string:gsub("^%s*(.-)%s*$", "%1")
+end
 
 -- Updates given table with new values
 function update(t, updates)