Support URL previews (with bugs)
Known issues at this point: * The room-level setting accepts the current user's default, which is wrong * The checkboxes on RoomSettings are not independent * The checkboxes in RoomSettings need some layout fixes Signed-off-by: Travis Ralston <travpc@gmail.com>
This commit is contained in:
parent
9fdc1be7bd
commit
786bd87fec
9 changed files with 107 additions and 197 deletions
|
@ -14,7 +14,6 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import Promise from 'bluebird';
|
||||
import SettingsHandler from "./SettingsHandler";
|
||||
import MatrixClientPeg from '../MatrixClientPeg';
|
||||
|
||||
|
@ -24,10 +23,23 @@ import MatrixClientPeg from '../MatrixClientPeg';
|
|||
*/
|
||||
export default class AccountSettingHandler extends SettingsHandler {
|
||||
getValue(settingName, roomId) {
|
||||
// Special case URL previews
|
||||
if (settingName === "urlPreviewsEnabled") {
|
||||
const content = this._getSettings("org.matrix.preview_urls");
|
||||
return !content['disable'];
|
||||
}
|
||||
|
||||
return this._getSettings()[settingName];
|
||||
}
|
||||
|
||||
setValue(settingName, roomId, newValue) {
|
||||
// Special case URL previews
|
||||
if (settingName === "urlPreviewsEnabled") {
|
||||
const content = this._getSettings("org.matrix.preview_urls");
|
||||
content['disable'] = !newValue;
|
||||
return MatrixClientPeg.get().setAccountData("org.matrix.preview_urls", content);
|
||||
}
|
||||
|
||||
const content = this._getSettings();
|
||||
content[settingName] = newValue;
|
||||
return MatrixClientPeg.get().setAccountData("im.vector.web.settings", content);
|
||||
|
@ -41,8 +53,8 @@ export default class AccountSettingHandler extends SettingsHandler {
|
|||
return !!MatrixClientPeg.get();
|
||||
}
|
||||
|
||||
_getSettings() {
|
||||
const event = MatrixClientPeg.get().getAccountData("im.vector.web.settings");
|
||||
_getSettings(eventType = "im.vector.web.settings") {
|
||||
const event = MatrixClientPeg.get().getAccountData(eventType);
|
||||
if (!event || !event.getContent()) return {};
|
||||
return event.getContent();
|
||||
}
|
||||
|
|
|
@ -22,10 +22,23 @@ import MatrixClientPeg from '../MatrixClientPeg';
|
|||
*/
|
||||
export default class RoomAccountSettingsHandler extends SettingsHandler {
|
||||
getValue(settingName, roomId) {
|
||||
// Special case URL previews
|
||||
if (settingName === "urlPreviewsEnabled") {
|
||||
const content = this._getSettings(roomId, "org.matrix.room.preview_urls");
|
||||
return !content['disable'];
|
||||
}
|
||||
|
||||
return this._getSettings(roomId)[settingName];
|
||||
}
|
||||
|
||||
setValue(settingName, roomId, newValue) {
|
||||
// Special case URL previews
|
||||
if (settingName === "urlPreviewsEnabled") {
|
||||
const content = this._getSettings(roomId, "org.matrix.room.preview_urls");
|
||||
content['disable'] = !newValue;
|
||||
return MatrixClientPeg.get().setRoomAccountData(roomId, "org.matrix.room.preview_urls", content);
|
||||
}
|
||||
|
||||
const content = this._getSettings(roomId);
|
||||
content[settingName] = newValue;
|
||||
return MatrixClientPeg.get().setRoomAccountData(roomId, "im.vector.web.settings", content);
|
||||
|
@ -40,11 +53,11 @@ export default class RoomAccountSettingsHandler extends SettingsHandler {
|
|||
return !!MatrixClientPeg.get();
|
||||
}
|
||||
|
||||
_getSettings(roomId) {
|
||||
_getSettings(roomId, eventType = "im.vector.settings") {
|
||||
const room = MatrixClientPeg.get().getRoom(roomId);
|
||||
if (!room) return {};
|
||||
|
||||
const event = room.getAccountData("im.vector.settings");
|
||||
const event = room.getAccountData(eventType);
|
||||
if (!event || !event.getContent()) return {};
|
||||
return event.getContent();
|
||||
}
|
||||
|
|
|
@ -22,10 +22,23 @@ import MatrixClientPeg from '../MatrixClientPeg';
|
|||
*/
|
||||
export default class RoomSettingsHandler extends SettingsHandler {
|
||||
getValue(settingName, roomId) {
|
||||
// Special case URL previews
|
||||
if (settingName === "urlPreviewsEnabled") {
|
||||
const content = this._getSettings(roomId, "org.matrix.room.preview_urls");
|
||||
return !content['disable'];
|
||||
}
|
||||
|
||||
return this._getSettings(roomId)[settingName];
|
||||
}
|
||||
|
||||
setValue(settingName, roomId, newValue) {
|
||||
// Special case URL previews
|
||||
if (settingName === "urlPreviewsEnabled") {
|
||||
const content = this._getSettings(roomId, "org.matrix.room.preview_urls");
|
||||
content['disable'] = !newValue;
|
||||
return MatrixClientPeg.get().setRoomAccountData(roomId, "org.matrix.room.preview_urls", content);
|
||||
}
|
||||
|
||||
const content = this._getSettings(roomId);
|
||||
content[settingName] = newValue;
|
||||
return MatrixClientPeg.get().sendStateEvent(roomId, "im.vector.web.settings", content, "");
|
||||
|
@ -43,10 +56,10 @@ export default class RoomSettingsHandler extends SettingsHandler {
|
|||
return !!MatrixClientPeg.get();
|
||||
}
|
||||
|
||||
_getSettings(roomId) {
|
||||
_getSettings(roomId, eventType = "im.vector.web.settings") {
|
||||
const room = MatrixClientPeg.get().getRoom(roomId);
|
||||
if (!room) return {};
|
||||
const event = room.currentState.getStateEvents("im.vector.web.settings", "");
|
||||
const event = room.currentState.getStateEvents(eventType, "");
|
||||
if (!event || !event.getContent()) return {};
|
||||
return event.getContent();
|
||||
}
|
||||
|
|
|
@ -194,6 +194,15 @@ const SETTINGS = {
|
|||
default: false,
|
||||
displayName: _td('Never send encrypted messages to unverified devices from this device'),
|
||||
},
|
||||
"urlPreviewsEnabled": {
|
||||
supportedLevels: LEVELS_PRESET_ROOM.concat("room"),
|
||||
default: true,
|
||||
displayName: {
|
||||
"default": _td('Enable inline URL previews by default'),
|
||||
"room-account": _td("Enable URL previews for this room (only affects you)"),
|
||||
"room": _td("Enable URL previews by default for participants in this room"),
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Convert the above into simpler formats for the handlers
|
||||
|
@ -245,11 +254,20 @@ export default class SettingsStore {
|
|||
/**
|
||||
* Gets the translated display name for a given setting
|
||||
* @param {string} settingName The setting to look up.
|
||||
* @param {"device"|"room-device"|"room-account"|"account"|"room"|"config"|"default"} atLevel
|
||||
* The level to get the display name for; Defaults to 'default'.
|
||||
* @return {String} The display name for the setting, or null if not found.
|
||||
*/
|
||||
static getDisplayName(settingName) {
|
||||
static getDisplayName(settingName, atLevel = "default") {
|
||||
if (!SETTINGS[settingName] || !SETTINGS[settingName].displayName) return null;
|
||||
return _t(SETTINGS[settingName].displayName);
|
||||
|
||||
let displayName = SETTINGS[settingName].displayName;
|
||||
if (displayName instanceof Object) {
|
||||
if (displayName[atLevel]) displayName = displayName[atLevel];
|
||||
else displayName = displayName["default"];
|
||||
}
|
||||
|
||||
return _t(displayName);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -362,7 +380,7 @@ export default class SettingsStore {
|
|||
}
|
||||
|
||||
if (!handler.canSetValue(settingName, roomId)) {
|
||||
throw new Error("User cannot set " + settingName + " at level " + level);
|
||||
throw new Error("User cannot set " + settingName + " at " + level + " in " + roomId);
|
||||
}
|
||||
|
||||
return handler.setValue(settingName, roomId, value);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue