Skip to content

Commit

Permalink
Support for room upgrades
Browse files Browse the repository at this point in the history
  • Loading branch information
dbkr authored and krombel committed Aug 22, 2018
1 parent c92da8e commit ba3f259
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/base-apis.js
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,18 @@ function(roomId, includeMembership, excludeMembership, atEventId, callback) {
return this._http.authedRequest(callback, "GET", path);
};

/**
* Upgrades a room to a new protocol version
* @param {string} roomId
* @param {string} newVersion The target version to upgrade to
* @return {module:client.Promise} Resolves: Object with key 'replacement_room'
* @return {module:http-api.MatrixError} Rejects: with an error response.
*/
MatrixBaseApis.prototype.upgradeRoom = function(roomId, newVersion) {
const path = utils.encodeUri("/rooms/$roomId/upgrade", {$roomId: roomId});
return this._http.authedRequest(undefined, "POST", path, undefined, {new_version: newVersion});
};


/**
* @param {string} groupId
Expand Down
24 changes: 24 additions & 0 deletions src/models/room.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ const EventTimelineSet = require("./event-timeline-set");

import ReEmitter from '../ReEmitter';

//const LATEST_ROOM_VERSION = '1';
const LATEST_ROOM_VERSION = 'badger';

function synthesizeReceipt(userId, event, receiptType) {
// console.log("synthesizing receipt for "+event.getId());
// This is really ugly because JS has no way to express an object literal
Expand Down Expand Up @@ -200,6 +203,27 @@ Room.prototype.getVersion = function() {
return ver;
};

/**
* Determines whether this room needs to be upgraded to a new version
* @returns {string?} What version the room should be upgraded to, or null if
* the room does not require upgrading at this time.
*/
Room.prototype.shouldUpgradeToVersion = function() {
// This almost certainly won't be the way this actually works - this
// is essentially a stub method.
if (this.getVersion() === LATEST_ROOM_VERSION) return null;
return LATEST_ROOM_VERSION;
};

/**
* Determines whether the given user is permitted to perform a room upgrade
* @param {String} userId The ID of the user to test against
* @returns {bool} True if the given user is permitted to upgrade the room
*/
Room.prototype.userMayUpgradeRoom = function(userId) {
return this.currentState.maySendStateEvent("m.room.tombstone", userId);
};

/**
* Get the list of pending sent events for this room
*
Expand Down

0 comments on commit ba3f259

Please sign in to comment.