[polari/wip/bastianilso/status-hiding: 198/199] chatView: Emit status if nick has sent messages within 5 mins
- From: Bastian Ilsø Hougaard <bastianilso src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari/wip/bastianilso/status-hiding: 198/199] chatView: Emit status if nick has sent messages within 5 mins
- Date: Thu, 3 Dec 2015 12:26:10 +0000 (UTC)
commit 999449563c7f3369b3b8e404e5fd12818e56c67c
Author: Bastian Ilsø <bastianilso src gnome org>
Date: Wed Jun 24 13:51:02 2015 +0200
chatView: Emit status if nick has sent messages within 5 mins
Only emit status messages if the member has sent a message to
the channel within the last 5 minutes. Reduces the amount
of visual noise in large chatrooms.
https://bugzilla.gnome.org/show_bug.cgi?id=711542
src/chatView.js | 77 +++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 55 insertions(+), 22 deletions(-)
---
diff --git a/src/chatView.js b/src/chatView.js
index 2a96c68..e1da1bc 100644
--- a/src/chatView.js
+++ b/src/chatView.js
@@ -20,6 +20,8 @@ const SCROLL_TIMEOUT = 100; // ms
const TIMESTAMP_INTERVAL = 300; // seconds of inactivity after which to
// insert a timestamp
+const ACTIVITY_DURATION = 300; // min
+
const NUM_INITIAL_LOG_EVENTS = 50; // number of log events to fetch on start
const NUM_LOG_EVENTS = 10; // number of log events to fetch when requesting more
@@ -651,7 +653,7 @@ const ChatView = new Lang.Class({
let channelSignals = [
{ name: 'message-received',
- handler: Lang.bind(this, this._insertTpMessage) },
+ handler: Lang.bind(this, this._onMessageReceived) },
{ name: 'message-sent',
handler: Lang.bind(this, this._insertTpMessage) },
{ name: 'pending-message-removed',
@@ -681,51 +683,82 @@ const ChatView = new Lang.Class({
},
_onMemberRenamed: function(room, oldMember, newMember) {
- this._insertStatus(_("%s is now known as %s").format(oldMember.alias,
- newMember.alias));
+ if (this._shouldStatus(oldMember.alias)) {
+ this._insertStatus(_("%s is now known as %s").format(oldMember.alias,
+ newMember.alias));
+ }
this._setNickStatus(oldMember.alias, Tp.ConnectionPresenceType.OFFLINE);
this._setNickStatus(newMember.alias, Tp.ConnectionPresenceType.AVAILABLE);
},
_onMemberDisconnected: function(room, member, message) {
- let text = _("%s has disconnected").format(member.alias);
- if (message)
- text += ' (%s)'.format(message);
- this._insertStatus(text);
+ if (this._shouldStatus(member.alias)) {
+ let text = _("%s has disconnected").format(member.alias);
+ if (message)
+ text += ' (%s)'.format(message);
+ this._insertStatus(text);
+ }
this._setNickStatus(member.alias, Tp.ConnectionPresenceType.OFFLINE);
},
_onMemberKicked: function(room, member, actor) {
- let message =
- actor ? _("%s has been kicked by %s").format(member.alias,
- actor.alias)
- : _("%s has been kicked").format(member.alias);
- this._insertStatus(message);
+ if (this._shouldStatus(member.alias)) {
+ let message =
+ actor ? _("%s has been kicked by %s").format(member.alias,
+ actor.alias)
+ : _("%s has been kicked").format(member.alias);
+ this._insertStatus(message);
+ }
this._setNickStatus(member.alias, Tp.ConnectionPresenceType.OFFLINE);
},
_onMemberBanned: function(room, member, actor) {
- let message =
- actor ? _("%s has been banned by %s").format(member.alias,
- actor.alias)
- : _("%s has been banned").format(member.alias)
- this._insertStatus(message);
+ if (this._shouldStatus(member.alias)) {
+ let message =
+ actor ? _("%s has been banned by %s").format(member.alias,
+ actor.alias)
+ : _("%s has been banned").format(member.alias)
+ this._insertStatus(message);
+ }
this._setNickStatus(member.alias, Tp.ConnectionPresenceType.OFFLINE);
},
_onMemberJoined: function(room, member) {
- this._insertStatus(_("%s joined").format(member.alias));
+ if (this._shouldStatus(member.alias))
+ this._insertStatus(_("%s joined").format(member.alias));
this._setNickStatus(member.alias, Tp.ConnectionPresenceType.AVAILABLE);
},
_onMemberLeft: function(room, member, message) {
- let text = _("%s left").format(member.alias);
- if (message)
- text += ' (%s)'.format(message);
- this._insertStatus(text);
+ if (this._shouldStatus(member.alias)) {
+ let text = _("%s left").format(member.alias);
+ if (message)
+ text += ' (%s)'.format(message);
+ this._insertStatus(text);
+ }
this._setNickStatus(member.alias, Tp.ConnectionPresenceType.OFFLINE);
},
+ _onMessageReceived: function(room, tpMessage) {
+ this._insertTpMessage(room, tpMessage);
+
+ let nick = tpMessage.sender.alias;
+ let nickTag = this._lookupTag('nick' + nick);
+ if (!nickTag)
+ return;
+ nickTag._active = GLib.DateTime.new_now_utc().to_unix();
+ },
+
+ _shouldStatus: function(nick) {
+ let nickTag = this._lookupTag('nick' + nick);
+
+ if (!nickTag)
+ return false;
+
+ let time = GLib.DateTime.new_now_utc().to_unix();
+ return time - nickTag._active < ACTIVITY_DURATION;
+ },
+
_insertStatus: function(text) {
let time = GLib.DateTime.new_now_utc().to_unix();
if (time - this._joinTime < IGNORE_STATUS_TIME)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]