Improve reliability when capturing first messages

Not perfect unfortuantely, had it miss the very first message on a
server...
This commit is contained in:
chylex 2018-08-05 14:36:21 +02:00
parent b73bc1a395
commit 4c69bd2326
3 changed files with 32 additions and 18 deletions

View File

@ -129,7 +129,7 @@ ${btn("close", "X")}`);
}); });
DOM.listen(controller.ui.btnToggleTracking, "click", () => { DOM.listen(controller.ui.btnToggleTracking, "click", () => {
STATE.toggleTracking(); STATE.setIsTracking(!STATE.isTracking());
}); });
DOM.listen(controller.ui.btnDownload, "click", () => { DOM.listen(controller.ui.btnDownload, "click", () => {

View File

@ -51,11 +51,11 @@ var STATE = (function(){
} }
/* /*
* Toggles the tracking state. * Sets the tracking state.
*/ */
toggleTracking(){ setIsTracking(state){
this._isTracking = !this._isTracking; this._isTracking = state;
triggerStateChanged("tracking", this._isTracking); triggerStateChanged("tracking", state);
} }
/* /*

View File

@ -14,14 +14,14 @@ window.DHT_ON_UNLOAD = [];
// Execution // Execution
let ignoreMessageCallback = false; let ignoreMessageCallback = new Set();
let stopTrackingDelayed = function(callback){ let stopTrackingDelayed = function(callback){
ignoreMessageCallback = true; ignoreMessageCallback.add("stopping");
DOM.setTimer(() => { DOM.setTimer(() => {
STATE.toggleTracking(); STATE.setIsTracking(false);
ignoreMessageCallback = false; ignoreMessageCallback.delete("stopping");
if (callback){ if (callback){
callback(); callback();
@ -30,7 +30,7 @@ let stopTrackingDelayed = function(callback){
}; };
DISCORD.setupMessageUpdateCallback(hasMoreMessages => { DISCORD.setupMessageUpdateCallback(hasMoreMessages => {
if (STATE.isTracking() && !ignoreMessageCallback){ if (STATE.isTracking() && ignoreMessageCallback.size === 0){
let info = DISCORD.getSelectedChannel(); let info = DISCORD.getSelectedChannel();
if (!info){ if (!info){
@ -50,7 +50,7 @@ DISCORD.setupMessageUpdateCallback(hasMoreMessages => {
let hasUpdatedFile = STATE.addDiscordMessages(info.id, messages); let hasUpdatedFile = STATE.addDiscordMessages(info.id, messages);
if (SETTINGS.autoscroll){ if (SETTINGS.autoscroll){
let action = CONSTANTS.AUTOSCROLL_ACTION_NOTHING; let action = null;
if (!hasUpdatedFile && !STATE.isMessageFresh(messages[0].id)){ if (!hasUpdatedFile && !STATE.isMessageFresh(messages[0].id)){
action = SETTINGS.afterSavedMsg; action = SETTINGS.afterSavedMsg;
@ -59,11 +59,25 @@ DISCORD.setupMessageUpdateCallback(hasMoreMessages => {
action = SETTINGS.afterFirstMsg; action = SETTINGS.afterFirstMsg;
} }
if ((action === CONSTANTS.AUTOSCROLL_ACTION_SWITCH && !DISCORD.selectNextTextChannel()) || action === CONSTANTS.AUTOSCROLL_ACTION_PAUSE){ if (action === null){
STATE.toggleTracking(); DISCORD.loadOlderMessages();
} }
else{ else{
DISCORD.loadOlderMessages(); ignoreMessageCallback.add("stalling");
DOM.setTimer(() => {
ignoreMessageCallback.delete("stalling");
let updatedInfo = DISCORD.getSelectedChannel();
if (updatedInfo && updatedInfo.id === info.id){
STATE.addDiscordMessages(info.id, DISCORD.getMessages()); // sometimes needed to catch the last few messages before switching
}
if ((action === CONSTANTS.AUTOSCROLL_ACTION_SWITCH && !DISCORD.selectNextTextChannel()) || action === CONSTANTS.AUTOSCROLL_ACTION_PAUSE){
STATE.setIsTracking(false);
}
}, 250);
} }
} }
} }