From 243655b634a308e2380793d86e74feb39371ff5a Mon Sep 17 00:00:00 2001 From: Wouter R Date: Wed, 24 Jul 2013 16:36:27 +0200 Subject: [PATCH] First steps towards package update support (current+available versions can be requested). --- opkg.conf | 6 +++++ src/rest/api/api_info.lua | 19 ++++++++++++++ src/rest/api/api_system.lua | 52 +++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 opkg.conf create mode 100644 src/rest/api/api_info.lua create mode 100644 src/rest/api/api_system.lua diff --git a/opkg.conf b/opkg.conf new file mode 100644 index 0000000..255327a --- /dev/null +++ b/opkg.conf @@ -0,0 +1,6 @@ +#src/gz wifibox http://doodle3d.com/static/wifibox-packages +src/gz wifibox http://192.168.5.2/~wouter/wifibox-packages +dest root / +dest ram /tmp +lists_dir ext /var/opkg-lists +option overlay_root /overlay diff --git a/src/rest/api/api_info.lua b/src/rest/api/api_info.lua new file mode 100644 index 0000000..277348c --- /dev/null +++ b/src/rest/api/api_info.lua @@ -0,0 +1,19 @@ +local M = { + isApi = true +} + + +function M._global(request, response) + response:setSuccess() +end + +function M.firmware(request, response) + --response:setSuccess() + -- can return (essentially all wraps ipkg output): + -- available (list) + -- current + -- latest + -- upgradable +end + +return M diff --git a/src/rest/api/api_system.lua b/src/rest/api/api_system.lua new file mode 100644 index 0000000..27304d3 --- /dev/null +++ b/src/rest/api/api_system.lua @@ -0,0 +1,52 @@ +local M = { + isApi = true +} + + +-- TODO: this function has been duplicated from test/test_wlanconfig.lua +local function captureCommandOutput(cmd) + local f = assert(io.popen(cmd, 'r')) + local output = assert(f:read('*all')) + --TODO: test if this works to obtain the return code (http://stackoverflow.com/questions/7607384/getting-return-status-and-program-output) + --local rv = assert(f:close()) + --return output,rv[3] + return output +end + +function M._global(request, response) + response:setSuccess() +end + +function M.fwversions(request, response) + local pkgName = 'wifibox' + local opkg = 'opkg -f /usr/share/lua/wifibox/opkg.conf' + local output, rv + + response:setSuccess() + + output = captureCommandOutput(opkg .. ' list-installed wifibox') + local version = output:match('^wifibox %- (.*)\n$') + response:addData('current', version) + + rv = os.execute(opkg .. ' update >/dev/null') + if rv == 0 then + output = captureCommandOutput(opkg .. ' list wifibox') + local versions = {} + for v in output:gmatch('wifibox %- (%d+\.%d+\.%d+%-%d+) %- ') do + versions[#versions+1] = v + end + response:addData('all_versions', versions) + else + response:setFail("could not fetch update list") + end +end + +-- functie maken om mbv 'opkg compare-versions ' versies te vergelijken? +-- of intern vergelijken? (uitsplitsen naar major/minor/patch/pkgrel) +-- met comparefunctie (voor table.sort()) + +-- TO UPGRADE to version x (e.g. 0.1.0-7) (met force-optie): +-- 'opkg update' +-- 'opkg upgrade wifibox' (state versions explicitly?) + +return M