plugins/mod_storage_internal.lua
changeset 10841 f23363380599
parent 10227 d185c4961ee0
child 10846 5a6ba2f38e2b
equal deleted inserted replaced
10840:93019f3edd68 10841:f23363380599
   206 		item = st.deserialize(item);
   206 		item = st.deserialize(item);
   207 		return key, item, when, with;
   207 		return key, item, when, with;
   208 	end, count;
   208 	end, count;
   209 end
   209 end
   210 
   210 
       
   211 function archive:get(username, wanted_key)
       
   212 	local iter, err = self:find(username, { key = wanted_key })
       
   213 	if not iter then return iter, err; end
       
   214 	for key, stanza, when, with in iter do
       
   215 		if key == wanted_key then
       
   216 			return stanza, when, with;
       
   217 		end
       
   218 	end
       
   219 	return nil, "item-not-found";
       
   220 end
       
   221 
       
   222 function archive:set(username, key, new_value, new_when, new_with)
       
   223 	local items, err = datamanager.list_load(username, host, self.store);
       
   224 	if not items then
       
   225 		if err then
       
   226 			return items, err;
       
   227 		else
       
   228 			return nil, "item-not-found";
       
   229 		end
       
   230 	end
       
   231 
       
   232 	for i = 1, #items do
       
   233 		local old_item = items[i];
       
   234 		if old_item.key == key then
       
   235 			local item = st.preserialize(st.clone(new_value));
       
   236 
       
   237 			local when = new_when or item.when or datetime.parse(item.attr.stamp);
       
   238 			item.key = key;
       
   239 			item.when = when;
       
   240 			item.with = new_with or old_item.with;
       
   241 			item.attr.stamp = datetime.datetime(when);
       
   242 			item.attr.stamp_legacy = datetime.legacy(when);
       
   243 			items[i] = item;
       
   244 			return datamanager.list_store(username, host, self.store, items);
       
   245 		end
       
   246 	end
       
   247 
       
   248 	return nil, "item-not-found";
       
   249 end
       
   250 
   211 function archive:dates(username)
   251 function archive:dates(username)
   212 	local items, err = datamanager.list_load(username, host, self.store);
   252 	local items, err = datamanager.list_load(username, host, self.store);
   213 	if not items then return items, err; end
   253 	if not items then return items, err; end
   214 	return array(items):pluck("when"):map(datetime.date):unique();
   254 	return array(items):pluck("when"):map(datetime.date):unique();
   215 end
   255 end