Skip to content

Commit 13864c7

Browse files
committed
chat: use server order
1 parent 278923f commit 13864c7

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

core/code/chat.js

+22-10
Original file line numberDiff line numberDiff line change
@@ -76,18 +76,21 @@ window.chat.genPostData = function(channel, storageHash, getOlderMsgs) {
7676
// after the request is finished – i.e. there would be one almost
7777
// useless request.
7878
chat._faction.data = {};
79+
chat._faction.guids = [];
7980
chat._faction.oldestTimestamp = -1;
8081
chat._faction.newestTimestamp = -1;
8182
delete chat._faction.oldestGUID;
8283
delete chat._faction.newestGUID;
8384

8485
chat._public.data = {};
86+
chat._public.guids = [];
8587
chat._public.oldestTimestamp = -1;
8688
chat._public.newestTimestamp = -1;
8789
delete chat._public.oldestGUID;
8890
delete chat._public.newestGUID;
8991

9092
chat._alerts.data = {};
93+
chat._alerts.guids = [];
9194
chat._alerts.oldestTimestamp = -1;
9295
chat._alerts.newestTimestamp = -1;
9396
delete chat._alerts.oldestGUID;
@@ -164,7 +167,7 @@ window.chat.requestFaction = function(getOlderMsgs, isRetry) {
164167
}
165168

166169

167-
window.chat._faction = {data:{}, oldestTimestamp:-1, newestTimestamp:-1};
170+
window.chat._faction = {data:{}, guids: [], oldestTimestamp:-1, newestTimestamp:-1};
168171
window.chat.handleFaction = function(data, olderMsgs, ascendingTimestampOrder) {
169172
chat._requestFactionRunning = false;
170173
$("#chatcontrols a:contains('faction')").removeClass('loading');
@@ -186,7 +189,7 @@ window.chat.handleFaction = function(data, olderMsgs, ascendingTimestampOrder) {
186189
}
187190

188191
window.chat.renderFaction = function(oldMsgsWereAdded) {
189-
chat.renderData(chat._faction.data, 'chatfaction', oldMsgsWereAdded);
192+
chat.renderData(chat._faction.data, 'chatfaction', oldMsgsWereAdded, chat._faction.guids);
190193
}
191194

192195

@@ -212,7 +215,7 @@ window.chat.requestPublic = function(getOlderMsgs, isRetry) {
212215
);
213216
}
214217

215-
window.chat._public = {data:{}, oldestTimestamp:-1, newestTimestamp:-1};
218+
window.chat._public = {data:{}, guids: [], oldestTimestamp:-1, newestTimestamp:-1};
216219
window.chat.handlePublic = function(data, olderMsgs, ascendingTimestampOrder) {
217220
chat._requestPublicRunning = false;
218221
$("#chatcontrols a:contains('all')").removeClass('loading');
@@ -235,7 +238,7 @@ window.chat.handlePublic = function(data, olderMsgs, ascendingTimestampOrder) {
235238
}
236239

237240
window.chat.renderPublic = function(oldMsgsWereAdded) {
238-
chat.renderData(chat._public.data, 'chatall', oldMsgsWereAdded);
241+
chat.renderData(chat._public.data, 'chatall', oldMsgsWereAdded, chat._public.guids);
239242
}
240243

241244

@@ -262,7 +265,7 @@ window.chat.requestAlerts = function(getOlderMsgs, isRetry) {
262265
}
263266

264267

265-
window.chat._alerts = {data:{}, oldestTimestamp:-1, newestTimestamp:-1};
268+
window.chat._alerts = {data:{}, guids: [], oldestTimestamp:-1, newestTimestamp:-1};
266269
window.chat.handleAlerts = function(data, olderMsgs, ascendingTimestampOrder) {
267270
chat._requestAlertsRunning = false;
268271
$("#chatcontrols a:contains('alerts')").removeClass('loading');
@@ -285,7 +288,7 @@ window.chat.handleAlerts = function(data, olderMsgs, ascendingTimestampOrder) {
285288
}
286289

287290
window.chat.renderAlerts = function(oldMsgsWereAdded) {
288-
chat.renderData(chat._alerts.data, 'chatalerts', oldMsgsWereAdded);
291+
chat.renderData(chat._alerts.data, 'chatalerts', oldMsgsWereAdded, chat._alerts.guids);
289292
}
290293

291294

@@ -401,6 +404,10 @@ window.chat.writeDataToHash = function(newData, storageHash, isPublicChannel, is
401404

402405
// format: timestamp, autogenerated, HTML message, nick, additional data (parsed, plugin specific data...)
403406
storageHash.data[parsedData.guid] = [parsedData.time, parsedData.auto, chat.renderMsgRow(parsedData), parsedData.player.name, parsedData];
407+
if (isAscendingOrder)
408+
storageHash.guids.push(parsedData.guid);
409+
else
410+
storageHash.guids.unshift(parsedData.guid);
404411
});
405412
}
406413

@@ -562,19 +569,24 @@ window.chat.renderDivider = function(text) {
562569
// renders data from the data-hash to the element defined by the given
563570
// ID. Set 3rd argument to true if it is likely that old data has been
564571
// added. Latter is only required for scrolling.
565-
window.chat.renderData = function(data, element, likelyWereOldMsgs) {
572+
window.chat.renderData = function(data, element, likelyWereOldMsgs, sortedGuids) {
566573
var elm = $('#'+element);
567574
if(elm.is(':hidden')) return;
568575

569576
// discard guids and sort old to new
570577
//TODO? stable sort, to preserve server message ordering? or sort by GUID if timestamps equal?
571-
var vals = $.map(data, function(v, k) { return [v]; });
572-
vals = vals.sort(function(a, b) { return a[0]-b[0]; });
578+
var vals = sortedGuids;
579+
if (vals === undefined) {
580+
vals = $.map(data, function(v, k) { return [[v[0], k]]; });
581+
vals = vals.sort(function(a, b) { return a[0]-b[0]; });
582+
vals = vals.map(function(v) { return v[1]});
583+
}
573584

574585
// render to string with date separators inserted
575586
var msgs = '';
576587
var prevTime = null;
577-
$.each(vals, function(ind, msg) {
588+
vals.forEach(function(guid) {
589+
var msg = data[guid];
578590
var nextTime = new Date(msg[0]).toLocaleDateString();
579591
if(prevTime && prevTime !== nextTime)
580592
msgs += chat.renderDivider(nextTime);

0 commit comments

Comments
 (0)