Merge pull request #1666 from matrix-org/luke/fix-duplicate-group-profile-requests

Dedupe requests to fetch group profile data
This commit is contained in:
Luke Barnard 2018-01-02 19:02:50 +00:00 committed by GitHub
commit 5abf0440c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -39,6 +39,9 @@ class FlairStore {
// avatar_url: 'mxc://...' // avatar_url: 'mxc://...'
// } // }
}; };
this._groupProfilesPromise = {
// $groupId: Promise
};
this._usersPending = { this._usersPending = {
// $userId: { // $userId: {
// prom: Promise // prom: Promise
@ -149,13 +152,29 @@ class FlairStore {
return this._groupProfiles[groupId]; return this._groupProfiles[groupId];
} }
const profile = await matrixClient.getGroupProfile(groupId); // No request yet, start one
if (!this._groupProfilesPromise[groupId]) {
this._groupProfilesPromise[groupId] = matrixClient.getGroupProfile(groupId);
}
let profile;
try {
profile = await this._groupProfilesPromise[groupId];
} catch (e) {
console.log('Failed to get group profile for ' + groupId, e);
// Don't retry, but allow a retry when the profile is next requested
delete this._groupProfilesPromise[groupId];
return;
}
this._groupProfiles[groupId] = { this._groupProfiles[groupId] = {
groupId, groupId,
avatarUrl: profile.avatar_url, avatarUrl: profile.avatar_url,
name: profile.name, name: profile.name,
shortDescription: profile.short_description, shortDescription: profile.short_description,
}; };
delete this._groupProfilesPromise[groupId];
setTimeout(() => { setTimeout(() => {
delete this._groupProfiles[groupId]; delete this._groupProfiles[groupId];
}, GROUP_PROFILES_CACHE_BUST_MS); }, GROUP_PROFILES_CACHE_BUST_MS);