diff --git a/src/tracker/gui.js b/src/tracker/gui.js index a6917f0..b555eb5 100644 --- a/src/tracker/gui.js +++ b/src/tracker/gui.js @@ -16,8 +16,21 @@ var GUI = (function(){ } } - if (settings && type === "gui" && detail === "settings"){ - settings.ui.cbAutoscroll.checked = STATE.settings.autoscroll; + if (settings){ + var force = type === "gui" && detail === "settings"; + + if (force){ + settings.ui.cbAutoscroll.checked = STATE.settings.autoscroll; + settings.ui.optsAfterFirstMsg[STATE.settings.afterFirstMsg].checked = true; + settings.ui.optsAfterSavedMsg[STATE.settings.afterSavedMsg].checked = true; + } + + if (type === "setting" || force){ + var autoscrollRev = !STATE.settings.autoscroll; + + Object.values(settings.ui.optsAfterFirstMsg).forEach(ele => ele.disabled = autoscrollRev); + Object.values(settings.ui.optsAfterSavedMsg).forEach(ele => ele.disabled = autoscrollRev); + } } }; @@ -161,21 +174,49 @@ var GUI = (function(){ settings.ele.id = "dht-cfg"; settings.ele.innerHTML = [ - "" + "
", + "
", + "
", + "
", + "
", + "
", + "
", + "
", + "
", ].join(""); // elements settings.ui = { - cbAutoscroll: DOM.id("dht-cfg-autoscroll") + cbAutoscroll: DOM.id("dht-cfg-autoscroll"), + optsAfterFirstMsg: {}, + optsAfterSavedMsg: {} }; + settings.ui.optsAfterFirstMsg[CONSTANTS.AUTOSCROLL_ACTION_NOTHING] = DOM.id("dht-cfg-afm-nothing"); + settings.ui.optsAfterFirstMsg[CONSTANTS.AUTOSCROLL_ACTION_PAUSE] = DOM.id("dht-cfg-afm-pause"); + + settings.ui.optsAfterSavedMsg[CONSTANTS.AUTOSCROLL_ACTION_NOTHING] = DOM.id("dht-cfg-asm-nothing"); + settings.ui.optsAfterSavedMsg[CONSTANTS.AUTOSCROLL_ACTION_PAUSE] = DOM.id("dht-cfg-asm-pause"); + // events settings.ui.cbAutoscroll.addEventListener("change", () => { STATE.settings.autoscroll = settings.ui.cbAutoscroll.checked; }); + Object.keys(settings.ui.optsAfterFirstMsg).forEach(key => { + settings.ui.optsAfterFirstMsg[key].addEventListener("click", () => { + STATE.settings.afterFirstMsg = key; + }); + }); + + Object.keys(settings.ui.optsAfterSavedMsg).forEach(key => { + settings.ui.optsAfterSavedMsg[key].addEventListener("click", () => { + STATE.settings.afterSavedMsg = key; + }); + }); + setupStateChanged("settings"); }, diff --git a/src/tracker/state.js b/src/tracker/state.js index 08d57f5..1b37383 100644 --- a/src/tracker/state.js +++ b/src/tracker/state.js @@ -1,3 +1,8 @@ +var CONSTANTS = { + AUTOSCROLL_ACTION_NOTHING: "optNothing", + AUTOSCROLL_ACTION_PAUSE: "optPause", +}; + var STATE = (function(){ var stateChangedEvents = []; @@ -33,8 +38,8 @@ var STATE = (function(){ */ SETTINGS.prototype._reset = function(){ this._autoscroll = true; - this._afterFirstMsg = "optPause"; - this._afterSavedMsg = "optPause"; + this._afterFirstMsg = CONSTANTS.AUTOSCROLL_ACTION_PAUSE; + this._afterSavedMsg = CONSTANTS.AUTOSCROLL_ACTION_PAUSE; }; /* diff --git a/src/tracker/Σ.js b/src/tracker/Σ.js index 63c21fc..93e3156 100644 --- a/src/tracker/Σ.js +++ b/src/tracker/Σ.js @@ -4,10 +4,26 @@ DISCORD.setupMessageRequestHook((channel, messages) => { if (info.id == channel){ // Discord has a bug where the message request may be sent without switching channels STATE.addDiscordChannel(info.server, info.type, channel, info.channel); - STATE.addDiscordMessages(channel, messages); + var hasUpdatedFile = STATE.addDiscordMessages(channel, messages); if (STATE.settings.autoscroll){ - DOM.setTimer(() => DISCORD.loadOlderMessages(), 0); + DOM.setTimer(() => { + var action = CONSTANTS.AUTOSCROLL_ACTION_NOTHING; + + if (!hasUpdatedFile){ + action = STATE.settings.afterSavedMsg; + } + else if (!DISCORD.hasMoreMessages()){ + action = STATE.settings.afterFirstMsg; + } + + if (action === CONSTANTS.AUTOSCROLL_ACTION_PAUSE){ + STATE.toggleTracking(); + } + else{ + DISCORD.loadOlderMessages(); + } + }, 0); } } } @@ -15,7 +31,12 @@ DISCORD.setupMessageRequestHook((channel, messages) => { STATE.onStateChanged((type, detail) => { if (type === "tracking" && detail && STATE.settings.autoscroll){ - DISCORD.loadOlderMessages(); + if (DISCORD.hasMoreMessages()){ + DISCORD.loadOlderMessages(); + } + else if (STATE.settings.afterFirstMsg === CONSTANTS.AUTOSCROLL_ACTION_PAUSE){ + DOM.setTimer(() => STATE.toggleTracking(), 200); // give the user visual feedback after clicking the button before switching off + } } });