Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
BridgeError: Add display of network name and affected users
Browse files Browse the repository at this point in the history
Signed-off-by: Kai A. Hiller <KaiAlexHiller@web.de>
  • Loading branch information
Kai A. Hiller authored and Kai A. Hiller committed Jul 25, 2019
1 parent 1d33ca1 commit d924fee
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 11 deletions.
99 changes: 88 additions & 11 deletions src/components/views/messages/BridgeError.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,46 +16,123 @@ limitations under the License.

import React from 'react';
import PropTypes from 'prop-types';
import { EventTimeline } from 'matrix-js-sdk';

import { _t } from '../../../languageHandler';
import sdk from '../../../index';
import MatrixClientPeg from '../../../MatrixClientPeg';
import { unicodeToShortcode } from '../../../HtmlUtils';

export default class BridgeError extends React.PureComponent {
static propTypes = {
matrixClient: PropTypes.object.isRequired,
mxEvent: PropTypes.object.isRequired,
room: PropTypes.object.isRequired,
};

constructor(props) {
super(props);
// this.state = {}
}

_get_relations() {
/**
* Returns all bridge error relations for this event.
*
* @returns {MatrixEvent[]}
*/
_getRelations() {
const { mxEvent, room } = this.props;

// const room = matrixClient.getRoom(mxEvent.getRoomId());
const timelineSet = room.getUnfilteredTimelineSet();
return timelineSet.getRelationsForEvent(
const relations = timelineSet.getRelationsForEvent(
mxEvent.getId(),
"m.reference",
"de.nasnotfound.bridge_error",
);
);

return relations ? relations.getRelations() : [];
}

/**
* Returns a list of all users matched by the regex at the time of the event.
*
* @param {string} regexStr
* @returns {RoomMember[]}
*/
_findMembersFromRegex(regexStr) {
const { room } = this.props;
const regex = new RegExp(regexStr);

// TODO[V02460@gmail.com]: Get room state at the proper point in time
const roomState = room.getLiveTimeline().getState(EventTimeline.FORWARDS);
const members = roomState.getMembers();

return members.filter(m => regex.test(m.userId));
}

/**
* Returns the network name and the affected users for the given relation.
*
* @param {MatrixEvent} relation
* @returns {{networkName: string, affectedUsers: RoomMember[]}}
*/
_getRelationInfo(relation) {
if (!relation.event || !relation.event.content) {
return { networkName: "", affected_users: [] };
}
const content = relation.event.content;

const networkName = (typeof content.network_name === 'string' ?
content.network_name :
""
);
const affectedUsersRegex = (Array.isArray(content.affected_users) ?
content.affected_users :
[]
);
const affectedUsers = affectedUsersRegex.flatMap(
this._findMembersFromRegex.bind(this),
);

return { networkName, affectedUsers };
}

/**
* Returns the rendered string for the given relation.
*
* @param {{networkName: string, affectedUsers: RoomMember[]}} relationInfo
* @return {string}
*/
_renderInfo(relationInfo) {
const usernames = relationInfo.affected_users.map(u => u.name);

if (relationInfo.networkName) {
return _t(
"%(networkName)s: %(affectedUsers)s",
{
networkName: relationInfo.networkName,
affectedUsers: usernames.join(", "),
},
);
} else {
return _t(
"Affected users: %(affectedUsers)s",
{ affectedUsers: relationInfo.affectedUsers },
);
}
}

render() {
const relations = this._get_relations()
const isBridgeError = !!(relations && relations.getRelations());
const relations = this._getRelations();
const isBridgeError = !!relations.length;

if (!isBridgeError) {
return null
return null;
}

const relationInfos = relations.map(this._getRelationInfo.bind(this));
const renderedInfos = relationInfos.map(this._renderInfo.bind(this));

return (
<div className="mx_BridgeError">
{_t("Event not delivered")}
{_t("Event not delivered") + " (" + renderedInfos.join("; ") + ")" }
</div>
);
}
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/strings/en_EN.json
Original file line number Diff line number Diff line change
Expand Up @@ -917,6 +917,8 @@
"When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.",
"Members": "Members",
"Files": "Files",
"%(networkName)s: %(affectedUsers)s": "%(networkName)s: %(affectedUsers)s",
"Affected users: %(affectedUsers)s": "Affected users: %(affectedUsers)s",
"Event not delivered": "Event not delivered",
"Sunday": "Sunday",
"Monday": "Monday",
Expand Down

0 comments on commit d924fee

Please sign in to comment.