浏览代码

Return all rooms or private chat when caling `get` without arguments

JC Brand 9 年之前
父节点
当前提交
01f576e505
共有 3 个文件被更改,包括 22 次插入8 次删除
  1. 3 3
      docs/source/development.rst
  2. 9 2
      src/converse-api.js
  3. 10 3
      src/converse-muc.js

+ 3 - 3
docs/source/development.rst

@@ -572,6 +572,8 @@ You may also provide the fullname. If not present, we use the jid as fullname:
 The "chats" grouping
 The "chats" grouping
 --------------------
 --------------------
 
 
+Note, for MUC chat rooms, you need to use the "rooms" grouping instead.
+
 get
 get
 ~~~
 ~~~
 
 
@@ -653,12 +655,10 @@ get
 Returns an object representing a multi user chat box (room).
 Returns an object representing a multi user chat box (room).
 It takes 3 parameters:
 It takes 3 parameters:
 
 
-* the room JID
+* the room JID (if not specified, all rooms will be returned).
 * the user's nickname (if not specified, the node part of the user's JID will be used).
 * the user's nickname (if not specified, the node part of the user's JID will be used).
 * boolean, indicating whether the room should be created if not found (default: `false`)
 * boolean, indicating whether the room should be created if not found (default: `false`)
 
 
-The last two parameters are optional.
-
 .. code-block:: javascript
 .. code-block:: javascript
 
 
     var nick = 'dread-pirate-roberts';
     var nick = 'dread-pirate-roberts';

+ 9 - 2
src/converse-api.js

@@ -128,8 +128,15 @@
             },
             },
             'get': function (jids) {
             'get': function (jids) {
                 if (typeof jids === "undefined") {
                 if (typeof jids === "undefined") {
-                    converse.log("chats.get: You need to provide at least one JID", "error");
-                    return null;
+                    var result = [];
+                    converse.chatboxes.each(function (chatbox) {
+                        // FIXME: Leaky abstraction from MUC. We need to add a
+                        // base type for chat boxes, and check for that.
+                        if (chatbox.get('type') !== 'chatroom') {
+                            result.push(converse.wrappedChatBox(chatbox));
+                        }
+                    });
+                    return result;
                 } else if (typeof jids === "string") {
                 } else if (typeof jids === "string") {
                     return converse.wrappedChatBox(converse.chatboxes.getChatBox(jids, true));
                     return converse.wrappedChatBox(converse.chatboxes.getChatBox(jids, true));
                 }
                 }

+ 10 - 3
src/converse-muc.js

@@ -1432,13 +1432,20 @@
                         return _.map(jids, _.partial(_transform, _, nick, fetcher));
                         return _.map(jids, _.partial(_transform, _, nick, fetcher));
                     },
                     },
                     'get': function (jids, nick, create) {
                     'get': function (jids, nick, create) {
+                        if (typeof jids === "undefined") {
+                            var result = [];
+                            converse.chatboxes.each(function (chatbox) {
+                                if (chatbox.get('type') === 'chatroom') {
+                                    result.push(converse.wrappedChatBox(chatbox));
+                                }
+                            });
+                            return result;
+                        }
                         var fetcher = _.partial(converse.chatboxviews.getChatBox.bind(converse.chatboxviews), _, create);
                         var fetcher = _.partial(converse.chatboxviews.getChatBox.bind(converse.chatboxviews), _, create);
                         if (!nick) {
                         if (!nick) {
                             nick = Strophe.getNodeFromJid(converse.bare_jid);
                             nick = Strophe.getNodeFromJid(converse.bare_jid);
                         }
                         }
-                        if (typeof jids === "undefined") {
-                            throw new TypeError("rooms.get: You need to provide at least one JID");
-                        } else if (typeof jids === "string") {
+                        if (typeof jids === "string") {
                             return _transform(jids, nick, fetcher);
                             return _transform(jids, nick, fetcher);
                         }
                         }
                         return _.map(jids, _.partial(_transform, _, nick, fetcher));
                         return _.map(jids, _.partial(_transform, _, nick, fetcher));