fix: Adds display name to notifications about lobby operations.

Display name for lobby operations notifications are taken from the list of knocking participants which is available only to moderators. In case of not all moderators the notifications were broken.
This commit is contained in:
damencho 2020-07-20 11:32:51 -05:00 committed by Дамян Минков
parent b106e51a10
commit ddc2b4f26e
3 changed files with 13 additions and 40 deletions

View File

@ -1,23 +1,6 @@
// @flow // @flow
import { getCurrentConference } from '../base/conference'; import { getCurrentConference } from '../base/conference';
import { toState } from '../base/redux';
const JID_PATTERN = '[^@]+@[^/]+/(.+)';
/**
* Returns a knocking participant by ID or JID.
*
* @param {Function | Object} stateful - The Redux state or a function that resolves to the Redux state.
* @param {string} id - The ID or JID of the participant.
* @returns {Object}
*/
export function getKnockingParticipantById(stateful: Function | Object, id: string): Object {
const { knockingParticipants } = toState(stateful)['features/lobby'];
const idToFind = getIdFromJid(id) || id;
return knockingParticipants.find(p => p.id === idToFind);
}
/** /**
* Approves (lets in) or rejects a knocking participant. * Approves (lets in) or rejects a knocking participant.
@ -38,15 +21,3 @@ export function setKnockingParticipantApproval(getState: Function, id: string, a
} }
} }
} }
/**
* Parses an ID from a JID, if a JID is provided, undefined otherwise.
*
* @param {string} jid - The JID to get the ID from.
* @returns {?string}
*/
function getIdFromJid(jid: string): ?string {
const match = new RegExp(JID_PATTERN, 'g').exec(jid) || [];
return match[1];
}

View File

@ -17,7 +17,6 @@ import {
startKnocking, startKnocking,
setPasswordJoinFailed setPasswordJoinFailed
} from './actions'; } from './actions';
import { getKnockingParticipantById } from './functions';
MiddlewareRegistry.register(store => next => action => { MiddlewareRegistry.register(store => next => action => {
switch (action.type) { switch (action.type) {
@ -176,7 +175,8 @@ function _maybeSendLobbyNotification(origin, message, { dispatch, getState }) {
const notificationProps: any = { const notificationProps: any = {
descriptionArguments: { descriptionArguments: {
originParticipantName: getParticipantDisplayName(getState, origin._id) originParticipantName: getParticipantDisplayName(getState, origin._id),
targetParticipantName: message.name
}, },
titleKey: 'lobby.notificationTitle' titleKey: 'lobby.notificationTitle'
}; };
@ -187,13 +187,9 @@ function _maybeSendLobbyNotification(origin, message, { dispatch, getState }) {
break; break;
case 'LOBBY-ACCESS-GRANTED': case 'LOBBY-ACCESS-GRANTED':
notificationProps.descriptionKey = 'lobby.notificationLobbyAccessGranted'; notificationProps.descriptionKey = 'lobby.notificationLobbyAccessGranted';
notificationProps.descriptionArguments.targetParticipantName
= getKnockingParticipantById(getState, message.value)?.name;
break; break;
case 'LOBBY-ACCESS-DENIED': case 'LOBBY-ACCESS-DENIED':
notificationProps.descriptionKey = 'lobby.notificationLobbyAccessDenied'; notificationProps.descriptionKey = 'lobby.notificationLobbyAccessDenied';
notificationProps.descriptionArguments.targetParticipantName
= getKnockingParticipantById(getState, message.value)?.name;
break; break;
} }

View File

@ -101,9 +101,10 @@ end
-- Sends a json message notifying that the jid was granted/denied access in lobby -- Sends a json message notifying that the jid was granted/denied access in lobby
-- the message from is the actor that did the operation -- the message from is the actor that did the operation
function notify_lobby_access(room, actor, jid, granted) function notify_lobby_access(room, actor, jid, display_name, granted)
local notify_json = { local notify_json = {
value = jid value = jid,
name = display_name
}; };
if granted then if granted then
notify_json.event = NOTIFY_LOBBY_ACCESS_GRANTED; notify_json.event = NOTIFY_LOBBY_ACCESS_GRANTED;
@ -234,8 +235,10 @@ function process_lobby_muc_loaded(lobby_muc, host_module)
host_module:hook('muc-broadcast-presence', function (event) host_module:hook('muc-broadcast-presence', function (event)
local actor, occupant, room, x = event.actor, event.occupant, event.room, event.x; local actor, occupant, room, x = event.actor, event.occupant, event.room, event.x;
if check_status(x, '307') then if check_status(x, '307') then
local display_name = occupant:get_presence():get_child_text(
'nick', 'http://jabber.org/protocol/nick');
-- we need to notify in the main room -- we need to notify in the main room
notify_lobby_access(room.main_room, actor, occupant.nick, false); notify_lobby_access(room.main_room, actor, occupant.nick, display_name, false);
end end
end); end);
end end
@ -362,7 +365,10 @@ process_host_module(main_muc_component_config, function(host_module, host)
if room._data.lobbyroom then if room._data.lobbyroom then
local occupant = room._data.lobbyroom:get_occupant_by_real_jid(invitee); local occupant = room._data.lobbyroom:get_occupant_by_real_jid(invitee);
if occupant then if occupant then
notify_lobby_access(room, from, occupant.nick, true); local display_name = occupant:get_presence():get_child_text(
'nick', 'http://jabber.org/protocol/nick');
notify_lobby_access(room, from, occupant.nick, display_name, true);
end end
end end
end); end);
@ -396,4 +402,4 @@ end
module:hook_global('bosh-session', update_session); module:hook_global('bosh-session', update_session);
module:hook_global('websocket-session', update_session); module:hook_global('websocket-session', update_session);
module:hook_global('config-reloaded', load_config); module:hook_global('config-reloaded', load_config);
module:hook_global('create-lobby-room', handle_create_lobby); module:hook_global('create-lobby-room', handle_create_lobby);