[polari/wip/raresv/userTracker] userTracker part 2



commit ea32c52919791b83d0b73e65268a8a052f7faf93
Author: raresv <rares visalom gmail com>
Date:   Tue Jun 28 12:46:37 2016 +0300

    userTracker part 2

 src/chatView.js    |   85 +++++++++++++++++++---------------------------------
 src/userTracker.js |   29 ++++++++++++++++-
 2 files changed, 58 insertions(+), 56 deletions(-)
---
diff --git a/src/chatView.js b/src/chatView.js
index df513a4..acce37e 100644
--- a/src/chatView.js
+++ b/src/chatView.js
@@ -289,6 +289,12 @@ const ChatView = new Lang.Class({
         this._pendingLogs = [];
         this._statusCount = { left: 0, joined: 0, total: 0 };
 
+        this._userTracker = new UserTracker.UserTracker({ room: this._room });
+        this._userTracker.connect('status-changed', Lang.bind(this, function(tracker, nick, room, status){
+            //log("status-changed signal received in chatView. User " + nick + " has status: " + status);
+            this._updateTagStatus(nick);
+        }));
+
         this._room.account.connect('notify::nickname', Lang.bind(this,
             function() {
                 this._updateMaxNickChars(this._room.account.nickname.length);
@@ -340,11 +346,6 @@ const ChatView = new Lang.Class({
             this._roomSignals.push(room.connect(signal.name, signal.handler));
         }));
         this._onChannelChanged();
-
-        this._userTracker = new UserTracker.UserTracker({ room: this._room });
-        this._userTracker.connect('status-changed', Lang.bind(this, function(tracker, nick, room, status){
-            log("status-changed signal received in chatView. User " + nick + " has status: " + status);
-        }));
     },
 
     _createTags: function() {
@@ -390,11 +391,6 @@ const ChatView = new Lang.Class({
         });
     },
 
-    _resetNickTag: function(nickTag) {
-        nickTag._contacts = [];
-        this._updateTagStatus(nickTag);
-    },
-
     _onStyleUpdated: function() {
         let context = this.get_style_context();
         context.save();
@@ -449,7 +445,7 @@ const ChatView = new Lang.Class({
             }
         });
 
-        this._foreachNickTag(t => { this._updateTagStatus(t); });
+        //this._foreachNickTag(t => { this._updateTagStatus(t); });
     },
 
     vfunc_destroy: function() {
@@ -515,10 +511,10 @@ const ChatView = new Lang.Class({
         if (this._room.type == Tp.HandleType.ROOM) {
             let members = this._channel.group_dup_members_contacts();
             for (let j = 0; j < members.length; j++)
-                this._trackContact(members[j]);
+                this._updateTagStatus(members[j].alias);
         } else {
-                this._trackContact(this._channel.connection.self_contact);
-                this._trackContact(this._channel.target_contact);
+                this._updateTagStatus(this._channel.connection.self_contact.alias);
+                this._updateTagStatus(this._channel.target_contact.alias);
         }
     },
 
@@ -783,38 +779,18 @@ const ChatView = new Lang.Class({
         return NICKTAG_PREFIX + Polari.util_get_basenick(nick);
     },
 
-    _trackContact: function(contact) {
-        let nickTag = this._lookupTag(this._getNickTagName(contact.alias));
-        if (!nickTag)
-           return;
-
-        let alreadyTracked = nickTag._contacts.some(c => c.alias == contact.alias);
-
-        if (!alreadyTracked)
-            nickTag._contacts.push(contact);
-
-        this._updateTagStatus(nickTag);
-    },
+    _updateTagStatus: function(nickName) {
+        let nickTag = this._lookupTag(this._getNickTagName(nickName));
 
-    _untrackContact: function(contact) {
-        let nickTag = this._lookupTag(this._getNickTagName(contact.alias));
-        if (!nickTag)
+        if (!nickTag) {
+            //log("!!!:" + nickName);
             return;
-
-        let indexToDelete = nickTag._contacts.map(c => c.alias).indexOf(contact.alias);
-
-        if (indexToDelete > -1) {
-            nickTag._contacts.splice(indexToDelete, 1);
-
-            this._updateTagStatus(nickTag);
         }
-    },
 
-    _updateTagStatus: function(tag) {
-        if (tag._contacts.length == 0)
-            tag.foreground_rgba = this._inactiveNickColor;
+        if (this._userTracker.getNickStatus(nickName) == Tp.ConnectionPresenceType.AVAILABLE)
+            nickTag.foreground_rgba = this._activeNickColor;
         else
-            tag.foreground_rgba = this._activeNickColor;
+            nickTag.foreground_rgba = this._inactiveNickColor;
     },
 
     _onChannelChanged: function() {
@@ -837,13 +813,13 @@ const ChatView = new Lang.Class({
             if (this._room.type == Tp.HandleType.ROOM) {
                 let members = this._channel.group_dup_members_contacts();
                 for (let j = 0; j < members.length; j++)
-                    this._trackContact(members[j]);
+                    this._updateTagStatus(members[j].alias);
             } else {
-                this._trackContact(this._channel.connection.self_contact);
-                this._trackContact(this._channel.target_contact);
+                this._updateTagStatus(this._channel.connection.self_contact.alias);
+                this._updateTagStatus(this._channel.target_contact.alias);
             }
         } else {
-            this._foreachNickTag(t => { this._resetNickTag(t); });
+            this._userTracker.resetTracker();
         }
 
         if (!this._channel)
@@ -873,8 +849,8 @@ const ChatView = new Lang.Class({
     _onMemberRenamed: function(room, oldMember, newMember) {
         let text = _("%s is now known as %s").format(oldMember.alias, newMember.alias);
         this._insertStatus(text, oldMember.alias, 'renamed');
-        this._untrackContact(oldMember);
-        this._trackContact(newMember);
+        //this._updateTagStatus(oldMember.alias);
+        //this._updateTagStatus(newMember.alias);
     },
 
     _onMemberDisconnected: function(room, member, message) {
@@ -882,7 +858,7 @@ const ChatView = new Lang.Class({
         if (message)
             text += ' (%s)'.format(message);
         this._insertStatus(text, member.alias, 'left');
-        this._untrackContact(member);
+        //this._updateTagStatus(member.alias);
     },
 
     _onMemberKicked: function(room, member, actor) {
@@ -891,7 +867,7 @@ const ChatView = new Lang.Class({
                                                          actor.alias)
                   : _("%s has been kicked").format(member.alias);
         this._insertStatus(message, member.alias, 'left');
-        this._untrackContact(member);
+        //this._updateTagStatus(member.alias);
     },
 
     _onMemberBanned: function(room, member, actor) {
@@ -900,13 +876,13 @@ const ChatView = new Lang.Class({
                                                          actor.alias)
                   : _("%s has been banned").format(member.alias)
         this._insertStatus(message, member.alias, 'left');
-        this._untrackContact(member);
+        //this._updateTagStatus(member.alias);
     },
 
     _onMemberJoined: function(room, member) {
         let text = _("%s joined").format(member.alias);
         this._insertStatus(text, member.alias, 'joined');
-        this._trackContact(member);
+        //this._updateTagStatus(member.alias)
     },
 
     _onMemberLeft: function(room, member, message) {
@@ -916,7 +892,7 @@ const ChatView = new Lang.Class({
             text += ' (%s)'.format(message);
 
         this._insertStatus(text, member.alias, 'left');
-        this._untrackContact(member);
+        //this._updateTagStatus(member.alias);
     },
 
     _onMessageReceived: function(room, tpMessage) {
@@ -1150,7 +1126,7 @@ const ChatView = new Lang.Class({
 
         let iter = this._view.buffer.get_end_iter();
         this._insertMessage(iter, message, this._state);
-        this._trackContact(tpMessage.sender);
+        //this._updateTagStatus(tpMessage.sender.alias);
 
         let [id, valid] = tpMessage.get_pending_message_id();
 
@@ -1237,7 +1213,8 @@ const ChatView = new Lang.Class({
                     nickTag = new Gtk.TextTag({ name: nickTagName });
                     this._view.get_buffer().get_tag_table().add(nickTag);
 
-                    this._resetNickTag(nickTag);
+                    this._updateTagStatus(message.nick);
+                    //log("add " + nickTagName);
                 }
                 tags.push(nickTag);
                 if (needsGap)
diff --git a/src/userTracker.js b/src/userTracker.js
index b7095ac..8f5e52e 100644
--- a/src/userTracker.js
+++ b/src/userTracker.js
@@ -10,6 +10,7 @@ const UserTracker = new Lang.Class({
     Name: 'UserTracker',
 
     _init: function(params) {
+        this._contactMapping = new Map();
         if (params.room) {
             this._room = params.room;
             this._room.connect('notify::channel', Lang.bind(this, this._onChannelChanged));
@@ -27,7 +28,6 @@ const UserTracker = new Lang.Class({
                 let members = this._room.channel.group_dup_members_contacts();
 
                 //this._contactMapping = this._buildMapping(members);
-                this._contactMapping = new Map();
 
                 for (var i = 0; i < members.length; i++)
                     this._trackMember(members[i]);
@@ -132,7 +132,7 @@ const UserTracker = new Lang.Class({
     },
 
     getNickStatus: function(nickName) {
-        let baseNick = Polari.util_get_basenick(member.alias);
+        let baseNick = Polari.util_get_basenick(nickName);
 
         if (this._contactMapping.has(baseNick)) {
             if (this._contactMapping.get(baseNick).length == 0) {
@@ -143,6 +143,31 @@ const UserTracker = new Lang.Class({
         } else {
             return Tp.ConnectionPresenceType.OFFLINE;
         }
+    },
+
+    resetTracker: function() {
+        if (this._contactMapping) {
+            this._contactMapping.forEach(function(value, key, map){
+                let basenickContacts = value;
+
+                basenickContacts.forEach(function(member){
+                    this._untrackMember(member);
+                });
+            });
+
+            this._contactMapping.clear();
+
+        }
+    },
+
+    resetBasenickMembers: function(basenick) {
+        if (this._contactMapping.has(basenick)) {
+            let basenickContacts = this._contactMapping.get(basenick);
+
+            basenickContacts.forEach(function(member){
+                    this._untrackMember(member);
+            });
+        }
     }
 });
 Signals.addSignalMethods(UserTracker.prototype);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]