diff --git a/src/components/structures/RoomStatusBar.js b/src/components/structures/RoomStatusBar.js
index 20451453fb..47da4096c0 100644
--- a/src/components/structures/RoomStatusBar.js
+++ b/src/components/structures/RoomStatusBar.js
@@ -24,7 +24,7 @@ import WhoIsTyping from '../../WhoIsTyping';
import MatrixClientPeg from '../../MatrixClientPeg';
import MemberAvatar from '../views/avatars/MemberAvatar';
import Resend from '../../Resend';
-import { showUnknownDeviceDialogForMessages } from '../../cryptodevices';
+import * as cryptodevices from '../../cryptodevices';
const STATUS_BAR_HIDDEN = 0;
const STATUS_BAR_EXPANDED = 1;
@@ -148,6 +148,13 @@ module.exports = React.createClass({
});
},
+ _onSendWithoutVerifyingClick: function() {
+ cryptodevices.getUnknownDevicesForRoom(MatrixClientPeg.get(), this.props.room).then((devices) => {
+ cryptodevices.markAllDevicesKnown(MatrixClientPeg.get(), devices);
+ Resend.resendUnsentEvents(this.props.room);
+ });
+ },
+
_onResendAllClick: function() {
Resend.resendUnsentEvents(this.props.room);
},
@@ -157,7 +164,7 @@ module.exports = React.createClass({
},
_onShowDevicesClick: function() {
- showUnknownDeviceDialogForMessages(MatrixClientPeg.get(), this.props.room);
+ cryptodevices.showUnknownDeviceDialogForMessages(MatrixClientPeg.get(), this.props.room);
},
_onRoomLocalEchoUpdated: function(event, room, oldEventId, oldStatus) {
@@ -289,10 +296,11 @@ module.exports = React.createClass({
if (hasUDE) {
title = _t("Message not sent due to unknown devices being present");
content = _t(
- "Show devices or cancel all.",
+ "Show devices, mark devices known and send or cancel all.",
{},
{
'showDevicesText': (sub) => { sub },
+ 'sendAnywayText': (sub) => { sub },
'cancelText': (sub) => { sub },
},
);
diff --git a/src/components/views/dialogs/UnknownDeviceDialog.js b/src/components/views/dialogs/UnknownDeviceDialog.js
index 9c19ee6eca..b1e9c390e6 100644
--- a/src/components/views/dialogs/UnknownDeviceDialog.js
+++ b/src/components/views/dialogs/UnknownDeviceDialog.js
@@ -23,14 +23,7 @@ import GeminiScrollbar from 'react-gemini-scrollbar';
import Resend from '../../../Resend';
import { _t } from '../../../languageHandler';
import SettingsStore from "../../../settings/SettingsStore";
-
-function markAllDevicesKnown(devices) {
- Object.keys(devices).forEach((userId) => {
- Object.keys(devices[userId]).map((deviceId) => {
- MatrixClientPeg.get().setDeviceKnown(userId, deviceId, true);
- });
- });
-}
+import { markAllDevicesKnown } from '../../../cryptodevices';
function DeviceListEntry(props) {
const {userId, device} = props;
@@ -141,7 +134,7 @@ export default React.createClass({
},
_onSendAnywayClicked: function() {
- markAllDevicesKnown(this.props.devices);
+ markAllDevicesKnown(MatrixClientPeg.get(), this.props.devices);
this.props.onFinished();
this.props.onSend();
diff --git a/src/cryptodevices.js b/src/cryptodevices.js
index c93e04253f..c0b7e3da6e 100644
--- a/src/cryptodevices.js
+++ b/src/cryptodevices.js
@@ -19,6 +19,20 @@ import sdk from './index';
import Modal from './Modal';
import { _t } from './languageHandler';
+/**
+ * Mark all given devices as 'known'
+ *
+ * @param {MatrixClient} matrixClient A MatrixClient
+ * @param {Object} devices Map from userid -> deviceid -> deviceinfo
+ */
+export function markAllDevicesKnown(matrixClient, devices) {
+ Object.keys(devices).forEach((userId) => {
+ Object.keys(devices[userId]).map((deviceId) => {
+ matrixClient.setDeviceKnown(userId, deviceId, true);
+ });
+ });
+}
+
/**
* Gets all crypto devices in a room that are marked neither known
* nor verified.
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index c759c18134..81bc1f3d2d 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -780,7 +780,7 @@
"You have no visible notifications": "You have no visible notifications",
"Scroll to bottom of page": "Scroll to bottom of page",
"Message not sent due to unknown devices being present": "Message not sent due to unknown devices being present",
- "Show devices or cancel all.": "Show devices or cancel all.",
+ "Show devices, mark devices known and send or cancel all.": "Show devices, mark devices known and send or cancel all.",
"%(count)s of your messages have not been sent.|other": "Some of your messages have not been sent.",
"%(count)s of your messages have not been sent.|one": "Your message was not sent.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Resend all or cancel all now. You can also select individual messages to resend or cancel.",