summaryrefslogtreecommitdiff
path: root/abaddon.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2020-09-14 00:17:58 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2020-09-14 00:17:58 -0400
commite5a90b94618bafc6bc99afbbff37f7aa3d6a97cf (patch)
tree28e9dd46f0a423252133ff3b21e508f37e348d55 /abaddon.cpp
parent2822add5fe791a120c160e188cecac7ce29d9961 (diff)
downloadabaddon-portaudio-e5a90b94618bafc6bc99afbbff37f7aa3d6a97cf.tar.gz
abaddon-portaudio-e5a90b94618bafc6bc99afbbff37f7aa3d6a97cf.zip
only load 50 messages on channel switch (also fix member menu)
Diffstat (limited to 'abaddon.cpp')
-rw-r--r--abaddon.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/abaddon.cpp b/abaddon.cpp
index 2b8ea4e..0fb189b 100644
--- a/abaddon.cpp
+++ b/abaddon.cpp
@@ -237,6 +237,18 @@ void Abaddon::ActionChatLoadHistory(Snowflake id) {
if (m_channels_history_loading.find(id) != m_channels_history_loading.end())
return;
+ Snowflake before_id = m_main_window->GetChatOldestListedMessage();
+ auto knownset = m_discord.GetMessagesForChannel(id);
+ std::vector<Snowflake> knownvec(knownset.begin(), knownset.end());
+ std::sort(knownvec.begin(), knownvec.end());
+ auto latest = std::find_if(knownvec.begin(), knownvec.end(), [&before_id](Snowflake x) -> bool { return x == before_id; });
+ int distance = std::distance(knownvec.begin(), latest);
+
+ if (distance >= 50) {
+ m_main_window->UpdateChatPrependHistory(std::vector<Snowflake>(knownvec.begin() + distance - 50, knownvec.begin() + distance));
+ return;
+ }
+
m_channels_history_loading.insert(id);
m_discord.FetchMessagesInChannelBefore(id, m_oldest_listed_message[id], [this, id](const std::vector<Snowflake> &msgs) {