forked from OpenGamers/abaddon
pins: separate msgs, sort and store
This commit is contained in:
parent
e166c83d33
commit
d527669d39
@ -61,7 +61,7 @@ void ChatList::ProcessNewMessage(const Message &data, bool prepend) {
|
||||
|
||||
ChatMessageHeader *last_row = nullptr;
|
||||
bool should_attach = false;
|
||||
if (m_num_rows > 0) {
|
||||
if (!m_separate_all && m_num_rows > 0) {
|
||||
if (prepend)
|
||||
last_row = dynamic_cast<ChatMessageHeader *>(m_list.get_row_at_index(0));
|
||||
else
|
||||
@ -210,6 +210,10 @@ std::vector<Snowflake> ChatList::GetRecentAuthors() {
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ChatList::SetSeparateAll(bool separate) {
|
||||
m_separate_all = true;
|
||||
}
|
||||
|
||||
void ChatList::OnScrollEdgeOvershot(Gtk::PositionType pos) {
|
||||
if (pos == Gtk::POS_TOP)
|
||||
m_signal_action_chat_load_history.emit(m_active_channel);
|
||||
|
@ -20,6 +20,7 @@ public:
|
||||
void UpdateMessageReactions(Snowflake id);
|
||||
void SetFailedByNonce(const std::string &nonce);
|
||||
std::vector<Snowflake> GetRecentAuthors();
|
||||
void SetSeparateAll(bool separate);
|
||||
|
||||
private:
|
||||
void OnScrollEdgeOvershot(Gtk::PositionType pos);
|
||||
@ -35,6 +36,8 @@ private:
|
||||
bool m_should_scroll_to_bottom = true;
|
||||
Gtk::ListBox m_list;
|
||||
|
||||
bool m_separate_all = false;
|
||||
|
||||
public:
|
||||
// these are all forwarded by the parent
|
||||
using type_signal_action_message_delete = sigc::signal<void, Snowflake, Snowflake>;
|
||||
|
@ -718,6 +718,9 @@ void DiscordClient::FetchPinned(Snowflake id, sigc::slot<void(std::vector<Messag
|
||||
}
|
||||
|
||||
auto data = nlohmann::json::parse(response.text).get<std::vector<Message>>();
|
||||
std::sort(data.begin(), data.end(), [](const Message &a, const Message &b) { return a.ID < b.ID; });
|
||||
for (auto &msg : data)
|
||||
StoreMessageData(msg);
|
||||
callback(std::move(data), DiscordError::NONE);
|
||||
});
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ PinnedWindow::PinnedWindow(const ChannelData &data)
|
||||
add(m_chat);
|
||||
m_chat.show();
|
||||
|
||||
m_chat.SetSeparateAll(true);
|
||||
m_chat.SetActiveChannel(ChannelID);
|
||||
|
||||
FetchPinned();
|
||||
|
Loading…
Reference in New Issue
Block a user