diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-09-14 00:17:58 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-09-14 00:17:58 -0400 |
commit | e5a90b94618bafc6bc99afbbff37f7aa3d6a97cf (patch) | |
tree | 28e9dd46f0a423252133ff3b21e508f37e348d55 /abaddon.cpp | |
parent | 2822add5fe791a120c160e188cecac7ce29d9961 (diff) | |
download | abaddon-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.cpp | 12 |
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) { |