forked from OpenGamers/abaddon
fix retrieving message references
and also add a reset statement i forgot (raii might be good here...)
This commit is contained in:
parent
409af292af
commit
1da2c57376
@ -657,6 +657,14 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data)
|
||||
return author->GetEscapedBoldString<false>();
|
||||
};
|
||||
|
||||
// if the message wasnt fetched from store it might have an un-fetched reference
|
||||
std::optional<std::shared_ptr<Message>> 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<Message>(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<false>());
|
||||
}
|
||||
} 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("<i>deleted message</i>");
|
||||
} 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 = "<i>attachment</i>";
|
||||
} else if (referenced.Embeds.size() > 0) {
|
||||
} else if (!referenced.Embeds.empty()) {
|
||||
text = "<i>embed</i>";
|
||||
}
|
||||
} else {
|
||||
|
@ -484,10 +484,6 @@ std::vector<Message> 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<Message> 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<Message> 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<Message> Store::GetMessage(Snowflake id) const {
|
||||
auto ref = GetMessageBound(s);
|
||||
top.ReferencedMessage = std::make_shared<Message>(std::move(ref));
|
||||
|
||||
s->Reset();
|
||||
|
||||
return top;
|
||||
}
|
||||
|
||||
@ -893,6 +883,13 @@ Message Store::GetMessageBound(std::unique_ptr<Statement> &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
|
||||
|
Loading…
Reference in New Issue
Block a user