You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-26 17:03:12 +03:00
Merge pull request #986 from matrix-org/bwindels/include-ssa-for-replace
Don't accept any locally known edits earlier than the last known server-side aggregated edit
This commit is contained in:
@@ -898,7 +898,7 @@ utils.extend(module.exports.MatrixEvent.prototype, {
|
|||||||
return this.status;
|
return this.status;
|
||||||
},
|
},
|
||||||
|
|
||||||
_getServerAggregatedRelation(relType) {
|
getServerAggregatedRelation(relType) {
|
||||||
const relations = this.getUnsigned()["m.relations"];
|
const relations = this.getUnsigned()["m.relations"];
|
||||||
if (relations) {
|
if (relations) {
|
||||||
return relations[relType];
|
return relations[relType];
|
||||||
@@ -911,7 +911,7 @@ utils.extend(module.exports.MatrixEvent.prototype, {
|
|||||||
* @return {string?}
|
* @return {string?}
|
||||||
*/
|
*/
|
||||||
replacingEventId() {
|
replacingEventId() {
|
||||||
const replaceRelation = this._getServerAggregatedRelation("m.replace");
|
const replaceRelation = this.getServerAggregatedRelation("m.replace");
|
||||||
if (replaceRelation) {
|
if (replaceRelation) {
|
||||||
return replaceRelation.event_id;
|
return replaceRelation.event_id;
|
||||||
} else if (this._replacingEvent) {
|
} else if (this._replacingEvent) {
|
||||||
@@ -936,7 +936,7 @@ utils.extend(module.exports.MatrixEvent.prototype, {
|
|||||||
* @return {Date?}
|
* @return {Date?}
|
||||||
*/
|
*/
|
||||||
replacingEventDate() {
|
replacingEventDate() {
|
||||||
const replaceRelation = this._getServerAggregatedRelation("m.replace");
|
const replaceRelation = this.getServerAggregatedRelation("m.replace");
|
||||||
if (replaceRelation) {
|
if (replaceRelation) {
|
||||||
const ts = replaceRelation.origin_server_ts;
|
const ts = replaceRelation.origin_server_ts;
|
||||||
if (Number.isFinite(ts)) {
|
if (Number.isFinite(ts)) {
|
||||||
|
|||||||
@@ -301,10 +301,20 @@ export default class Relations extends EventEmitter {
|
|||||||
// event is known anyway.
|
// event is known anyway.
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the all-knowning server tells us that the event at some point had
|
||||||
|
// this timestamp for its replacement, so any following replacement should definitely not be less
|
||||||
|
const replaceRelation =
|
||||||
|
this._targetEvent.getServerAggregatedRelation("m.replace");
|
||||||
|
const minTs = replaceRelation && replaceRelation.origin_server_ts;
|
||||||
|
|
||||||
return this.getRelations().reduce((last, event) => {
|
return this.getRelations().reduce((last, event) => {
|
||||||
if (event.getSender() !== this._targetEvent.getSender()) {
|
if (event.getSender() !== this._targetEvent.getSender()) {
|
||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
if (minTs && minTs > event.getTs()) {
|
||||||
|
return last;
|
||||||
|
}
|
||||||
if (last && last.getTs() > event.getTs()) {
|
if (last && last.getTs() > event.getTs()) {
|
||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user