# HG changeset patch # User Kim Alvefur # Date 1343503362 -7200 # Node ID c40ea227f8affdb03ec41be321b73dcaefaded77 # Parent 9962fc19f9e9342065982b18351576f484c50e08 util.datamanager: Add function for listing stores diff -r 9962fc19f9e9 -r c40ea227f8af util/datamanager.lua --- a/util/datamanager.lua Sat Jul 28 01:28:14 2012 +0100 +++ b/util/datamanager.lua Sat Jul 28 21:22:42 2012 +0200 @@ -226,4 +226,31 @@ return items; end +function list_stores(username, host) + if not host then + return nil, "bad argument #2 to 'list_stores' (string expected, got nothing)"; + end + local list = {}; + local host_dir = format("%s/%s/", data_path, encode(host)); + for node in lfs.dir(host_dir) do + if not node:match"^%." then -- dots should be encoded, this is probably . or .. + local store = decode(node); + local path = host_dir..node; + if username == true then + if lfs.attributes(path, "mode") == "directory" then + list[#list+1] = store; + end + elseif username then + if lfs.attributes(getpath(username, host, store), "mode") + or lfs.attributes(getpath(username, host, store, "list"), "mode") then + list[#list+1] = store; + end + elseif lfs.attributes(path, "mode") == "file" then + list[#list+1] = store:gsub("%.[dalist]+$",""); + end + end + end + return list; +end + return _M;