[polari/wip/raresv/userTracker] userTracker part 2
- From: Rares Visalom <raresvisalom src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari/wip/raresv/userTracker] userTracker part 2
- Date: Tue, 28 Jun 2016 09:46:51 +0000 (UTC)
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]