Răsfoiți Sursa

Avoid duplicating entities

JC Brand 7 ani în urmă
părinte
comite
5954cd8f29
3 a modificat fișierele cu 23 adăugiri și 12 ștergeri
  1. 10 6
      dist/converse.js
  2. 5 1
      spec/disco.js
  3. 8 5
      src/converse-disco.js

+ 10 - 6
dist/converse.js

@@ -66487,9 +66487,15 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
             const jid = item.getAttribute('jid');
 
             if (_.isUndefined(this.items.get(jid))) {
-              this.items.create({
-                'jid': jid
-              });
+              const entity = _converse.disco_entities.get(jid);
+
+              if (entity) {
+                this.items.add(entity);
+              } else {
+                this.items.create({
+                  'jid': jid
+                });
+              }
             }
           });
         },
@@ -66941,9 +66947,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
              *    (String) entity_jid - The JID of the entity which might have the identity
              */
             return new Promise((resolve, reject) => {
-              _converse.api.waitUntil('discoInitialized').then(() => {
-                _converse.api.disco.entities.get(entity_jid, true).then(entity => resolve(entity.getIdentity(category, type)));
-              });
+              _converse.api.disco.entities.get(entity_jid, true).then(entity => resolve(entity.getIdentity(category, type)));
             }).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
           }
 

+ 5 - 1
spec/disco.js

@@ -14,7 +14,11 @@
 
         describe("Whenever converse.js queries a server for its features", function () {
 
-            it("stores the features it receives", mock.initConverseWithAsync(function (done, _converse) {
+            it("stores the features it receives",
+                mock.initConverseWithPromises(
+                    null, ['discoInitialized'], {},
+                    function (done, _converse) {
+
                 var IQ_stanzas = _converse.connection.IQ_stanzas;
                 var IQ_ids =  _converse.connection.IQ_ids;
                 test_utils.waitUntil(function () {

+ 8 - 5
src/converse-disco.js

@@ -138,7 +138,12 @@
                         }
                         const jid = item.getAttribute('jid');
                         if (_.isUndefined(this.items.get(jid))) {
-                            this.items.create({'jid': jid});
+                            const entity = _converse.disco_entities.get(jid);
+                            if (entity) {
+                                this.items.add(entity);
+                            } else {
+                                this.items.create({'jid': jid});
+                            }
                         }
                     });
                 },
@@ -514,10 +519,8 @@
                          *    (String) entity_jid - The JID of the entity which might have the identity
                          */
                         return new Promise((resolve, reject) => {
-                            _converse.api.waitUntil('discoInitialized').then(() => {
-                                _converse.api.disco.entities.get(entity_jid, true)
-                                    .then((entity) => resolve(entity.getIdentity(category, type)));
-                            })
+                            _converse.api.disco.entities.get(entity_jid, true)
+                                .then((entity) => resolve(entity.getIdentity(category, type)));
                         }).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
                     }
                 }