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
This commit is contained in:
Jon Atkins
2013-06-26 15:14:15 +01:00
parent 7061f5f561
commit ab3bdcef30
2 changed files with 13 additions and 8 deletions

View File

@ -126,7 +126,7 @@ window.chat.requestFaction = function(getOlderMsgs, isRetry) {
var r = window.postAjax( var r = window.postAjax(
'getPaginatedPlextsV2', 'getPaginatedPlextsV2',
d, d,
chat.handleFaction, function(data, textStatus, jqXHR) { chat.handleFaction(data, getOlderMsgs); },
isRetry isRetry
? function() { window.chat._requestFactionRunning = false; } ? function() { window.chat._requestFactionRunning = false; }
: function() { window.chat.requestFaction(getOlderMsgs, true) } : 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._faction = {data:{}, oldestTimestamp:-1, newestTimestamp:-1};
window.chat.handleFaction = function(data, textStatus, jqXHR) { window.chat.handleFaction = function(data, olderMsgs) {
chat._requestFactionRunning = false; chat._requestFactionRunning = false;
if(!data || !data.result) { if(!data || !data.result) {
@ -148,7 +148,7 @@ window.chat.handleFaction = function(data, textStatus, jqXHR) {
if(data.result.length === 0) return; if(data.result.length === 0) return;
var old = chat._faction.oldestTimestamp; var old = chat._faction.oldestTimestamp;
chat.writeDataToHash(data, chat._faction, false); chat.writeDataToHash(data, chat._faction, false, olderMsgs);
var oldMsgsWereAdded = old !== chat._faction.oldestTimestamp; var oldMsgsWereAdded = old !== chat._faction.oldestTimestamp;
runHooks('factionChatDataAvailable', {raw: data, processed: chat._faction.data}); runHooks('factionChatDataAvailable', {raw: data, processed: chat._faction.data});
@ -177,7 +177,7 @@ window.chat.requestPublic = function(getOlderMsgs, isRetry) {
var r = window.postAjax( var r = window.postAjax(
'getPaginatedPlextsV2', 'getPaginatedPlextsV2',
d, d,
chat.handlePublic, function(data, textStatus, jqXHR) { chat.handlePublic(data, getOlderMsgs); },
isRetry isRetry
? function() { window.chat._requestPublicRunning = false; } ? function() { window.chat._requestPublicRunning = false; }
: function() { window.chat.requestPublic(getOlderMsgs, true) } : 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._public = {data:{}, oldestTimestamp:-1, newestTimestamp:-1};
window.chat.handlePublic = function(data, textStatus, jqXHR) { window.chat.handlePublic = function(data, olderMsgs) {
chat._requestPublicRunning = false; chat._requestPublicRunning = false;
if(!data || !data.result) { if(!data || !data.result) {
@ -198,7 +198,7 @@ window.chat.handlePublic = function(data, textStatus, jqXHR) {
if(data.result.length === 0) return; if(data.result.length === 0) return;
var old = chat._public.oldestTimestamp; var old = chat._public.oldestTimestamp;
chat.writeDataToHash(data, chat._public, true); chat.writeDataToHash(data, chat._public, true, olderMsgs);
var oldMsgsWereAdded = old !== chat._public.oldestTimestamp; var oldMsgsWereAdded = old !== chat._public.oldestTimestamp;
runHooks('publicChatDataAvailable', {raw: data, processed: chat._public.data}); 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) { $.each(newData.result, function(ind, json) {
// avoid duplicates // avoid duplicates
if(json[0] in storageHash.data) return true; 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 // format: timestamp, autogenerated, HTML message, player guid
storageHash.data[json[0]] = [json[1], auto, chat.renderMsg(msg, nick, time, team, msgToPlayer, systemNarrowcast), pguid]; 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.
}); });
} }

View File

@ -81,6 +81,8 @@ window.resolvePlayerNames = function() {
window.setPlayerName = function(guid, nick, uncertain) { 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(uncertain && guid in localStorage) return;
if($.trim(('' + nick)).slice(0, 5) === '{"L":' && !window.alertFor37WasShown) { if($.trim(('' + nick)).slice(0, 5) === '{"L":' && !window.alertFor37WasShown) {