Comparison

plugins/muc/muc.lib.lua @ 8856:538bb632a2b6

MUC: Use util.jid.resource
author Kim Alvefur <zash@zash.se>
date Fri, 01 Jun 2018 09:16:24 +0200
parent 8853:f84f566dea58
child 8859:11176f47a03a
comparison
equal deleted inserted replaced
8855:dba528970aa5 8856:538bb632a2b6
16 local iterators = require "util.iterators"; 16 local iterators = require "util.iterators";
17 local jid_split = require "util.jid".split; 17 local jid_split = require "util.jid".split;
18 local jid_bare = require "util.jid".bare; 18 local jid_bare = require "util.jid".bare;
19 local jid_prep = require "util.jid".prep; 19 local jid_prep = require "util.jid".prep;
20 local jid_join = require "util.jid".join; 20 local jid_join = require "util.jid".join;
21 local jid_resource = require "util.jid".resource;
21 local st = require "util.stanza"; 22 local st = require "util.stanza";
22 local base64 = require "util.encodings".base64; 23 local base64 = require "util.encodings".base64;
23 local md5 = require "util.hashes".md5; 24 local md5 = require "util.hashes".md5;
24 25
25 local log = module._log; 26 local log = module._log;
240 241
241 local whois = self:get_whois(); 242 local whois = self:get_whois();
242 243
243 local actor_nick; 244 local actor_nick;
244 if actor then 245 if actor then
245 actor_nick = select(3, jid_split(self:get_occupant_jid(actor))); 246 actor_nick = jid_resource(self:get_occupant_jid(actor));
246 end 247 end
247 248
248 local full_p, full_x; 249 local full_p, full_x;
249 local function get_full_p() 250 local function get_full_p()
250 if full_p == nil then 251 if full_p == nil then
561 orig_occupant:set_session(real_jid, stanza); 562 orig_occupant:set_session(real_jid, stanza);
562 else 563 else
563 log("debug", "session %s is changing from occupant %s to %s", real_jid, orig_occupant.nick, dest_occupant.nick); 564 log("debug", "session %s is changing from occupant %s to %s", real_jid, orig_occupant.nick, dest_occupant.nick);
564 local generated_unavail = st.presence {from = orig_occupant.nick, to = real_jid, type = "unavailable"}; 565 local generated_unavail = st.presence {from = orig_occupant.nick, to = real_jid, type = "unavailable"};
565 orig_occupant:set_session(real_jid, generated_unavail); 566 orig_occupant:set_session(real_jid, generated_unavail);
566 dest_nick = select(3, jid_split(dest_occupant.nick)); 567 dest_nick = jid_resource(dest_occupant.nick);
567 if not is_first_dest_session then -- User is swapping into another pre-existing session 568 if not is_first_dest_session then -- User is swapping into another pre-existing session
568 log("debug", "session %s is swapping into multisession %s, showing it leave.", real_jid, dest_occupant.nick); 569 log("debug", "session %s is swapping into multisession %s, showing it leave.", real_jid, dest_occupant.nick);
569 -- Show the other session leaving 570 -- Show the other session leaving
570 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user";}); 571 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user";});
571 add_item(x, self:get_affiliation(bare_jid), "none"); 572 add_item(x, self:get_affiliation(bare_jid), "none");
916 if not item.attr.jid and item.attr.nick then -- COMPAT Workaround for Miranda sending 'nick' instead of 'jid' when changing affiliation 917 if not item.attr.jid and item.attr.nick then -- COMPAT Workaround for Miranda sending 'nick' instead of 'jid' when changing affiliation
917 local occupant = self:get_occupant_by_nick(self.jid.."/"..item.attr.nick); 918 local occupant = self:get_occupant_by_nick(self.jid.."/"..item.attr.nick);
918 if occupant then item.attr.jid = occupant.jid; end 919 if occupant then item.attr.jid = occupant.jid; end
919 elseif not item.attr.nick and item.attr.jid then 920 elseif not item.attr.nick and item.attr.jid then
920 local nick = self:get_occupant_jid(item.attr.jid); 921 local nick = self:get_occupant_jid(item.attr.jid);
921 if nick then item.attr.nick = select(3, jid_split(nick)); end 922 if nick then item.attr.nick = jid_resource(nick); end
922 end 923 end
923 local actor = stanza.attr.from; 924 local actor = stanza.attr.from;
924 local reason = item:get_child_text("reason"); 925 local reason = item:get_child_text("reason");
925 local success, errtype, err 926 local success, errtype, err
926 if item.attr.affiliation and item.attr.jid and not item.attr.role then 927 if item.attr.affiliation and item.attr.jid and not item.attr.role then
968 if _rol == "none" then _rol = nil; end 969 if _rol == "none" then _rol = nil; end
969 local reply = st.reply(stanza):query("http://jabber.org/protocol/muc#admin"); 970 local reply = st.reply(stanza):query("http://jabber.org/protocol/muc#admin");
970 -- TODO: whois check here? (though fully anonymous rooms are not supported) 971 -- TODO: whois check here? (though fully anonymous rooms are not supported)
971 for occupant_jid, occupant in self:each_occupant() do 972 for occupant_jid, occupant in self:each_occupant() do
972 if occupant.role == _rol then 973 if occupant.role == _rol then
973 local nick = select(3,jid_split(occupant_jid)); 974 local nick = jid_resource(occupant_jid);
974 self:build_item_list(occupant, reply, false, nick); 975 self:build_item_list(occupant, reply, false, nick);
975 end 976 end
976 end 977 end
977 origin.send(reply:up()); 978 origin.send(reply:up());
978 return true; 979 return true;