You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-29 16:43:09 +03:00
Merge pull request #150 from matrix-org/matthew/generic-account-data
Support global account_data
This commit is contained in:
@@ -903,6 +903,37 @@ MatrixClient.prototype.getUsers = function() {
|
|||||||
return this.store.getUsers();
|
return this.store.getUsers();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// User Account Data operations
|
||||||
|
// ============================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set account data event for the current user.
|
||||||
|
* @param {string} eventType The event type
|
||||||
|
* @param {Object} content the contents object for the event
|
||||||
|
* @param {module:client.callback} callback Optional.
|
||||||
|
* @return {module:client.Promise} Resolves: TODO
|
||||||
|
* @return {module:http-api.MatrixError} Rejects: with an error response.
|
||||||
|
*/
|
||||||
|
MatrixClient.prototype.setAccountData = function(eventType, contents, callback) {
|
||||||
|
var path = utils.encodeUri("/user/$userId/account_data/$type", {
|
||||||
|
$userId: this.credentials.userId,
|
||||||
|
$type: eventType,
|
||||||
|
});
|
||||||
|
return this._http.authedRequest(
|
||||||
|
callback, "PUT", path, undefined, contents
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get account data event of given type for the current user.
|
||||||
|
* @param {string} eventType The event type
|
||||||
|
* @param {module:client.callback} callback Optional.
|
||||||
|
* @return {?object} The contents of the given account data event
|
||||||
|
*/
|
||||||
|
MatrixClient.prototype.getAccountData = function(eventType) {
|
||||||
|
return this.store.getAccountData(eventType);
|
||||||
|
};
|
||||||
|
|
||||||
// Room operations
|
// Room operations
|
||||||
// ===============
|
// ===============
|
||||||
|
|
||||||
@@ -1086,23 +1117,6 @@ MatrixClient.prototype.deleteRoomTag = function(roomId, tagName, callback) {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} eventType event type to be set
|
|
||||||
* @param {object} content event content
|
|
||||||
* @param {module:client.callback} callback Optional.
|
|
||||||
* @return {module:client.Promise} Resolves: TODO
|
|
||||||
* @return {module:http-api.MatrixError} Rejects: with an error response.
|
|
||||||
*/
|
|
||||||
MatrixClient.prototype.setAccountData = function(eventType, content, callback) {
|
|
||||||
var path = utils.encodeUri("/user/$userId/account_data/$type", {
|
|
||||||
$userId: this.credentials.userId,
|
|
||||||
$type: eventType,
|
|
||||||
});
|
|
||||||
return this._http.authedRequest(
|
|
||||||
callback, "PUT", path, undefined, content
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} roomId
|
* @param {string} roomId
|
||||||
* @param {string} eventType event type to be set
|
* @param {string} eventType event type to be set
|
||||||
@@ -3991,7 +4005,7 @@ module.exports.CRYPTO_ENABLED = CRYPTO_ENABLED;
|
|||||||
* });
|
* });
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a device is marked as verified/unverified/blocked/unblocked by
|
* Fires when a device is marked as verified/unverified/blocked/unblocked by
|
||||||
* {@link module:client~MatrixClient#setDeviceVerified|MatrixClient.setDeviceVerified} or
|
* {@link module:client~MatrixClient#setDeviceVerified|MatrixClient.setDeviceVerified} or
|
||||||
* {@link module:client~MatrixClient#setDeviceBlocked|MatrixClient.setDeviceBlocked}.
|
* {@link module:client~MatrixClient#setDeviceBlocked|MatrixClient.setDeviceBlocked}.
|
||||||
@@ -4001,6 +4015,17 @@ module.exports.CRYPTO_ENABLED = CRYPTO_ENABLED;
|
|||||||
* @param {module:client~DeviceInfo} device information about the verified device
|
* @param {module:client~DeviceInfo} device information about the verified device
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fires whenever new user-scoped account_data is added.
|
||||||
|
* @event module:client~MatrixClient#"Room"
|
||||||
|
* @param {MatrixEvent} event The event describing the account_data just added
|
||||||
|
* @example
|
||||||
|
* matrixClient.on("accountData", function(event){
|
||||||
|
* myAccountData[event.type] = event.content;
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
// EventEmitter JSDocs
|
// EventEmitter JSDocs
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ module.exports.MatrixInMemoryStore = function MatrixInMemoryStore(opts) {
|
|||||||
// filterId: Filter
|
// filterId: Filter
|
||||||
// }
|
// }
|
||||||
};
|
};
|
||||||
|
this.accountData = {
|
||||||
|
// type : content
|
||||||
|
};
|
||||||
this.localStorage = opts.localStorage;
|
this.localStorage = opts.localStorage;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -244,7 +247,29 @@ module.exports.MatrixInMemoryStore.prototype = {
|
|||||||
this.localStorage.setItem("mxjssdk_memory_filter_" + filterName, filterId);
|
this.localStorage.setItem("mxjssdk_memory_filter_" + filterName, filterId);
|
||||||
}
|
}
|
||||||
catch (e) {}
|
catch (e) {}
|
||||||
}
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store user-scoped account data events.
|
||||||
|
* N.B. that account data only allows a single event per type, so multiple
|
||||||
|
* events with the same type will replace each other.
|
||||||
|
* @param {Array<MatrixEvent>} events The events to store.
|
||||||
|
*/
|
||||||
|
storeAccountDataEvents: function(events) {
|
||||||
|
var self = this;
|
||||||
|
events.forEach(function(event) {
|
||||||
|
self.accountData[event.getType()] = event;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get account data event by event type
|
||||||
|
* @param {string} eventType The event type being queried
|
||||||
|
* @return {?MatrixEvent} the user account_data event of given type, if any
|
||||||
|
*/
|
||||||
|
getAccountData: function(eventType) {
|
||||||
|
return this.accountData[eventType];
|
||||||
|
},
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
//setMaxHistoryPerRoom: function(maxHistory) {},
|
//setMaxHistoryPerRoom: function(maxHistory) {},
|
||||||
|
|||||||
@@ -162,7 +162,23 @@ StubStore.prototype = {
|
|||||||
*/
|
*/
|
||||||
setFilterIdByName: function(filterName, filterId) {
|
setFilterIdByName: function(filterName, filterId) {
|
||||||
|
|
||||||
}
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store user-scoped account data events
|
||||||
|
* @param {Array<MatrixEvent>} events The events to store.
|
||||||
|
*/
|
||||||
|
storeAccountDataEvents: function(events) {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get account data event by event type
|
||||||
|
* @param {string} eventType The event type being queried
|
||||||
|
*/
|
||||||
|
getAccountData: function(eventType) {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
//setMaxHistoryPerRoom: function(maxHistory) {},
|
//setMaxHistoryPerRoom: function(maxHistory) {},
|
||||||
|
|||||||
15
lib/sync.js
15
lib/sync.js
@@ -88,6 +88,7 @@ SyncApi.prototype.createRoom = function(roomId) {
|
|||||||
"Room.receipt", "Room.tags",
|
"Room.receipt", "Room.tags",
|
||||||
"Room.timelineReset",
|
"Room.timelineReset",
|
||||||
"Room.localEchoUpdated",
|
"Room.localEchoUpdated",
|
||||||
|
"Room.accountData",
|
||||||
]);
|
]);
|
||||||
this._registerStateListeners(room);
|
this._registerStateListeners(room);
|
||||||
return room;
|
return room;
|
||||||
@@ -605,7 +606,19 @@ SyncApi.prototype._processSyncResponse = function(syncToken, data) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// the returned json structure is abit crap, so make it into a
|
// handle non-room account_data
|
||||||
|
if (data.account_data && utils.isArray(data.account_data.events)) {
|
||||||
|
var events = data.account_data.events.map(client.getEventMapper());
|
||||||
|
client.store.storeAccountDataEvents(events);
|
||||||
|
events.forEach(
|
||||||
|
function(accountDataEvent) {
|
||||||
|
client.emit("accountData", accountDataEvent);
|
||||||
|
return accountDataEvent;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// the returned json structure is a bit crap, so make it into a
|
||||||
// nicer form (array) after applying sanity to make sure we don't fail
|
// nicer form (array) after applying sanity to make sure we don't fail
|
||||||
// on missing keys (on the off chance)
|
// on missing keys (on the off chance)
|
||||||
var inviteRooms = [];
|
var inviteRooms = [];
|
||||||
|
|||||||
Reference in New Issue
Block a user