equal
deleted
inserted
replaced
396 is_last_session = is_last_orig_session; |
396 is_last_session = is_last_orig_session; |
397 }; |
397 }; |
398 if orig_occupant == nil then |
398 if orig_occupant == nil then |
399 event_name = "muc-occupant-pre-join"; |
399 event_name = "muc-occupant-pre-join"; |
400 event.is_new_room = is_new_room; |
400 event.is_new_room = is_new_room; |
|
401 event.occupant = dest_occupant; |
401 elseif dest_occupant == nil then |
402 elseif dest_occupant == nil then |
402 event_name = "muc-occupant-pre-leave"; |
403 event_name = "muc-occupant-pre-leave"; |
|
404 event.occupant = orig_occupant; |
403 else |
405 else |
404 event_name = "muc-occupant-pre-change"; |
406 event_name = "muc-occupant-pre-change"; |
|
407 event.orig_occupant = orig_occupant; |
|
408 event.dest_occupant = dest_occupant; |
405 end |
409 end |
406 if module:fire_event(event_name, event) then return true; end |
410 if module:fire_event(event_name, event) then return true; end |
407 |
411 |
408 -- Check for nick conflicts |
412 -- Check for nick conflicts |
409 if dest_occupant ~= nil and not is_first_dest_session and bare_jid ~= jid_bare(dest_occupant.bare_jid) then -- new nick or has different bare real jid |
413 if dest_occupant ~= nil and not is_first_dest_session and bare_jid ~= jid_bare(dest_occupant.bare_jid) then -- new nick or has different bare real jid |
458 end |
462 end |
459 self:save_occupant(orig_occupant); |
463 self:save_occupant(orig_occupant); |
460 self:publicise_occupant_status(orig_occupant, orig_x, dest_nick); |
464 self:publicise_occupant_status(orig_occupant, orig_x, dest_nick); |
461 |
465 |
462 if is_last_orig_session then |
466 if is_last_orig_session then |
463 module:fire_event("muc-occupant-left", {room = self; nick = orig_occupant.nick;}); |
467 module:fire_event("muc-occupant-left", {room = self; nick = orig_occupant.nick; occupant = orig_occupant;}); |
464 end |
468 end |
465 end |
469 end |
466 |
470 |
467 if dest_occupant ~= nil then |
471 if dest_occupant ~= nil then |
468 dest_occupant:set_session(real_jid, stanza); |
472 dest_occupant:set_session(real_jid, stanza); |
496 self:route_stanza(pr); |
500 self:route_stanza(pr); |
497 end |
501 end |
498 |
502 |
499 if orig_occupant == nil then |
503 if orig_occupant == nil then |
500 if is_first_dest_session then |
504 if is_first_dest_session then |
501 module:fire_event("muc-occupant-joined", {room = self; nick = dest_occupant.nick; stanza = stanza;}); |
505 module:fire_event("muc-occupant-joined", {room = self; nick = dest_occupant.nick; occupant = dest_occupant;}); |
502 end |
506 end |
503 module:fire_event("muc-occupant-session-new", {room = self; nick = dest_occupant.nick; stanza = stanza; jid = real_jid;}); |
507 module:fire_event("muc-occupant-session-new", {room = self; nick = dest_occupant.nick; occupant = dest_occupant; stanza = stanza; jid = real_jid;}); |
504 end |
508 end |
505 end |
509 end |
506 elseif type ~= 'result' then -- bad type |
510 elseif type ~= 'result' then -- bad type |
507 if type ~= 'visible' and type ~= 'invisible' then -- COMPAT ejabberd can broadcast or forward XEP-0018 presences |
511 if type ~= 'visible' and type ~= 'invisible' then -- COMPAT ejabberd can broadcast or forward XEP-0018 presences |
508 origin.send(st.error_reply(stanza, "modify", "bad-request")); -- FIXME correct error? |
512 origin.send(st.error_reply(stanza, "modify", "bad-request")); -- FIXME correct error? |
667 self:save_occupant(occupant); |
671 self:save_occupant(occupant); |
668 occupants_updated[occupant] = true; |
672 occupants_updated[occupant] = true; |
669 end |
673 end |
670 for occupant in pairs(occupants_updated) do |
674 for occupant in pairs(occupants_updated) do |
671 self:publicise_occupant_status(occupant, x); |
675 self:publicise_occupant_status(occupant, x); |
672 module:fire_event("muc-occupant-left", { room = self; nick = occupant.nick; }); |
676 module:fire_event("muc-occupant-left", { room = self; nick = occupant.nick; occupant = occupant;}); |
673 end |
677 end |
674 end |
678 end |
675 |
679 |
676 function room_mt:destroy(newjid, reason, password) |
680 function room_mt:destroy(newjid, reason, password) |
677 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user"}) |
681 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user"}) |