Use UnstableValue for all location constants (#7388)

This commit is contained in:
Andy Balaam 2021-12-15 16:54:11 +00:00 committed by GitHub
parent fc58ce7ed2
commit 1c6a7646fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 19 deletions

View file

@ -17,6 +17,7 @@ limitations under the License.
import React from 'react'; import React from 'react';
import maplibregl from 'maplibre-gl'; import maplibregl from 'maplibre-gl';
import { logger } from "matrix-js-sdk/src/logger"; import { logger } from "matrix-js-sdk/src/logger";
import { LOCATION_EVENT_TYPE } from 'matrix-js-sdk/src/@types/location';
import SdkConfig from '../../../SdkConfig'; import SdkConfig from '../../../SdkConfig';
import { replaceableComponent } from "../../../utils/replaceableComponent"; import { replaceableComponent } from "../../../utils/replaceableComponent";
@ -41,17 +42,15 @@ export default class MLocationBody extends React.Component<IBodyProps, IState> {
// events - so folks can read their old chat history correctly. // events - so folks can read their old chat history correctly.
// https://github.com/matrix-org/matrix-doc/issues/3516 // https://github.com/matrix-org/matrix-doc/issues/3516
const content = this.props.mxEvent.getContent(); const content = this.props.mxEvent.getContent();
const uri = content['org.matrix.msc3488.location'] ? const loc = content[LOCATION_EVENT_TYPE.name];
content['org.matrix.msc3488.location'].uri : const uri = loc ? loc.uri : content['geo_uri'];
content['geo_uri'];
this.coords = this.parseGeoUri(uri); this.coords = this.parseGeoUri(uri);
this.state = { this.state = {
error: undefined, error: undefined,
}; };
this.description = this.description = loc?.description ?? content['body'];
content['org.matrix.msc3488.location']?.description ?? content['body'];
} }
private parseGeoUri = (uri: string): GeolocationCoordinates => { private parseGeoUri = (uri: string): GeolocationCoordinates => {

View file

@ -18,6 +18,7 @@ import React, { createRef } from 'react';
import { EventType, MsgType } from "matrix-js-sdk/src/@types/event"; import { EventType, MsgType } from "matrix-js-sdk/src/@types/event";
import { Relations } from 'matrix-js-sdk/src/models/relations'; import { Relations } from 'matrix-js-sdk/src/models/relations';
import { POLL_START_EVENT_TYPE } from "matrix-js-sdk/src/@types/polls"; import { POLL_START_EVENT_TYPE } from "matrix-js-sdk/src/@types/polls";
import { LOCATION_EVENT_TYPE } from 'matrix-js-sdk/src/@types/location';
import * as sdk from '../../../index'; import * as sdk from '../../../index';
import SettingsStore from "../../../settings/SettingsStore"; import SettingsStore from "../../../settings/SettingsStore";
@ -127,8 +128,10 @@ export default class MessageEvent extends React.Component<IProps> implements IMe
} }
} }
if ((type && type === "org.matrix.msc3488.location") || if (
(type && type === EventType.RoomMessage && msgtype && msgtype === MsgType.Location)) { LOCATION_EVENT_TYPE.matches(type) ||
(type === EventType.RoomMessage && msgtype === MsgType.Location)
) {
// TODO: tidy this up once location sharing is out of labs // TODO: tidy this up once location sharing is out of labs
if (SettingsStore.getValue("feature_location_share")) { if (SettingsStore.getValue("feature_location_share")) {
BodyType = sdk.getComponent('messages.MLocationBody'); BodyType = sdk.getComponent('messages.MLocationBody');

View file

@ -19,9 +19,9 @@ import { MatrixEvent, IEventRelation } from "matrix-js-sdk/src/models/event";
import { Room } from "matrix-js-sdk/src/models/room"; import { Room } from "matrix-js-sdk/src/models/room";
import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import { RoomMember } from "matrix-js-sdk/src/models/room-member";
import { RelationType } from 'matrix-js-sdk/src/@types/event'; import { RelationType } from 'matrix-js-sdk/src/@types/event';
import { MsgType } from "matrix-js-sdk/src/@types/event";
import { logger } from "matrix-js-sdk/src/logger"; import { logger } from "matrix-js-sdk/src/logger";
import { POLL_START_EVENT_TYPE } from "matrix-js-sdk/src/@types/polls"; import { POLL_START_EVENT_TYPE } from "matrix-js-sdk/src/@types/polls";
import { makeLocationContent } from "matrix-js-sdk/src/content-helpers";
import { _t } from '../../../languageHandler'; import { _t } from '../../../languageHandler';
import { MatrixClientPeg } from '../../../MatrixClientPeg'; import { MatrixClientPeg } from '../../../MatrixClientPeg';
@ -505,19 +505,33 @@ export default class MessageComposer extends React.Component<IProps, IState> {
return true; return true;
}; };
private shareLocation = (uri: string, ts: number, type: LocationShareType, description: string): boolean => { private textForLocation = (
uri: string,
ts: number,
description: string | null,
): string => {
const date = new Date(ts).toISOString();
// TODO: translation, as soon as we've re-worded this better
if (description) {
return `${description} at ${uri} as of ${date}`;
} else {
return `Location at ${uri} as of ${date}`;
}
};
private shareLocation = (
uri: string,
ts: number,
_type: LocationShareType,
description: string | null,
): boolean => {
if (!uri) return false; if (!uri) return false;
try { try {
const text = `${description ? description : 'Location'} at ${uri} as of ${new Date(ts).toISOString()}`; const text = this.textForLocation(uri, ts, description);
// noinspection ES6MissingAwait - we don't care if it fails, it'll get queued. MatrixClientPeg.get().sendMessage(
MatrixClientPeg.get().sendMessage(this.props.room.roomId, { this.props.room.roomId,
"body": text, makeLocationContent(text, uri, ts, description),
"msgtype": MsgType.Location, );
"geo_uri": uri,
"org.matrix.msc3488.location": { uri, description },
"org.matrix.msc3488.ts": ts,
// TODO: MSC1767 fallbacks for text & thumbnail
});
} catch (e) { } catch (e) {
logger.error("Error sending location:", e); logger.error("Error sending location:", e);
} }