mod_storage_internal, datamanager: Add support for iterating over users with data in a store

This commit is contained in:
Kim Alvefur 2012-09-21 17:23:08 +02:00
parent 7aca7b6303
commit 196022f3f5
2 changed files with 25 additions and 2 deletions

View file

@ -5,8 +5,8 @@ local host = module.host;
local driver = {};
local driver_mt = { __index = driver };
function driver:open(store)
return setmetatable({ store = store }, driver_mt);
function driver:open(store, typ)
return setmetatable({ store = store, type = typ }, driver_mt);
end
function driver:get(user)
return datamanager.load(user, host, self.store);
@ -20,6 +20,10 @@ function driver:stores(username)
return datamanager.stores(username, host);
end
function driver:users()
return datamanager.users(host, self.store, self.type);
end
function driver:purge(user)
return datamanager.purge(user, host);
end

View file

@ -282,6 +282,25 @@ local type_map = {
list = "list";
}
function users(host, store, typ)
typ = type_map[typ or "keyval"];
local store_dir = format("%s/%s/%s", data_path, encode(host), encode(store));
local mode, err = lfs.attributes(store_dir, "mode");
if not mode then
return function() log("debug", err or (store_dir .. " does not exist")) end
end
local next, state = lfs.dir(store_dir);
return function(state)
for node in next, state do
local file, ext = node:match("^(.*)%.([dalist]+)$");
if file and ext == typ then
return decode(file);
end
end
end, state;
end
function stores(username, host, typ)
typ = type_map[typ or "keyval"];
local store_dir = format("%s/%s/", data_path, encode(host));