[polari/wip/raresv/userTracker] added wrapper around userTracker to group them by accounts, userTracker part 10
- From: Rares Visalom <raresvisalom src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari/wip/raresv/userTracker] added wrapper around userTracker to group them by accounts, userTracker part 10
- Date: Sun, 3 Jul 2016 13:54:15 +0000 (UTC)
commit abcd91d457bc29cd0d9863f8204ce4fe67d8cfd7
Author: raresv <rares visalom gmail com>
Date: Sun Jul 3 16:53:57 2016 +0300
added wrapper around userTracker to group them by accounts, userTracker part 10
src/application.js | 7 +--
src/chatView.js | 6 +--
src/userTracker.js | 174 +++++++++++++---------------------------------------
3 files changed, 45 insertions(+), 142 deletions(-)
---
diff --git a/src/application.js b/src/application.js
index ccc6641..594e97c 100644
--- a/src/application.js
+++ b/src/application.js
@@ -48,13 +48,8 @@ const Application = new Lang.Class({
this._chatroomManager = ChatroomManager.getDefault();
this._accountsMonitor = AccountsMonitor.getDefault();
this._networkMonitor = Gio.NetworkMonitor.get_default();
+ this._userStatusMonitor = UserTracker.getUserStatusMonitor();
this._networksManager = NetworksManager.getDefault();
- /*created here as i couldn't make it work if it was created in the chatroomManager
- (it didn't receive the room-added signal for the channels restored from the previous session)*/
- this._globalUserTracker = new UserTracker.UserTracker(null);
- this._globalUserTracker.connect('status-changed', Lang.bind(this, function(tracker, nick, status){
- log("[Application] nick " + nick + " global status changed to " + status );
- }));
this._accountsMonitor.connect('account-removed', Lang.bind(this,
function(am, account) {
diff --git a/src/chatView.js b/src/chatView.js
index dbebdf5..8eccfce 100644
--- a/src/chatView.js
+++ b/src/chatView.js
@@ -14,7 +14,6 @@ const Mainloop = imports.mainloop;
const PasteManager = imports.pasteManager;
const Signals = imports.signals;
const Utils = imports.utils;
-const UserTracker = imports.userTracker;
const MAX_NICK_CHARS = 8;
const IGNORE_STATUS_TIME = 5;
@@ -289,9 +288,6 @@ const ChatView = new Lang.Class({
this._pendingLogs = [];
this._statusCount = { left: 0, joined: 0, total: 0 };
- this._userTracker = new UserTracker.UserTracker(this._room);
- this._userTracker.connect('status-changed', Lang.bind(this, this._onNickStatusChanged));
-
this._room.account.connect('notify::nickname', Lang.bind(this,
function() {
this._updateMaxNickChars(this._room.account.nickname.length);
@@ -1204,7 +1200,7 @@ const ChatView = new Lang.Class({
let nickTagName = this._getNickTagName(nickName);
let tag = new Gtk.TextTag({ name: nickTagName });
- this._updateNickTag(tag, this._userTracker.getNickGlobalStatus(nickName));
+ //this._updateNickTag(tag, this._userTracker.getNickGlobalStatus(nickName));
return tag;
},
diff --git a/src/userTracker.js b/src/userTracker.js
index cec3f87..77b9e18 100644
--- a/src/userTracker.js
+++ b/src/userTracker.js
@@ -2,154 +2,62 @@ const Polari = imports.gi.Polari;
const Lang = imports.lang;
const Tp = imports.gi.TelepathyGLib;
const Signals = imports.signals;
-const ChatroomManager = imports.chatroomManager;
-
-/*left the old tracker here in order to compare the versions*/
-/*const UserTracker = new Lang.Class({
- Name: 'UserTracker',
-
- _init: function(room) {
- this._referenceRoomSignals = [
- { name: 'notify::channel',
- handler: Lang.bind(this, this._onChannelChanged) },
- { name: 'member-renamed',
- handler: Lang.bind(this, this._onMemberRenamed) },
- { name: 'member-disconnected',
- handler: Lang.bind(this, this._onMemberDisconnected) },
- { name: 'member-kicked',
- handler: Lang.bind(this, this._onMemberKicked) },
- { name: 'member-banned',
- handler: Lang.bind(this, this._onMemberBanned) },
- { name: 'member-joined',
- handler: Lang.bind(this, this._onMemberJoined) },
- { name: 'member-left',
- handler: Lang.bind(this, this._onMemberLeft) }
- ];
-
- this._contactMapping = new Map();
-
- if (!room) {
- log("global user tracker created");
- this._chatroomManager = ChatroomManager.getDefault();
- this._chatroomManager.connect('room-added', Lang.bind(this, this._onRoomAdded));
- this._chatroomManager.connect('room-removed', Lang.bind(this, this._onRoomRemoved));
- } else {
- this._room = room;
-
- this._onRoomAdded(null, this._room);
- this._onChannelChanged(this._room);
- }
- },
-
- _onRoomAdded: function(roomManager , room) {
- this._roomSignals = [];
- this._referenceRoomSignals.forEach(Lang.bind(this, function(signal) {
- this._roomSignals.push(room.connect(signal.name, signal.handler));
- }));
- },
-
- _onRoomRemoved: function(roomManager, room) {
- for (let i = 0; i < this._roomSignals.length; i++)
- room.disconnect(this._roomSignals[i]);
- this._roomSignals = [];
- },
-
- _onChannelChanged: function(emittingRoom) {
- if (emittingRoom.channel) {
- let members;
- if (emittingRoom.type == Tp.HandleType.ROOM)
- members = emittingRoom.channel.group_dup_members_contacts();
- else
- members = [emittingRoom.channel.connection.self_contact,
emittingRoom.channel.target_contact];
-
- members.forEach(m => {
- m._room = emittingRoom;
- this._trackMember(m);
- });
- } else {
- for ([baseNick, basenickContacts] of this._contactMapping) {
- basenickContacts.forEach(Lang.bind(this, function(member) {
- if (member._room == emittingRoom)
- this._untrackMember(member);
- }));
+const AccountsMonitor = imports.accountsMonitor;
+const ChatroomManager = imports.chatroomManager;
- this._contactMapping.delete(baseNick);
- }
- }
- },
+let _singleton = null;
- _onMemberRenamed: function(room, oldMember, newMember) {
- oldMember._room = room;
- newMember._room = room;
- this._untrackMember(oldMember);
- this._trackMember(newMember);
- },
+function getUserStatusMonitor() {
+ if (_singleton == null)
+ _singleton = new UserStatusMonitor();
+ return _singleton;
+}
- _onMemberDisconnected: function(room, member, message) {
- member._room = room;
- this._untrackMember(member);
- },
+const UserStatusMonitor = new Lang.Class({
+ Name: 'UserStatusMonitor',
- _onMemberKicked: function(room, member, actor) {
- member._room = room;
- this._untrackMember(member);
- },
+ _init: function() {
+ this._userTrackersMaping = new Map();
+ this._accountsMonitor = AccountsMonitor.getDefault();
- _onMemberBanned: function(room, member, actor) {
- member._room = room;
- this._untrackMember(member);
+ this._accountsMonitor.connect('account-added', Lang.bind(this, this._onAccountAdded));
+ this._accountsMonitor.connect('account-removed', Lang.bind(this, this._onAccountRemoved));
},
- _onMemberJoined: function(room, member) {
- member._room = room;
- this._trackMember(member);
+ _onAccountAdded: function(accountsMonitor, account) {
+ this._addUserTrackerForAccount(account);
},
- _onMemberLeft: function(room, member, message) {
- member._room = room;
- this._untrackMember(member);
+ _onAccountRemoved: function(accountsMonitor, account) {
+ this._removeUserTrackerForAccount(account);
},
- _trackMember: function(member) {
- let baseNick = Polari.util_get_basenick(member.alias);
+ _addUserTrackerForAccount: function(account) {
+ if (this._userTrackersMaping.has(account))
+ return;
- if (this._contactMapping.has(baseNick))
- this._contactMapping.get(baseNick).push(member);
- else
- this._contactMapping.set(baseNick, [member]);
-
- if (this._contactMapping.get(baseNick).length == 1)
- this.emit('status-changed', member.alias, Tp.ConnectionPresenceType.AVAILABLE);
+ this._userTrackersMaping.set(account, new UserTracker(account));
},
- _untrackMember: function(member) {
- let baseNick = Polari.util_get_basenick(member.alias);
-
- let contacts = this._contactMapping.get(baseNick) || [];
- let indexToDelete = contacts.map(c => c.alias).indexOf(member.alias);
-
- if (indexToDelete > -1) {
- contacts.splice(indexToDelete, 1);
+ _removeUserTrackerForAccount: function(account) {
+ if (!this._userTrackersMaping.has(account))
+ return;
- if (contacts.length == 0)
- this.emit('status-changed', member.alias, Tp.ConnectionPresenceType.OFFLINE);
- }
+ this._userTrackersMaping.delete(account);
},
- getNickStatus: function(nickName) {
- let baseNick = Polari.util_get_basenick(nickName);
+ getUserTrackerForAccount: function(account) {
+ if (this._userTrackersMaping.has(account))
+ return this._userTrackersMaping.get(account);
+ }
+});
- let contacts = this._contactMapping.get(baseNick) || [];
- return contacts.length == 0 ? Tp.ConnectionPresenceType.OFFLINE
- : Tp.ConnectionPresenceType.AVAILABLE;
- },
-});*/
const UserTracker = new Lang.Class({
Name: 'UserTracker',
- _init: function() {
+ _init: function(account) {
this._referenceRoomSignals = [
{ name: 'notify::channel',
handler: Lang.bind(this, this._onChannelChanged) },
@@ -167,6 +75,8 @@ const UserTracker = new Lang.Class({
handler: Lang.bind(this, this._onMemberLeft) }
];
+ this._account = account;
+
this._globalContactMapping = new Map();
this._roomMapping = new Map();
@@ -176,11 +86,13 @@ const UserTracker = new Lang.Class({
},
_onRoomAdded: function(roomManager, room) {
- this._connectRoomSignalsForRoom(room);
+ if (room.account == this._account)
+ this._connectRoomSignalsForRoom(room);
},
_onRoomRemoved: function(roomManager, room) {
- this._disconnectRoomSignalsForRoom(room);
+ if (room.account == this._account)
+ this._disconnectRoomSignalsForRoom(room);
},
_connectRoomSignalsForRoom: function(room) {
@@ -303,9 +215,9 @@ const UserTracker = new Lang.Class({
if (map.get(baseNick).length == 1)
if (map == this._globalContactMapping)
- log("[Global UserTracker] User " + member.alias + " is now globally available");
+ log("[Global UserTracker] User " + member.alias + " is now globally available on " +
this._account.get_display_name());
else
- log("[Local UserTracker] User " + member.alias + " is now available in room " +
member._room.channelName);
+ log("[Local UserTracker] User " + member.alias + " is now available in room " +
member._room.channelName + " on " + this._account.get_display_name());
},
_untrackMember: function(map, member) {
@@ -320,9 +232,9 @@ const UserTracker = new Lang.Class({
if (contacts.length == 0)
if (map == this._globalContactMapping)
- log("[Global UserTracker] User " + member.alias + " is now globally offline");
+ log("[Global UserTracker] User " + member.alias + " is now globally offline on " +
this._account.get_display_name());
else
- log("[Local UserTracker] User " + member.alias + " is now offline in room " +
member._room.channelName);
+ log("[Local UserTracker] User " + member.alias + " is now offline in room " +
member._room.channelName + " on " + this._account.get_display_name());
}
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]