mirror of
https://github.com/uowuo/abaddon.git
synced 2024-11-10 14:10:10 +00:00
split messages from the same author after 10 mins
This commit is contained in:
parent
244726fc66
commit
bf9b053d36
@ -1210,4 +1210,8 @@ void ChatMessageHeader::AddContent(Gtk::Widget *widget, bool prepend) {
|
||||
m_content_box->add(*widget);
|
||||
if (prepend)
|
||||
m_content_box->reorder_child(*widget, 1);
|
||||
if (auto *x = dynamic_cast<ChatMessageItemContainer *>(widget)) {
|
||||
if (x->ID > NewestID)
|
||||
NewestID = x->ID;
|
||||
}
|
||||
}
|
||||
|
@ -109,6 +109,7 @@ class ChatMessageHeader : public Gtk::ListBoxRow {
|
||||
public:
|
||||
Snowflake UserID;
|
||||
Snowflake ChannelID;
|
||||
Snowflake NewestID = 0;
|
||||
|
||||
ChatMessageHeader(const Message *data);
|
||||
void AddContent(Gtk::Widget *widget, bool prepend);
|
||||
|
@ -4,6 +4,8 @@
|
||||
#include "chatinputindicator.hpp"
|
||||
#include "chatinput.hpp"
|
||||
|
||||
constexpr static uint64_t SnowflakeSplitDifference = 600;
|
||||
|
||||
ChatWindow::ChatWindow() {
|
||||
Abaddon::Get().GetDiscordClient().signal_message_send_fail().connect(sigc::mem_fun(*this, &ChatWindow::OnMessageSendFail));
|
||||
|
||||
@ -238,7 +240,7 @@ void ChatWindow::ProcessNewMessage(Snowflake id, bool prepend) {
|
||||
last_row = dynamic_cast<ChatMessageHeader *>(m_list->get_row_at_index(m_num_rows - 1));
|
||||
|
||||
if (last_row != nullptr)
|
||||
if (last_row->UserID == data->Author.ID)
|
||||
if (last_row->UserID == data->Author.ID && (prepend || (id - last_row->NewestID < SnowflakeSplitDifference * Snowflake::SecondsInterval)))
|
||||
should_attach = true;
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ bool Snowflake::IsValid() const {
|
||||
}
|
||||
|
||||
std::string Snowflake::GetLocalTimestamp() const {
|
||||
const time_t secs_since_epoch = (m_num / 4194304000) + 1420070400;
|
||||
const time_t secs_since_epoch = (m_num / SecondsInterval) + DiscordEpochSeconds;
|
||||
const std::tm tm = *localtime(&secs_since_epoch);
|
||||
std::stringstream ss;
|
||||
const static std::locale locale("");
|
||||
|
@ -26,7 +26,8 @@ struct Snowflake {
|
||||
return m_num;
|
||||
}
|
||||
|
||||
const static int Invalid = -1;
|
||||
const static uint64_t Invalid = -1ULL; // makes sense to me
|
||||
const static uint64_t SecondsInterval = 4194304000ULL; // the "difference" between two snowflakes one second apart
|
||||
|
||||
friend void from_json(const nlohmann::json &j, Snowflake &s);
|
||||
friend void to_json(nlohmann::json &j, const Snowflake &s);
|
||||
|
Loading…
Reference in New Issue
Block a user