Commit 1bc3f28e authored by JC Brand's avatar JC Brand

Update `refreshFeatures`

Distinguish between getting an existing entity and
creating a new one.

When creating a new one, ensure that we don't fetch from the cache.

New API method for creating a disco entity.
parent 1a23ec14
...@@ -38,7 +38,7 @@ converse.plugins.add('converse-disco', { ...@@ -38,7 +38,7 @@ converse.plugins.add('converse-disco', {
*/ */
idAttribute: 'jid', idAttribute: 'jid',
initialize () { initialize (attrs, options) {
this.waitUntilFeaturesDiscovered = utils.getResolveablePromise(); this.waitUntilFeaturesDiscovered = utils.getResolveablePromise();
this.dataforms = new Backbone.Collection(); this.dataforms = new Backbone.Collection();
...@@ -62,7 +62,7 @@ converse.plugins.add('converse-disco', { ...@@ -62,7 +62,7 @@ converse.plugins.add('converse-disco', {
this.identities.browserStorage = new BrowserStorage.session( this.identities.browserStorage = new BrowserStorage.session(
`converse.identities-${this.get('jid')}` `converse.identities-${this.get('jid')}`
); );
this.fetchFeatures(); this.fetchFeatures(options);
this.items = new _converse.DiscoEntities(); this.items = new _converse.DiscoEntities();
this.items.browserStorage = new BrowserStorage.session( this.items.browserStorage = new BrowserStorage.session(
...@@ -124,8 +124,8 @@ converse.plugins.add('converse-disco', { ...@@ -124,8 +124,8 @@ converse.plugins.add('converse-disco', {
_converse.api.trigger('discoExtensionFieldDiscovered', field); _converse.api.trigger('discoExtensionFieldDiscovered', field);
}, },
fetchFeatures () { fetchFeatures (options) {
if (this.features.browserStorage.records.length === 0) { if (options.ignore_cache || this.features.browserStorage.records.length === 0) {
this.queryInfo(); this.queryInfo();
} else { } else {
this.features.fetch({ this.features.fetch({
...@@ -542,7 +542,7 @@ converse.plugins.add('converse-disco', { ...@@ -542,7 +542,7 @@ converse.plugins.add('converse-disco', {
*/ */
entities: { entities: {
/** /**
* Get the the corresponding `DiscoEntity` instance. * Get the corresponding `DiscoEntity` instance.
* *
* @method _converse.api.disco.entities.get * @method _converse.api.disco.entities.get
* @param {string} jid The Jabber ID of the entity * @param {string} jid The Jabber ID of the entity
...@@ -558,7 +558,26 @@ converse.plugins.add('converse-disco', { ...@@ -558,7 +558,26 @@ converse.plugins.add('converse-disco', {
if (entity || !create) { if (entity || !create) {
return entity; return entity;
} }
return _converse.disco_entities.create({'jid': jid}); return _converse.api.disco.entities.create(jid);
},
/**
* Create a new disco entity. It's identity and features
* will automatically be fetched from cache or from the
* XMPP server.
*
* Fetching from cache can be disabled by passing in
* `ignore_cache: true` in the options parameter.
*
* @method _converse.api.disco.entities.create
* @param {string} jid The Jabber ID of the entity
* @param {object} [options] Additional options
* @param {boolean} [options.ignore_cache]
* If true, fetch all features from the XMPP server instead of restoring them from cache
* @example _converse.api.disco.entities.create(jid, {'ignore_cache': true});
*/
create (jid, options) {
return _converse.disco_entities.create({'jid': jid}, options);
} }
}, },
...@@ -638,7 +657,8 @@ converse.plugins.add('converse-disco', { ...@@ -638,7 +657,8 @@ converse.plugins.add('converse-disco', {
throw new TypeError('api.disco.refreshFeatures: You need to provide an entity JID'); throw new TypeError('api.disco.refreshFeatures: You need to provide an entity JID');
} }
await _converse.api.waitUntil('discoInitialized'); await _converse.api.waitUntil('discoInitialized');
const entity = await _converse.api.disco.entities.get(jid, true); let entity = await _converse.api.disco.entities.get(jid);
if (entity) {
entity.features.reset(); entity.features.reset();
entity.fields.reset(); entity.fields.reset();
entity.identities.reset(); entity.identities.reset();
...@@ -646,6 +666,10 @@ converse.plugins.add('converse-disco', { ...@@ -646,6 +666,10 @@ converse.plugins.add('converse-disco', {
entity.waitUntilFeaturesDiscovered = utils.getResolveablePromise() entity.waitUntilFeaturesDiscovered = utils.getResolveablePromise()
} }
entity.queryInfo(); entity.queryInfo();
} else {
// Create it if it doesn't exist
entity = await _converse.api.disco.entities.create(jid, {'ignore_cache': true});
}
return entity.waitUntilFeaturesDiscovered; return entity.waitUntilFeaturesDiscovered;
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment