From ab3bdcef301e1b9821ffcdcb8bc596ada8e846ab Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Wed, 26 Jun 2013 15:14:15 +0100 Subject: [PATCH] don't treat names resolved from old chat messages as certain - only new ones this prevents people having a name change from getting inconsistant results as old/new messages are seen fix #393 --- code/chat.js | 19 +++++++++++-------- code/player_names.js | 2 ++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/code/chat.js b/code/chat.js index 25ecc737..8ca9377d 100644 --- a/code/chat.js +++ b/code/chat.js @@ -126,7 +126,7 @@ window.chat.requestFaction = function(getOlderMsgs, isRetry) { var r = window.postAjax( 'getPaginatedPlextsV2', d, - chat.handleFaction, + function(data, textStatus, jqXHR) { chat.handleFaction(data, getOlderMsgs); }, isRetry ? function() { window.chat._requestFactionRunning = false; } : function() { window.chat.requestFaction(getOlderMsgs, true) } @@ -137,7 +137,7 @@ window.chat.requestFaction = function(getOlderMsgs, isRetry) { window.chat._faction = {data:{}, oldestTimestamp:-1, newestTimestamp:-1}; -window.chat.handleFaction = function(data, textStatus, jqXHR) { +window.chat.handleFaction = function(data, olderMsgs) { chat._requestFactionRunning = false; if(!data || !data.result) { @@ -148,7 +148,7 @@ window.chat.handleFaction = function(data, textStatus, jqXHR) { if(data.result.length === 0) return; var old = chat._faction.oldestTimestamp; - chat.writeDataToHash(data, chat._faction, false); + chat.writeDataToHash(data, chat._faction, false, olderMsgs); var oldMsgsWereAdded = old !== chat._faction.oldestTimestamp; runHooks('factionChatDataAvailable', {raw: data, processed: chat._faction.data}); @@ -177,7 +177,7 @@ window.chat.requestPublic = function(getOlderMsgs, isRetry) { var r = window.postAjax( 'getPaginatedPlextsV2', d, - chat.handlePublic, + function(data, textStatus, jqXHR) { chat.handlePublic(data, getOlderMsgs); }, isRetry ? function() { window.chat._requestPublicRunning = false; } : function() { window.chat.requestPublic(getOlderMsgs, true) } @@ -187,7 +187,7 @@ window.chat.requestPublic = function(getOlderMsgs, isRetry) { } window.chat._public = {data:{}, oldestTimestamp:-1, newestTimestamp:-1}; -window.chat.handlePublic = function(data, textStatus, jqXHR) { +window.chat.handlePublic = function(data, olderMsgs) { chat._requestPublicRunning = false; if(!data || !data.result) { @@ -198,7 +198,7 @@ window.chat.handlePublic = function(data, textStatus, jqXHR) { if(data.result.length === 0) return; var old = chat._public.oldestTimestamp; - chat.writeDataToHash(data, chat._public, true); + chat.writeDataToHash(data, chat._public, true, olderMsgs); var oldMsgsWereAdded = old !== chat._public.oldestTimestamp; runHooks('publicChatDataAvailable', {raw: data, processed: chat._public.data}); @@ -256,7 +256,7 @@ window.chat.nicknameClicked = function(event, nickname) { } } -window.chat.writeDataToHash = function(newData, storageHash, isPublicChannel) { +window.chat.writeDataToHash = function(newData, storageHash, isPublicChannel, isOlderMsgs) { $.each(newData.result, function(ind, json) { // avoid duplicates if(json[0] in storageHash.data) return true; @@ -351,7 +351,10 @@ window.chat.writeDataToHash = function(newData, storageHash, isPublicChannel) { // format: timestamp, autogenerated, HTML message, player guid storageHash.data[json[0]] = [json[1], auto, chat.renderMsg(msg, nick, time, team, msgToPlayer, systemNarrowcast), pguid]; - window.setPlayerName(pguid, nick); // free nick name resolves + // if we're processing older messages, we could be looking at pre-name change mentions or similar + // so in that case, flag it so we don't overwrite existing name cache entries. + // (it's not perfect - the initial request has the wrong value here) + window.setPlayerName(pguid, nick, isOlderMsgs); // free nick name resolves. }); } diff --git a/code/player_names.js b/code/player_names.js index 63c09fde..ab7f247d 100644 --- a/code/player_names.js +++ b/code/player_names.js @@ -81,6 +81,8 @@ window.resolvePlayerNames = function() { window.setPlayerName = function(guid, nick, uncertain) { + // the 'uncertain' flag is set when we're scrolling back through chat. it's possible in this case + // to come across a message from before a name change. these should be ignored if existing cache entries exist if(uncertain && guid in localStorage) return; if($.trim(('' + nick)).slice(0, 5) === '{"L":' && !window.alertFor37WasShown) {