瀏覽代碼

Always show pending/requesting users in roster

Even if show_only_online_users or hide_offline_users
are set, show users that are pending or requesting
Guillermo Bonvehí 10 年之前
父節點
當前提交
2354a27832
共有 2 個文件被更改,包括 55 次插入2 次删除
  1. 16 2
      converse.js
  2. 39 0
      spec/controlbox.js

+ 16 - 2
converse.js

@@ -3228,10 +3228,24 @@
 
             showInRoster: function () {
                 var chatStatus = this.get('chat_status');
-                if (converse.show_only_online_users && chatStatus !== 'online')
+                if (converse.show_only_online_users && chatStatus !== 'online') {
+                    // If pending or requesting, show
+                    if ((this.get('ask') === 'subscribe')
+                        || (this.get('subscription') === 'from')
+                        || (this.get('requesting') === true)) {
+                        return true;
+                    }
                     return false;
-                if (converse.hide_offline_users && chatStatus === 'offline')
+                }
+                if (converse.hide_offline_users && chatStatus === 'offline') {
+                    // If pending or requesting, show
+                    if ((this.get('ask') === 'subscribe') 
+                        || (this.get('subscription') === 'from')
+                        || (this.get('requesting') === true)) {
+                        return true;
+                    }
                     return false;
+                }
                 return true;
             }
         });

+ 39 - 0
spec/controlbox.js

@@ -410,6 +410,45 @@
                 }, converse));
             }, converse));
 
+            it("are shown in the roster when show_only_online_users", $.proxy(function () {
+		converse.show_only_online_users = true;
+                runs(function () {
+                    _addContacts();
+                });
+                waits(50);
+                spyOn(this.rosterview, 'update').andCallThrough();
+                runs($.proxy(function () {
+                    expect(this.rosterview.$el.is(':visible')).toEqual(true);
+                    expect(this.rosterview.update).toHaveBeenCalled();
+                }, converse));
+                waits(300); // Needed, due to debounce
+                runs ($.proxy(function () {
+                    expect(this.rosterview.$el.find('dd:visible').length).toBe(3);
+                    expect(this.rosterview.$el.find('dt:visible').length).toBe(1);
+                }, converse));
+                converse.show_only_online_users = false;
+            }, converse));
+
+            it("are shown in the roster when hide_offline_users", $.proxy(function () {
+                converse.hide_offline_users = true;
+		runs(function () {
+                    _addContacts();
+                });
+                waits(50);
+                spyOn(this.rosterview, 'update').andCallThrough();
+                waits(50);
+                runs($.proxy(function () {
+                    expect(this.rosterview.$el.is(':visible')).toEqual(true);
+                    expect(this.rosterview.update).toHaveBeenCalled();
+                }, converse));
+                waits(300); // Needed, due to debounce
+                runs ($.proxy(function () {
+                    expect(this.rosterview.$el.find('dd:visible').length).toBe(3);
+                    expect(this.rosterview.$el.find('dt:visible').length).toBe(1);
+                }, converse));
+                converse.hide_offline_users = false;
+            }, converse));
+
             it("can be removed by the user", $.proxy(function () {
                 runs($.proxy(function () {
                     _addContacts();