From d425997c263a089e8c0075a6f89fd792a3652923 Mon Sep 17 00:00:00 2001
From: ouwou <26526779+ouwou@users.noreply.github.com>
Date: Thu, 28 Oct 2021 00:31:35 -0400
Subject: rewrite store
this probably should have been broken up into smaller commits. oh well
---
components/chatmessage.cpp | 2 ++
components/chatwindow.cpp | 2 +-
components/chatwindow.hpp | 2 +-
3 files changed, 4 insertions(+), 2 deletions(-)
(limited to 'components')
diff --git a/components/chatmessage.cpp b/components/chatmessage.cpp
index 759443f..af68a9d 100644
--- a/components/chatmessage.cpp
+++ b/components/chatmessage.cpp
@@ -231,11 +231,13 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) {
}
} break;
case MessageType::RECIPIENT_ADD: {
+ if (data->Mentions.size() == 0) break;
const auto &adder = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID);
const auto &added = data->Mentions[0];
b->insert_markup(s, "" + adder->Username + " added " + added.Username + "");
} break;
case MessageType::RECIPIENT_REMOVE: {
+ if (data->Mentions.size() == 0) break;
const auto &adder = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID);
const auto &added = data->Mentions[0];
if (adder->ID == added.ID)
diff --git a/components/chatwindow.cpp b/components/chatwindow.cpp
index c2bd688..9b34dfd 100644
--- a/components/chatwindow.cpp
+++ b/components/chatwindow.cpp
@@ -1,6 +1,6 @@
#include "chatwindow.hpp"
#include "chatmessage.hpp"
-#include "../abaddon.hpp"
+#include "abaddon.hpp"
#include "chatinputindicator.hpp"
#include "ratelimitindicator.hpp"
#include "chatinput.hpp"
diff --git a/components/chatwindow.hpp b/components/chatwindow.hpp
index 5ef8bad..de55b0a 100644
--- a/components/chatwindow.hpp
+++ b/components/chatwindow.hpp
@@ -2,7 +2,7 @@
#include
#include
#include
-#include "../discord/discord.hpp"
+#include "discord/discord.hpp"
#include "completer.hpp"
class ChatMessageHeader;
--
cgit v1.2.3
From 1da2c57376961d38be9ed3cdea7f78dc9d7a6ae2 Mon Sep 17 00:00:00 2001
From: ouwou <26526779+ouwou@users.noreply.github.com>
Date: Tue, 16 Nov 2021 02:37:12 -0500
Subject: fix retrieving message references and also add a reset statement i
forgot (raii might be good here...)
---
components/chatmessage.cpp | 20 +++++++++++++------
discord/store.cpp | 49 +++++++++++++++++++++++++++++-----------------
2 files changed, 45 insertions(+), 24 deletions(-)
(limited to 'components')
diff --git a/components/chatmessage.cpp b/components/chatmessage.cpp
index af68a9d..b7d61a8 100644
--- a/components/chatmessage.cpp
+++ b/components/chatmessage.cpp
@@ -657,6 +657,14 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data)
return author->GetEscapedBoldString();
};
+ // if the message wasnt fetched from store it might have an un-fetched reference
+ std::optional> referenced_message = data.ReferencedMessage;
+ if (data.MessageReference.has_value() && data.MessageReference->MessageID.has_value() && !referenced_message.has_value()) {
+ auto refd = discord.GetMessage(*data.MessageReference->MessageID);
+ if (refd.has_value())
+ referenced_message = std::make_shared(std::move(*refd));
+ }
+
if (data.Interaction.has_value()) {
const auto user = *discord.GetUser(data.Interaction->User.ID);
@@ -668,16 +676,16 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data)
} else {
lbl->set_markup(user.GetEscapedBoldString());
}
- } else if (data.ReferencedMessage.has_value()) {
- if (data.ReferencedMessage.value().get() == nullptr) {
+ } else if (referenced_message.has_value()) {
+ if (referenced_message.value() == nullptr) {
lbl->set_markup("deleted message");
} else {
- const auto &referenced = *data.ReferencedMessage.value().get();
+ const auto &referenced = *referenced_message.value();
Glib::ustring text;
- if (referenced.Content == "") {
- if (referenced.Attachments.size() > 0) {
+ if (referenced.Content.empty()) {
+ if (!referenced.Attachments.empty()) {
text = "attachment";
- } else if (referenced.Embeds.size() > 0) {
+ } else if (!referenced.Embeds.empty()) {
text = "embed";
}
} else {
diff --git a/discord/store.cpp b/discord/store.cpp
index a119869..8e88e7b 100644
--- a/discord/store.cpp
+++ b/discord/store.cpp
@@ -484,10 +484,6 @@ std::vector Store::GetLastMessages(Snowflake id, size_t num) const {
s->Bind(2, num);
while (s->FetchOne()) {
auto msg = GetMessageBound(s);
- if (!s->IsNull(33)) { // referenced message id
- msg.MessageReference.emplace();
- s->Get(33, msg.MessageReference->MessageID);
- }
msgs.push_back(std::move(msg));
}
@@ -515,10 +511,6 @@ std::vector Store::GetMessagesBefore(Snowflake channel_id, Snowflake me
while (s->FetchOne()) {
auto msg = GetMessageBound(s);
- if (!s->IsNull(33)) { // referenced message id
- msg.MessageReference.emplace();
- s->Get(33, msg.MessageReference->MessageID);
- }
msgs.push_back(std::move(msg));
}
@@ -544,10 +536,6 @@ std::vector Store::GetPinnedMessages(Snowflake channel_id) const {
while (s->FetchOne()) {
auto msg = GetMessageBound(s);
- if (!s->IsNull(33)) { // referenced message id
- msg.MessageReference.emplace();
- s->Get(33, msg.MessageReference->MessageID);
- }
msgs.push_back(std::move(msg));
}
@@ -843,6 +831,8 @@ std::optional Store::GetMessage(Snowflake id) const {
auto ref = GetMessageBound(s);
top.ReferencedMessage = std::make_shared(std::move(ref));
+ s->Reset();
+
return top;
}
@@ -893,6 +883,13 @@ Message Store::GetMessageBound(std::unique_ptr &s) const {
s->Get(31, a.Width);
}
+ if (!s->IsNull(32)) {
+ auto &q = r.MessageReference.emplace();
+ s->Get(32, q.MessageID);
+ s->Get(33, q.ChannelID);
+ s->Get(34, q.GuildID);
+ }
+
{
auto &s = m_stmt_get_mentions;
s->Bind(1, r.ID);
@@ -1581,7 +1578,10 @@ bool Store::CreateStatements() {
attachments.url,
attachments.proxy,
attachments.height,
- attachments.width
+ attachments.width,
+ message_references.message,
+ message_references.channel,
+ message_references.guild
FROM messages
LEFT OUTER JOIN
message_interactions
@@ -1589,7 +1589,10 @@ bool Store::CreateStatements() {
LEFT OUTER JOIN
attachments
ON messages.id = attachments.message
- WHERE messages.id = ?
+ LEFT OUTER JOIN
+ message_references
+ ON messages.id = message_references.id
+ WHERE messages.id = ?1
UNION ALL
SELECT messages.*,
message_interactions.interaction_id,
@@ -1602,7 +1605,10 @@ bool Store::CreateStatements() {
attachments.url,
attachments.proxy,
attachments.height,
- attachments.width
+ attachments.width,
+ message_references.message,
+ message_references.channel,
+ message_references.guild
FROM messages
LEFT OUTER JOIN
message_interactions
@@ -1610,7 +1616,10 @@ bool Store::CreateStatements() {
LEFT OUTER JOIN
attachments
ON messages.id = attachments.message
- WHERE messages.id = (SELECT message FROM message_references WHERE id = ?)
+ LEFT OUTER JOIN
+ message_references
+ ON messages.id = message_references.id
+ WHERE messages.id = (SELECT message FROM message_references WHERE id = ?1)
ORDER BY messages.id DESC
)");
if (!m_stmt_get_msg->OK()) {
@@ -1642,7 +1651,9 @@ bool Store::CreateStatements() {
attachments.proxy,
attachments.height,
attachments.width,
- message_references.message
+ message_references.message,
+ message_references.channel,
+ message_references.guild
FROM messages
LEFT OUTER JOIN
message_interactions
@@ -1940,7 +1951,9 @@ bool Store::CreateStatements() {
attachments.proxy,
attachments.height,
attachments.width,
- message_references.message
+ message_references.message,
+ message_references.channel,
+ message_references.guild
FROM messages
LEFT OUTER JOIN
message_interactions
--
cgit v1.2.3