mirror of
https://github.com/chylex/Discord-History-Tracker.git
synced 2025-04-14 23:50:33 +03:00
Refactor and reorganize scr.state.js in renderer
This commit is contained in:
parent
b54ab16a39
commit
082e6d0a1a
@ -7,7 +7,6 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
UTILS.readJsonFile(files[0], (obj, file) => {
|
||||
if (SAVEFILE.isValid(obj)){
|
||||
STATE.uploadFile(new SAVEFILE(obj));
|
||||
updateChannelList();
|
||||
}
|
||||
else{
|
||||
alert((obj ? "File '{}' has an invalid format." : "Could not parse '{}', see console for details.").replace("{}", file.name));
|
||||
@ -23,28 +22,21 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
GUI.onOptionMessagesPerPageChanged(() => {
|
||||
STATE.setMessagesPerPage(GUI.getOptionMessagesPerPage());
|
||||
updateMessageList();
|
||||
});
|
||||
|
||||
STATE.setMessagesPerPage(GUI.getOptionMessagesPerPage());
|
||||
|
||||
GUI.onNavigationButtonClicked(action => {
|
||||
STATE.updateCurrentPage(action);
|
||||
updateMessageList();
|
||||
});
|
||||
|
||||
var updateChannelList = function(){
|
||||
updateMessageList(null);
|
||||
|
||||
GUI.updateChannelList(STATE.getChannelList(), channel => {
|
||||
STATE.selectChannel(channel);
|
||||
updateMessageList();
|
||||
});
|
||||
};
|
||||
STATE.onChannelsRefreshed(channels => {
|
||||
GUI.updateChannelList(channels, STATE.selectChannel);
|
||||
});
|
||||
|
||||
var updateMessageList = function(){
|
||||
STATE.onMessagesRefreshed(messages => {
|
||||
GUI.updateNavigation(STATE.getCurrentPage(), STATE.getPageCount());
|
||||
GUI.updateMessageList(STATE.getMessageList());
|
||||
GUI.updateMessageList(messages);
|
||||
GUI.scrollMessagesToTop();
|
||||
};
|
||||
});
|
||||
});
|
||||
|
@ -1,4 +1,10 @@
|
||||
var STATE = (function(){
|
||||
var ROOT = {};
|
||||
|
||||
// ---------------
|
||||
// State variables
|
||||
// ---------------
|
||||
|
||||
var FILE;
|
||||
var MSGS;
|
||||
|
||||
@ -6,6 +12,10 @@ var STATE = (function(){
|
||||
var currentPage;
|
||||
var messagesPerPage;
|
||||
|
||||
// -----------------
|
||||
// Utility functions
|
||||
// -----------------
|
||||
|
||||
var messageKeySorter = (key1, key2) => {
|
||||
if (key1.length === key2.length){
|
||||
return key1 > key2 ? 1 : key1 < key2 ? -1 : 0;
|
||||
@ -15,94 +25,141 @@ var STATE = (function(){
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
uploadFile: function(file){
|
||||
FILE = file;
|
||||
MSGS = null;
|
||||
currentPage = 1;
|
||||
},
|
||||
|
||||
getChannelList: function(){
|
||||
var channels = FILE.getChannels();
|
||||
|
||||
return Object.keys(channels).map(key => ({ // reserve.txt
|
||||
id: key,
|
||||
name: channels[key].name,
|
||||
server: FILE.getServer(channels[key].server),
|
||||
msgcount: FILE.getMessageCount(key)
|
||||
}));
|
||||
},
|
||||
|
||||
getChannelName: function(channel){
|
||||
return FILE.getChannelById(channel).name;
|
||||
},
|
||||
|
||||
getUserName: function(user){
|
||||
return FILE.getUserById(user).name;
|
||||
},
|
||||
|
||||
selectChannel: function(channel){
|
||||
selectedChannel = channel;
|
||||
currentPage = 1;
|
||||
|
||||
MSGS = Object.keys(FILE.getMessages(channel)).sort(messageKeySorter);
|
||||
},
|
||||
|
||||
getSelectedChannel: function(){
|
||||
return selectedChannel;
|
||||
},
|
||||
|
||||
getRawMessages: function(channel){
|
||||
return channel ? FILE.getMessages(channel) : FILE.getAllMessages();
|
||||
},
|
||||
|
||||
setMessagesPerPage: function(amount){
|
||||
messagesPerPage = amount;
|
||||
},
|
||||
|
||||
updateCurrentPage: function(action){
|
||||
switch(action){
|
||||
case "first": currentPage = 1; break;
|
||||
case "prev": currentPage = Math.max(1, currentPage-1); break;
|
||||
case "next": currentPage = Math.min(STATE.getPageCount(), currentPage+1); break;
|
||||
case "last": currentPage = STATE.getPageCount(); break;
|
||||
}
|
||||
},
|
||||
|
||||
getMessageList: function(){
|
||||
if (!MSGS){
|
||||
return [];
|
||||
}
|
||||
|
||||
var messages = FILE.getMessages(selectedChannel);
|
||||
var startIndex = messagesPerPage*(currentPage-1);
|
||||
|
||||
return MSGS.slice(startIndex, !messagesPerPage ? undefined : startIndex+messagesPerPage).map(key => {
|
||||
var message = messages[key];
|
||||
|
||||
return { // reserve.txt
|
||||
user: FILE.getUser(message.u),
|
||||
timestamp: message.t,
|
||||
contents: message.m,
|
||||
embeds: message.e,
|
||||
attachments: message.a,
|
||||
edited: (message.f&1) === 1
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
getCurrentPage: function(){
|
||||
var total = getPageCount();
|
||||
|
||||
if (currentPage > total && total > 0){
|
||||
currentPage = total;
|
||||
}
|
||||
|
||||
return currentPage;
|
||||
},
|
||||
|
||||
getPageCount: function(){
|
||||
return !MSGS ? 0 : (!messagesPerPage ? 1 : Math.ceil(MSGS.length/messagesPerPage));
|
||||
}
|
||||
// ----------------------------------
|
||||
// Channel and message refresh events
|
||||
// ----------------------------------
|
||||
|
||||
var eventOnChannelsRefreshed;
|
||||
var eventOnMessagesRefreshed;
|
||||
|
||||
var triggerChannelsRefreshed = function(){
|
||||
eventOnChannelsRefreshed && eventOnChannelsRefreshed(ROOT.getChannelList());
|
||||
};
|
||||
|
||||
var triggerMessagesRefreshed = function(){
|
||||
eventOnMessagesRefreshed && eventOnMessagesRefreshed(ROOT.getMessageList());
|
||||
};
|
||||
|
||||
ROOT.onChannelsRefreshed = function(callback){
|
||||
eventOnChannelsRefreshed = callback;
|
||||
};
|
||||
|
||||
ROOT.onMessagesRefreshed = function(callback){
|
||||
eventOnMessagesRefreshed = callback;
|
||||
};
|
||||
|
||||
// ------------------------------------
|
||||
// File upload and basic data retrieval
|
||||
// ------------------------------------
|
||||
|
||||
ROOT.uploadFile = function(file){
|
||||
FILE = file;
|
||||
MSGS = null;
|
||||
currentPage = 1;
|
||||
|
||||
triggerChannelsRefreshed();
|
||||
triggerMessagesRefreshed();
|
||||
};
|
||||
|
||||
ROOT.getChannelName = function(channel){
|
||||
return FILE.getChannelById(channel).name;
|
||||
};
|
||||
|
||||
ROOT.getUserName = function(user){
|
||||
return FILE.getUserById(user).name;
|
||||
};
|
||||
|
||||
ROOT.getRawMessages = function(channel){
|
||||
return channel ? FILE.getMessages(channel) : FILE.getAllMessages();
|
||||
};
|
||||
|
||||
// --------------------------
|
||||
// Channel list and selection
|
||||
// --------------------------
|
||||
|
||||
ROOT.getChannelList = function(){
|
||||
var channels = FILE.getChannels();
|
||||
|
||||
return Object.keys(channels).map(key => ({ // reserve.txt
|
||||
id: key,
|
||||
name: channels[key].name,
|
||||
server: FILE.getServer(channels[key].server),
|
||||
msgcount: FILE.getMessageCount(key)
|
||||
}));
|
||||
};
|
||||
|
||||
ROOT.selectChannel = function(channel){
|
||||
currentPage = 1;
|
||||
selectedChannel = channel;
|
||||
MSGS = Object.keys(FILE.getMessages(channel)).sort(messageKeySorter);
|
||||
|
||||
triggerMessagesRefreshed();
|
||||
};
|
||||
|
||||
ROOT.getSelectedChannel = function(){
|
||||
return selectedChannel;
|
||||
};
|
||||
|
||||
// ------------
|
||||
// Message list
|
||||
// ------------
|
||||
|
||||
ROOT.getMessageList = function(){
|
||||
if (!MSGS){
|
||||
return [];
|
||||
}
|
||||
|
||||
var messages = FILE.getMessages(selectedChannel);
|
||||
var startIndex = messagesPerPage*(ROOT.getCurrentPage()-1);
|
||||
|
||||
return MSGS.slice(startIndex, !messagesPerPage ? undefined : startIndex+messagesPerPage).map(key => {
|
||||
var message = messages[key];
|
||||
|
||||
return { // reserve.txt
|
||||
user: FILE.getUser(message.u),
|
||||
timestamp: message.t,
|
||||
contents: message.m,
|
||||
embeds: message.e,
|
||||
attachments: message.a,
|
||||
edited: (message.f&1) === 1
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
// ----------
|
||||
// Pagination
|
||||
// ----------
|
||||
|
||||
ROOT.setMessagesPerPage = function(amount){
|
||||
messagesPerPage = amount;
|
||||
triggerMessagesRefreshed();
|
||||
};
|
||||
|
||||
ROOT.updateCurrentPage = function(action){
|
||||
switch(action){
|
||||
case "first": currentPage = 1; break;
|
||||
case "prev": currentPage = Math.max(1, currentPage-1); break;
|
||||
case "next": currentPage = Math.min(ROOT.getPageCount(), currentPage+1); break;
|
||||
case "last": currentPage = ROOT.getPageCount(); break;
|
||||
}
|
||||
|
||||
triggerMessagesRefreshed();
|
||||
};
|
||||
|
||||
ROOT.getCurrentPage = function(){
|
||||
var total = ROOT.getPageCount();
|
||||
|
||||
if (currentPage > total && total > 0){
|
||||
currentPage = total;
|
||||
}
|
||||
|
||||
return currentPage;
|
||||
};
|
||||
|
||||
ROOT.getPageCount = function(){
|
||||
return !MSGS ? 0 : (!messagesPerPage ? 1 : Math.ceil(MSGS.length/messagesPerPage));
|
||||
};
|
||||
|
||||
// End
|
||||
return ROOT;
|
||||
})();
|
||||
|
Loading…
x
Reference in New Issue
Block a user