mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-08-06 14:20:56 +00:00
3.5.334. Remove logviewer's beta state. Fix bitrate calculation. Tweak pause chat scrolling UI. Update channel information automatically. Support channel-specific badges. Rewrite how layout styles are calculated. Fix sidebar tooltips.
This commit is contained in:
parent
12427d2750
commit
a89b71f0a2
14 changed files with 217 additions and 259 deletions
|
@ -154,6 +154,7 @@ FFZ.prototype.setup_room = function() {
|
|||
var inst = instances[key];
|
||||
this.add_room(inst.id, inst);
|
||||
this._modify_room(inst);
|
||||
inst.ffzUpdateBadges();
|
||||
inst.ffzPatchTMI();
|
||||
}
|
||||
|
||||
|
@ -334,11 +335,6 @@ FFZ.prototype.modify_room_view = function(view) {
|
|||
this.ffz_frozen = false;
|
||||
this.ffz_ctrl = false;
|
||||
|
||||
// Monitor the Ctrl key.
|
||||
this._ffz_keyw = this.ffzOnKey.bind(this);
|
||||
document.body.addEventListener('keydown', this._ffz_keyw);
|
||||
document.body.addEventListener('keyup', this._ffz_keyw);
|
||||
|
||||
// Fix scrolling.
|
||||
this._ffz_mouse_down = this.ffzMouseDown.bind(this);
|
||||
if ( is_android )
|
||||
|
@ -418,12 +414,6 @@ FFZ.prototype.modify_room_view = function(view) {
|
|||
if ( this._ffz_chat_display )
|
||||
this._ffz_chat_display = undefined;
|
||||
|
||||
if ( this._ffz_keyw ) {
|
||||
document.body.removeEventListener('keydown', this._ffz_keyw);
|
||||
document.body.removeEventListener('keyup', this._ffz_keyw);
|
||||
this._ffz_keyw = undefined;
|
||||
}
|
||||
|
||||
this.ffzDisableFreeze();
|
||||
},
|
||||
|
||||
|
@ -518,14 +508,27 @@ FFZ.prototype.modify_room_view = function(view) {
|
|||
return;
|
||||
|
||||
this._ffz_messages = messages;
|
||||
this._ffz_interval = setInterval(this.ffzPulse.bind(this), 200);
|
||||
|
||||
this._ffz_mouse_move = this.ffzMouseMove.bind(this);
|
||||
this._ffz_mouse_out = this.ffzMouseOut.bind(this);
|
||||
if ( ! this._ffz_interval )
|
||||
this._ffz_interval = setInterval(this.ffzPulse.bind(this), 200);
|
||||
|
||||
messages.addEventListener('mousemove', this._ffz_mouse_move);
|
||||
messages.addEventListener('touchmove', this._ffz_mouse_move);
|
||||
messages.addEventListener('mouseout', this._ffz_mouse_out);
|
||||
if ( ! this._ffz_mouse_move ) {
|
||||
this._ffz_mouse_move = this.ffzMouseMove.bind(this);
|
||||
messages.addEventListener('mousemove', this._ffz_mouse_move);
|
||||
messages.addEventListener('touchmove', this._ffz_mouse_move);
|
||||
}
|
||||
|
||||
if ( ! this._ffz_mouse_out ) {
|
||||
this._ffz_mouse_out = this.ffzMouseOut.bind(this);
|
||||
messages.addEventListener('mouseout', this._ffz_mouse_out);
|
||||
}
|
||||
|
||||
// Monitor the Ctrl key.
|
||||
if ( ! this._ffz_keyw ) {
|
||||
this._ffz_keyw = this.ffzOnKey.bind(this);
|
||||
document.body.addEventListener('keydown', this._ffz_keyw);
|
||||
document.body.addEventListener('keyup', this._ffz_keyw);
|
||||
}
|
||||
},
|
||||
|
||||
ffzDisableFreeze: function() {
|
||||
|
@ -552,6 +555,12 @@ FFZ.prototype.modify_room_view = function(view) {
|
|||
messages.removeEventListener('mouseout', this._ffz_mouse_out);
|
||||
this._ffz_mouse_out = undefined;
|
||||
}
|
||||
|
||||
if ( this._ffz_keyw ) {
|
||||
document.body.removeEventListener('keydown', this._ffz_keyw);
|
||||
document.body.removeEventListener('keyup', this._ffz_keyw);
|
||||
this._ffz_keyw = undefined;
|
||||
}
|
||||
},
|
||||
|
||||
ffzPulse: function() {
|
||||
|
@ -883,6 +892,11 @@ FFZ.prototype.add_room = function(id, room) {
|
|||
}
|
||||
}
|
||||
|
||||
// Store the badges for this room now if we have them.
|
||||
var bs = utils.ember_lookup('service:badges');
|
||||
if ( bs && bs.badgeCollection && bs.badgeCollection.channel && bs.badgeCollection.channel.broadcasterName === id )
|
||||
data.badges = bs.badgeCollection.channel;
|
||||
|
||||
// Look up if the room has moderation logs.
|
||||
var f = this;
|
||||
this.ws_send("has_logs", id, function(success, response) {
|
||||
|
@ -950,172 +964,6 @@ FFZ.prototype.remove_room = function(id) {
|
|||
}
|
||||
|
||||
|
||||
// --------------------
|
||||
// Chat History
|
||||
// --------------------
|
||||
|
||||
/*FFZ.prototype._load_history = function(room_id, success, data) {
|
||||
var room = this.rooms[room_id];
|
||||
if ( ! room || ! room.room )
|
||||
return;
|
||||
|
||||
if ( success )
|
||||
this.log("Received " + data.length + " old messages for: " + room_id);
|
||||
else
|
||||
return this.log("Error retrieving chat history for: " + room_id);
|
||||
|
||||
if ( ! data.length )
|
||||
return;
|
||||
|
||||
return this._insert_history(room_id, data, true);
|
||||
}*/
|
||||
|
||||
|
||||
/*FFZ.prototype._show_deleted = function(room_id) {
|
||||
var room = this.rooms[room_id];
|
||||
if ( ! room || ! room.room )
|
||||
return;
|
||||
|
||||
var old_messages = room.room.get('messages.0.ffz_old_messages');
|
||||
if ( ! old_messages || ! old_messages.length )
|
||||
return;
|
||||
|
||||
room.room.set('messages.0.ffz_old_messages', undefined);
|
||||
this._insert_history(room_id, old_messages);
|
||||
}
|
||||
|
||||
FFZ.prototype._insert_history = function(room_id, data, from_server) {
|
||||
var room = this.rooms[room_id], f = this;
|
||||
if ( ! room || ! room.room )
|
||||
return;
|
||||
|
||||
var current_user = this.get_user(),
|
||||
r = room.room,
|
||||
messages = r.get('messages'),
|
||||
buffer_size = r.get('messageBufferSize'),
|
||||
|
||||
tmiSession = r.tmiSession || (TMI._sessions && TMI._sessions[0]),
|
||||
delete_links = r.get('roomProperties.hide_chat_links'),
|
||||
|
||||
removed = 0,
|
||||
inserted = 0,
|
||||
|
||||
first_inserted,
|
||||
first_existing,
|
||||
before;
|
||||
|
||||
first_existing = messages.length ? messages[0] : null;
|
||||
if ( first_existing && first_existing.from === 'jtv' && first_existing.message === 'Welcome to the chat room!' )
|
||||
first_existing = messages.length > 1 ? messages[1] : null;
|
||||
|
||||
if ( first_existing )
|
||||
before = first_existing.date && first_existing.date.getTime();
|
||||
|
||||
|
||||
this.parse_history(data, null, null, room_id, delete_links, tmiSession, function(msg) {
|
||||
if ( from_server )
|
||||
msg.from_server = true;
|
||||
|
||||
// Skip messages that are from the future.
|
||||
if ( ! msg.date || (before && (before - (msg.from_server && ! first_existing.from_server ? f._ws_server_offset || 0 : 0)) < msg.date.getTime()) )
|
||||
return true;
|
||||
|
||||
if ( f.settings.remove_deleted && msg.deleted )
|
||||
return true;
|
||||
|
||||
if ( msg.tags && msg.tags.target && msg.tags.target !== '@@' ) {
|
||||
var is_mine = current_user && current_user.login === msg.tags.target;
|
||||
if ( ! is_mine && ! r.ffzShouldDisplayNotice() )
|
||||
return true;
|
||||
|
||||
// Display the Ban Reason if we're a moderator or that user.
|
||||
if ( msg.tags['ban-reason'] && (is_mine || r.get('isModeratorOrHigher')) ) {
|
||||
msg.message = msg.message.substr(0, msg.message.length - 1) + ' with reason: ' + msg.tags['ban-reason'];
|
||||
msg.cachedTokens = [utils.sanitize(msg.message)];
|
||||
}
|
||||
}
|
||||
|
||||
if ( r.shouldShowMessage(msg) && r.ffzShouldShowMessage(msg) ) {
|
||||
if ( messages.length < buffer_size ) {
|
||||
if ( msg.ffz_old_messages ) {
|
||||
var max_messages = buffer_size - (messages.length + 1);
|
||||
if ( max_messages <= 0 )
|
||||
msg.ffz_old_messages = null;
|
||||
else if ( msg.ffz_old_messages.length > max_messages )
|
||||
msg.ffz_old_messages = msg.ffz_old_messages.slice(msg.ffz_old_messages.length - max_messages);
|
||||
}
|
||||
|
||||
if ( ! first_inserted )
|
||||
first_inserted = msg;
|
||||
|
||||
// Store the message ID for this message, of course.
|
||||
var msg_id = msg.tags && msg.tags.id,
|
||||
notice_type = msg.tags && msg.tags['msg-id'],
|
||||
|
||||
ids = r.ffz_ids = r.ffz_ids || {},
|
||||
notices = r.ffz_last_notices = r.ffz_last_notices || {};
|
||||
|
||||
if ( msg_id && ! ids[msg_id] )
|
||||
ids[msg_id] = msg;
|
||||
|
||||
if ( notice_type && ! notices[notice_type] )
|
||||
notices[notice_type] = msg;
|
||||
|
||||
messages.unshiftObject(msg);
|
||||
inserted += 1;
|
||||
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
// If there's a CLEARCHAT, stop processing.
|
||||
if ( msg.tags && msg.tags.target === '@@' )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
if ( ! first_inserted )
|
||||
return;
|
||||
|
||||
var now = Date.now() - (first_inserted.from_server ? this._ws_server_offset || 0 : 0),
|
||||
age = now - first_inserted.date.getTime();
|
||||
|
||||
if ( age > 300000 ) {
|
||||
var msg = {
|
||||
color: "#755000",
|
||||
date: first_inserted.date,
|
||||
from: "frankerfacez_admin",
|
||||
style: "admin",
|
||||
message: "(Last message is " + utils.human_time(age/1000) + " old.)",
|
||||
room: room_id,
|
||||
from_server: from_server
|
||||
};
|
||||
|
||||
this.tokenize_chat_line(msg, false, delete_links);
|
||||
if ( r.shouldShowMessage(msg) ) {
|
||||
messages.insertAt(inserted, msg);
|
||||
while ( messages.length > buffer_size ) {
|
||||
// Remove this message from the ID tracker.
|
||||
var m = messages.get(0),
|
||||
msg_id = m.tags && m.tags.id,
|
||||
notice_type = m.tags && m.tags['msg-id'];
|
||||
|
||||
if ( msg_id && r.ffz_ids && r.ffz_ids[msg_id] )
|
||||
delete r.ffz_ids[msg_id];
|
||||
|
||||
if ( notice_type && r.ffz_last_notices && r.ffz_last_notices[notice_type] === m )
|
||||
delete r.ffz_last_notices[notice_type];
|
||||
|
||||
messages.removeAt(0);
|
||||
removed++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
// --------------------
|
||||
// Receiving Set Info
|
||||
// --------------------
|
||||
|
@ -1206,6 +1054,24 @@ FFZ.prototype._modify_room = function(room) {
|
|||
|
||||
mru_list: [],
|
||||
|
||||
ffzUpdateBadges: function() {
|
||||
var room_name = this.get('id'),
|
||||
room_id = this.get('roomProperties._id'),
|
||||
ffz_room = f.rooms && f.rooms[room_name];
|
||||
|
||||
if ( ! ffz_room || ! room_id || ffz_room.badges )
|
||||
return;
|
||||
|
||||
fetch("https://badges.twitch.tv/v1/badges/channels/" + room_id + "/display?language=" + (Twitch.receivedLanguage || "en"), {
|
||||
headers: {
|
||||
'Client-ID': constants.CLIENT_ID
|
||||
}
|
||||
}).then(utils.json).then(function(data) {
|
||||
ffz_room.badges = data && data.badge_sets;
|
||||
});
|
||||
|
||||
}.observes('roomProperties._id'),
|
||||
|
||||
updateWait: function(value, was_banned, update) {
|
||||
var wait = this.get('slowWait') || 0;
|
||||
this.set('slowWait', value);
|
||||
|
@ -1913,12 +1779,16 @@ FFZ.prototype._modify_room = function(room) {
|
|||
|
||||
// Split this into two messages if requested.
|
||||
if ( is_resub && f.settings.old_sub_notices ) {
|
||||
var message = msg.tags['system-msg'],
|
||||
months = /for (\d+) months/.exec(message);
|
||||
|
||||
this.addMessage({
|
||||
style: "notification",
|
||||
from: "twitchnotify",
|
||||
date: msg.date || new Date,
|
||||
room: room_id,
|
||||
message: msg.tags['system-msg']
|
||||
message: message,
|
||||
ffz_sub_months: months && parseInt(months[1])
|
||||
});
|
||||
|
||||
// If there's no message just quit now.
|
||||
|
@ -1969,7 +1839,20 @@ FFZ.prototype._modify_room = function(room) {
|
|||
msg.tags = {};
|
||||
if ( ! msg.tags.badges )
|
||||
msg.tags.badges = {};
|
||||
msg.tags.badges.subscriber = '1';
|
||||
|
||||
var ffz_room = f.rooms && f.rooms[room_id],
|
||||
badges = ffz_room && ffz_room.badges || {},
|
||||
sub_version = badges && badges.subscriber && badges.subscriber.versions;
|
||||
|
||||
if ( ! isNaN(msg.ffz_sub_months) ) {
|
||||
var months = msg.ffz_sub_months;
|
||||
msg.tags.badges.subscriber = ( months >= 24 && sub_version[24] ) ? 24 :
|
||||
(months >= 12 && sub_version[12] ) ? 12 :
|
||||
(months >= 6 && sub_version[6] ) ? 6 :
|
||||
(months >= 3 && sub_version[3] ) ? 3 : 1;
|
||||
} else
|
||||
msg.tags.badges.subscriber = 1;
|
||||
|
||||
msg.tags.subscriber = true;
|
||||
if ( msg.labels && msg.labels.indexOf("subscriber") === -1 )
|
||||
msg.labels.push("subscriber");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue