fix: avoid reward redemption crash via buffer refactor (#4949)
Co-authored-by: nerix <nero.9@hotmail.de> Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "providers/twitch/IrcMessageHandler.hpp"
|
||||
|
||||
#include "Application.hpp"
|
||||
#include "common/Common.hpp"
|
||||
#include "common/Literals.hpp"
|
||||
#include "common/QLogging.hpp"
|
||||
#include "controllers/accounts/AccountController.hpp"
|
||||
@@ -691,7 +692,7 @@ void IrcMessageHandler::handlePrivMessage(Communi::IrcPrivateMessage *message,
|
||||
// https://mm2pl.github.io/emoji_rfc.pdf for more details
|
||||
|
||||
this->addMessage(
|
||||
message, message->target(),
|
||||
message, channelOrEmptyByTarget(message->target(), server),
|
||||
message->content().replace(COMBINED_FIXER, ZERO_WIDTH_JOINER), server,
|
||||
false, message->isAction());
|
||||
|
||||
@@ -1001,7 +1002,7 @@ void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message,
|
||||
// Messages are not required, so they might be empty
|
||||
if (!content.isEmpty())
|
||||
{
|
||||
this->addMessage(message, target, content, server, true, false);
|
||||
this->addMessage(message, chn, content, server, true, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1260,13 +1261,11 @@ void IrcMessageHandler::setSimilarityFlags(const MessagePtr &message,
|
||||
}
|
||||
|
||||
void IrcMessageHandler::addMessage(Communi::IrcMessage *message,
|
||||
const QString &target,
|
||||
const ChannelPtr &chan,
|
||||
const QString &originalContent,
|
||||
TwitchIrcServer &server, bool isSub,
|
||||
bool isAction)
|
||||
{
|
||||
auto chan = channelOrEmptyByTarget(target, server);
|
||||
|
||||
if (chan->isEmpty())
|
||||
{
|
||||
return;
|
||||
@@ -1290,27 +1289,14 @@ void IrcMessageHandler::addMessage(Communi::IrcMessage *message,
|
||||
if (const auto it = tags.find("custom-reward-id"); it != tags.end())
|
||||
{
|
||||
const auto rewardId = it.value().toString();
|
||||
if (!channel->isChannelPointRewardKnown(rewardId))
|
||||
if (!rewardId.isEmpty() &&
|
||||
!channel->isChannelPointRewardKnown(rewardId))
|
||||
{
|
||||
// Need to wait for pubsub reward notification
|
||||
auto *clone = message->clone();
|
||||
qCDebug(chatterinoTwitch) << "TwitchChannel reward added ADD "
|
||||
"callback since reward is not known:"
|
||||
<< rewardId;
|
||||
channel->channelPointRewardAdded.connect(
|
||||
[=, this, &server](ChannelPointReward reward) {
|
||||
qCDebug(chatterinoTwitch)
|
||||
<< "TwitchChannel reward added callback:" << reward.id
|
||||
<< "-" << rewardId;
|
||||
if (reward.id == rewardId)
|
||||
{
|
||||
this->addMessage(clone, target, originalContent, server,
|
||||
isSub, isAction);
|
||||
clone->deleteLater();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
channel->addQueuedRedemption(rewardId, originalContent, message);
|
||||
return;
|
||||
}
|
||||
args.channelPointRewardId = rewardId;
|
||||
@@ -1319,7 +1305,7 @@ void IrcMessageHandler::addMessage(Communi::IrcMessage *message,
|
||||
QString content = originalContent;
|
||||
int messageOffset = stripLeadingReplyMention(tags, content);
|
||||
|
||||
TwitchMessageBuilder builder(chan.get(), message, args, content, isAction);
|
||||
TwitchMessageBuilder builder(channel, message, args, content, isAction);
|
||||
builder.setMessageOffset(messageOffset);
|
||||
|
||||
if (const auto it = tags.find("reply-thread-parent-msg-id");
|
||||
|
||||
Reference in New Issue
Block a user