core/rostermanager.lua
changeset 1898 1ce02e2f5a3f
parent 1897 6d81e74310a7
child 1947 ff2b86076e9c
equal deleted inserted replaced
1897:6d81e74310a7 1898:1ce02e2f5a3f
   128 			item.subscription = "to";
   128 			item.subscription = "to";
   129 		else -- subscription == from
   129 		else -- subscription == from
   130 			item.subscription = "both";
   130 			item.subscription = "both";
   131 		end
   131 		end
   132 		item.ask = nil;
   132 		item.ask = nil;
   133 		return datamanager.store(username, host, "roster", roster);
   133 		return save_roster(username, host, roster);
   134 	end
   134 	end
   135 end
   135 end
   136 
   136 
   137 function process_inbound_subscription_cancellation(username, host, jid)
   137 function process_inbound_subscription_cancellation(username, host, jid)
   138 	local roster = load_roster(username, host);
   138 	local roster = load_roster(username, host);
   150 			item.subscription = "from";
   150 			item.subscription = "from";
   151 			changed = true;
   151 			changed = true;
   152 		end
   152 		end
   153 	end
   153 	end
   154 	if changed then
   154 	if changed then
   155 		return datamanager.store(username, host, "roster", roster);
   155 		return save_roster(username, host, roster);
   156 	end
   156 	end
   157 end
   157 end
   158 
   158 
   159 function process_inbound_unsubscribe(username, host, jid)
   159 function process_inbound_unsubscribe(username, host, jid)
   160 	local roster = load_roster(username, host);
   160 	local roster = load_roster(username, host);
   172 			item.subscription = "to";
   172 			item.subscription = "to";
   173 			changed = true;
   173 			changed = true;
   174 		end
   174 		end
   175 	end
   175 	end
   176 	if changed then
   176 	if changed then
   177 		return datamanager.store(username, host, "roster", roster);
   177 		return save_roster(username, host, roster);
   178 	end
   178 	end
   179 end
   179 end
   180 
   180 
   181 function is_contact_subscribed(username, host, jid)
   181 function is_contact_subscribed(username, host, jid)
   182 	local roster = load_roster(username, host);
   182 	local roster = load_roster(username, host);
   194 	if item and (item.subscription == "from" or item.subscription == "both") then
   194 	if item and (item.subscription == "from" or item.subscription == "both") then
   195 		return; -- false
   195 		return; -- false
   196 	end
   196 	end
   197 	if not roster.pending then roster.pending = {}; end
   197 	if not roster.pending then roster.pending = {}; end
   198 	roster.pending[jid] = true;
   198 	roster.pending[jid] = true;
   199 	return datamanager.store(username, host, "roster", roster);
   199 	return save_roster(username, host, roster);
   200 end
   200 end
   201 function is_contact_pending_out(username, host, jid)
   201 function is_contact_pending_out(username, host, jid)
   202 	local roster = load_roster(username, host);
   202 	local roster = load_roster(username, host);
   203 	local item = roster[jid];
   203 	local item = roster[jid];
   204 	return item and item.ask;
   204 	return item and item.ask;
   213 		item = {subscription = "none", groups = {}};
   213 		item = {subscription = "none", groups = {}};
   214 		roster[jid] = item;
   214 		roster[jid] = item;
   215 	end
   215 	end
   216 	item.ask = "subscribe";
   216 	item.ask = "subscribe";
   217 	log("debug", "set_contact_pending_out: saving roster; set "..username.."@"..host..".roster["..jid.."].ask=subscribe");
   217 	log("debug", "set_contact_pending_out: saving roster; set "..username.."@"..host..".roster["..jid.."].ask=subscribe");
   218 	return datamanager.store(username, host, "roster", roster);
   218 	return save_roster(username, host, roster);
   219 end
   219 end
   220 function unsubscribe(username, host, jid)
   220 function unsubscribe(username, host, jid)
   221 	local roster = load_roster(username, host);
   221 	local roster = load_roster(username, host);
   222 	local item = roster[jid];
   222 	local item = roster[jid];
   223 	if not item then return false; end
   223 	if not item then return false; end
   228 	if item.subscription == "both" then
   228 	if item.subscription == "both" then
   229 		item.subscription = "from";
   229 		item.subscription = "from";
   230 	elseif item.subscription == "to" then
   230 	elseif item.subscription == "to" then
   231 		item.subscription = "none";
   231 		item.subscription = "none";
   232 	end
   232 	end
   233 	return datamanager.store(username, host, "roster", roster);
   233 	return save_roster(username, host, roster);
   234 end
   234 end
   235 function subscribed(username, host, jid)
   235 function subscribed(username, host, jid)
   236 	if is_contact_pending_in(username, host, jid) then
   236 	if is_contact_pending_in(username, host, jid) then
   237 		local roster = load_roster(username, host);
   237 		local roster = load_roster(username, host);
   238 		local item = roster[jid];
   238 		local item = roster[jid];
   245 		else -- subscription == to
   245 		else -- subscription == to
   246 			item.subscription = "both";
   246 			item.subscription = "both";
   247 		end
   247 		end
   248 		roster.pending[jid] = nil;
   248 		roster.pending[jid] = nil;
   249 		-- TODO maybe remove roster.pending if empty
   249 		-- TODO maybe remove roster.pending if empty
   250 		return datamanager.store(username, host, "roster", roster);
   250 		return save_roster(username, host, roster);
   251 	end -- TODO else implement optional feature pre-approval (ask = subscribed)
   251 	end -- TODO else implement optional feature pre-approval (ask = subscribed)
   252 end
   252 end
   253 function unsubscribed(username, host, jid)
   253 function unsubscribed(username, host, jid)
   254 	local roster = load_roster(username, host);
   254 	local roster = load_roster(username, host);
   255 	local item = roster[jid];
   255 	local item = roster[jid];
   267 			item.subscription = "to";
   267 			item.subscription = "to";
   268 			changed = true;
   268 			changed = true;
   269 		end
   269 		end
   270 	end
   270 	end
   271 	if changed then
   271 	if changed then
   272 		return datamanager.store(username, host, "roster", roster);
   272 		return save_roster(username, host, roster);
   273 	end
   273 	end
   274 end
   274 end
   275 
   275 
   276 function process_outbound_subscription_request(username, host, jid)
   276 function process_outbound_subscription_request(username, host, jid)
   277 	local roster = load_roster(username, host);
   277 	local roster = load_roster(username, host);
   278 	local item = roster[jid];
   278 	local item = roster[jid];
   279 	if item and (item.subscription == "none" or item.subscription == "from") then
   279 	if item and (item.subscription == "none" or item.subscription == "from") then
   280 		item.ask = "subscribe";
   280 		item.ask = "subscribe";
   281 		return datamanager.store(username, host, "roster", roster);
   281 		return save_roster(username, host, roster);
   282 	end
   282 	end
   283 end
   283 end
   284 
   284 
   285 --[[function process_outbound_subscription_approval(username, host, jid)
   285 --[[function process_outbound_subscription_approval(username, host, jid)
   286 	local roster = load_roster(username, host);
   286 	local roster = load_roster(username, host);
   287 	local item = roster[jid];
   287 	local item = roster[jid];
   288 	if item and (item.subscription == "none" or item.subscription == "from" then
   288 	if item and (item.subscription == "none" or item.subscription == "from" then
   289 		item.ask = "subscribe";
   289 		item.ask = "subscribe";
   290 		return datamanager.store(username, host, "roster", roster);
   290 		return save_roster(username, host, roster);
   291 	end
   291 	end
   292 end]]
   292 end]]
   293 
   293 
   294 
   294 
   295 
   295