@hsaadawy/ngx-chat
Version:
68 lines • 10.8 kB
JavaScript
import { __awaiter } from "tslib";
import { xml } from '@xmpp/client';
import { removeDuplicates } from '../../../../core/utils-array';
import { AbstractXmppPlugin } from './abstract-xmpp-plugin';
export const STORAGE_BOOKMARKS = 'storage:bookmarks';
/**
* XEP-0048 Bookmarks (https://xmpp.org/extensions/xep-0048.html)
*/
export class BookmarkPlugin extends AbstractXmppPlugin {
constructor(publishSubscribePlugin) {
super();
this.publishSubscribePlugin = publishSubscribePlugin;
this.pendingAddConference = null;
}
onOffline() {
this.pendingAddConference = null;
}
retrieveMultiUserChatRooms() {
return __awaiter(this, void 0, void 0, function* () {
const itemNode = yield this.publishSubscribePlugin.retrieveNodeItems(STORAGE_BOOKMARKS);
const storageNode = itemNode && itemNode[0] && itemNode[0].getChild('storage', STORAGE_BOOKMARKS);
const conferenceNodes = itemNode && storageNode.getChildren('conference');
if (!conferenceNodes) {
return [];
}
return conferenceNodes.map(c => this.convertElementToSavedConference(c));
});
}
convertElementToSavedConference(conferenceNode) {
return {
name: conferenceNode.attrs.name,
jid: conferenceNode.attrs.jid,
autojoin: conferenceNode.attrs.autojoin === 'true',
};
}
saveConferences(conferences) {
const deduplicatedConferences = removeDuplicates(conferences, (x, y) => x.jid === y.jid);
return this.publishSubscribePlugin.storePrivatePayloadPersistent(STORAGE_BOOKMARKS, null, xml('storage', { xmlns: STORAGE_BOOKMARKS }, deduplicatedConferences.map(c => this.convertSavedConferenceToElement(c))));
}
addConference(conferenceToSave) {
return __awaiter(this, void 0, void 0, function* () {
while (this.pendingAddConference) {
try {
yield this.pendingAddConference; // serialize the writes, so that in case of multiple conference adds all get added
}
catch (_a) { }
}
this.pendingAddConference = this.addConferenceInternal(conferenceToSave);
try {
return yield this.pendingAddConference;
}
finally {
this.pendingAddConference = null;
}
});
}
addConferenceInternal(conferenceToSave) {
return __awaiter(this, void 0, void 0, function* () {
const savedConferences = yield this.retrieveMultiUserChatRooms();
const conferences = [...savedConferences, conferenceToSave];
return yield this.saveConferences(conferences);
});
}
convertSavedConferenceToElement({ name, autojoin, jid }) {
return xml('conference', { name, jid, autojoin: autojoin.toString() });
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va21hcmsucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF6em5ldHdvcmsvbmd4LWNoYXQvc3JjL2xpYi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvYm9va21hcmsucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR25DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUzVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDO0FBRXJEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWUsU0FBUSxrQkFBa0I7SUFJbEQsWUFBNkIsc0JBQThDO1FBQ3ZFLEtBQUssRUFBRSxDQUFDO1FBRGlCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFGbkUseUJBQW9CLEdBQStDLElBQUksQ0FBQztJQUloRixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUVLLDBCQUEwQjs7WUFDNUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN4RixNQUFNLFdBQVcsR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDbEcsTUFBTSxlQUFlLEdBQUcsUUFBUSxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDbEIsT0FBTyxFQUFFLENBQUM7YUFDYjtZQUNELE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdFLENBQUM7S0FBQTtJQUVPLCtCQUErQixDQUFDLGNBQXVCO1FBQzNELE9BQU87WUFDSCxJQUFJLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQy9CLEdBQUcsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDN0IsUUFBUSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLE1BQU07U0FDckQsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlLENBQUMsV0FBOEI7UUFDMUMsTUFBTSx1QkFBdUIsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyw2QkFBNkIsQ0FDNUQsaUJBQWlCLEVBQ2pCLElBQUksRUFDSixHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFDLEVBQ3JDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1RSxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUssYUFBYSxDQUFDLGdCQUFpQzs7WUFDakQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzlCLElBQUk7b0JBQ0EsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxrRkFBa0Y7aUJBQ3RIO2dCQUFDLFdBQU0sR0FBRTthQUNiO1lBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRXpFLElBQUk7Z0JBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQzthQUMxQztvQkFBUztnQkFDTixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2FBQ3BDO1FBQ0wsQ0FBQztLQUFBO0lBRWEscUJBQXFCLENBQUMsZ0JBQWlDOztZQUNqRSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDakUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFNUQsT0FBTyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsQ0FBQztLQUFBO0lBRU8sK0JBQStCLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBa0I7UUFDMUUsT0FBTyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB4bWwgfSBmcm9tICdAeG1wcC9jbGllbnQnO1xyXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnbHR4JztcclxuaW1wb3J0IHsgSXFSZXNwb25zZVN0YW56YSwgU3RhbnphIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zdGFuemEnO1xyXG5pbXBvcnQgeyByZW1vdmVEdXBsaWNhdGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy1hcnJheSc7XHJcbmltcG9ydCB7IEFic3RyYWN0WG1wcFBsdWdpbiB9IGZyb20gJy4vYWJzdHJhY3QteG1wcC1wbHVnaW4nO1xyXG5pbXBvcnQgeyBQdWJsaXNoU3Vic2NyaWJlUGx1Z2luIH0gZnJvbSAnLi9wdWJsaXNoLXN1YnNjcmliZS5wbHVnaW4nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTYXZlZENvbmZlcmVuY2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgamlkOiBzdHJpbmc7XHJcbiAgICBhdXRvam9pbjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFNUT1JBR0VfQk9PS01BUktTID0gJ3N0b3JhZ2U6Ym9va21hcmtzJztcclxuXHJcbi8qKlxyXG4gKiBYRVAtMDA0OCBCb29rbWFya3MgKGh0dHBzOi8veG1wcC5vcmcvZXh0ZW5zaW9ucy94ZXAtMDA0OC5odG1sKVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEJvb2ttYXJrUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RYbXBwUGx1Z2luIHtcclxuXHJcbiAgICBwcml2YXRlIHBlbmRpbmdBZGRDb25mZXJlbmNlOiBQcm9taXNlPElxUmVzcG9uc2VTdGFuemE8J3Jlc3VsdCc+PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHVibGlzaFN1YnNjcmliZVBsdWdpbjogUHVibGlzaFN1YnNjcmliZVBsdWdpbikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25PZmZsaW5lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGVuZGluZ0FkZENvbmZlcmVuY2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJldHJpZXZlTXVsdGlVc2VyQ2hhdFJvb21zKCk6IFByb21pc2U8U2F2ZWRDb25mZXJlbmNlW10+IHtcclxuICAgICAgICBjb25zdCBpdGVtTm9kZSA9IGF3YWl0IHRoaXMucHVibGlzaFN1YnNjcmliZVBsdWdpbi5yZXRyaWV2ZU5vZGVJdGVtcyhTVE9SQUdFX0JPT0tNQVJLUyk7XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZU5vZGUgPSBpdGVtTm9kZSAmJiBpdGVtTm9kZVswXSAmJiBpdGVtTm9kZVswXS5nZXRDaGlsZCgnc3RvcmFnZScsIFNUT1JBR0VfQk9PS01BUktTKTtcclxuICAgICAgICBjb25zdCBjb25mZXJlbmNlTm9kZXMgPSBpdGVtTm9kZSAmJiBzdG9yYWdlTm9kZS5nZXRDaGlsZHJlbignY29uZmVyZW5jZScpO1xyXG4gICAgICAgIGlmICghY29uZmVyZW5jZU5vZGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmZlcmVuY2VOb2Rlcy5tYXAoYyA9PiB0aGlzLmNvbnZlcnRFbGVtZW50VG9TYXZlZENvbmZlcmVuY2UoYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29udmVydEVsZW1lbnRUb1NhdmVkQ29uZmVyZW5jZShjb25mZXJlbmNlTm9kZTogRWxlbWVudCk6IFNhdmVkQ29uZmVyZW5jZSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogY29uZmVyZW5jZU5vZGUuYXR0cnMubmFtZSxcclxuICAgICAgICAgICAgamlkOiBjb25mZXJlbmNlTm9kZS5hdHRycy5qaWQsXHJcbiAgICAgICAgICAgIGF1dG9qb2luOiBjb25mZXJlbmNlTm9kZS5hdHRycy5hdXRvam9pbiA9PT0gJ3RydWUnLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNvbmZlcmVuY2VzKGNvbmZlcmVuY2VzOiBTYXZlZENvbmZlcmVuY2VbXSk6IFByb21pc2U8SXFSZXNwb25zZVN0YW56YTwncmVzdWx0Jz4+IHtcclxuICAgICAgICBjb25zdCBkZWR1cGxpY2F0ZWRDb25mZXJlbmNlcyA9IHJlbW92ZUR1cGxpY2F0ZXMoY29uZmVyZW5jZXMsICh4LCB5KSA9PiB4LmppZCA9PT0geS5qaWQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnB1Ymxpc2hTdWJzY3JpYmVQbHVnaW4uc3RvcmVQcml2YXRlUGF5bG9hZFBlcnNpc3RlbnQoXHJcbiAgICAgICAgICAgIFNUT1JBR0VfQk9PS01BUktTLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICB4bWwoJ3N0b3JhZ2UnLCB7eG1sbnM6IFNUT1JBR0VfQk9PS01BUktTfSxcclxuICAgICAgICAgICAgICAgIGRlZHVwbGljYXRlZENvbmZlcmVuY2VzLm1hcChjID0+IHRoaXMuY29udmVydFNhdmVkQ29uZmVyZW5jZVRvRWxlbWVudChjKSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZGRDb25mZXJlbmNlKGNvbmZlcmVuY2VUb1NhdmU6IFNhdmVkQ29uZmVyZW5jZSk6IFByb21pc2U8SXFSZXNwb25zZVN0YW56YTwncmVzdWx0Jz4+IHtcclxuICAgICAgICB3aGlsZSAodGhpcy5wZW5kaW5nQWRkQ29uZmVyZW5jZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wZW5kaW5nQWRkQ29uZmVyZW5jZTsgLy8gc2VyaWFsaXplIHRoZSB3cml0ZXMsIHNvIHRoYXQgaW4gY2FzZSBvZiBtdWx0aXBsZSBjb25mZXJlbmNlIGFkZHMgYWxsIGdldCBhZGRlZFxyXG4gICAgICAgICAgICB9IGNhdGNoIHt9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBZGRDb25mZXJlbmNlID0gdGhpcy5hZGRDb25mZXJlbmNlSW50ZXJuYWwoY29uZmVyZW5jZVRvU2F2ZSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBlbmRpbmdBZGRDb25mZXJlbmNlO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0FkZENvbmZlcmVuY2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGFkZENvbmZlcmVuY2VJbnRlcm5hbChjb25mZXJlbmNlVG9TYXZlOiBTYXZlZENvbmZlcmVuY2UpOiBQcm9taXNlPElxUmVzcG9uc2VTdGFuemE8J3Jlc3VsdCc+PiB7XHJcbiAgICAgICAgY29uc3Qgc2F2ZWRDb25mZXJlbmNlcyA9IGF3YWl0IHRoaXMucmV0cmlldmVNdWx0aVVzZXJDaGF0Um9vbXMoKTtcclxuICAgICAgICBjb25zdCBjb25mZXJlbmNlcyA9IFsuLi5zYXZlZENvbmZlcmVuY2VzLCBjb25mZXJlbmNlVG9TYXZlXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2F2ZUNvbmZlcmVuY2VzKGNvbmZlcmVuY2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnZlcnRTYXZlZENvbmZlcmVuY2VUb0VsZW1lbnQoe25hbWUsIGF1dG9qb2luLCBqaWR9OiBTYXZlZENvbmZlcmVuY2UpOiBTdGFuemEge1xyXG4gICAgICAgIHJldHVybiB4bWwoJ2NvbmZlcmVuY2UnLCB7bmFtZSwgamlkLCBhdXRvam9pbjogYXV0b2pvaW4udG9TdHJpbmcoKX0pO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=