fix: show rewards early, replace later (#5948)
This commit is contained in:
@@ -2135,6 +2135,7 @@ std::pair<MessagePtrMut, HighlightAlert> MessageBuilder::makeIrcMessage(
|
||||
builder.appendChannelPointRewardMessage(*reward, channel->isMod(),
|
||||
channel->isBroadcaster());
|
||||
}
|
||||
builder->flags.set(MessageFlag::RedeemedChannelPointReward);
|
||||
}
|
||||
|
||||
builder.appendChannelName(channel);
|
||||
|
||||
@@ -22,9 +22,9 @@ enum class MessageSinkTrait : uint8_t {
|
||||
/// added to the global mentions channel when encountered.
|
||||
AddMentionsToGlobalChannel = 1 << 0,
|
||||
|
||||
/// A channel-point redemption whose reward is not yet known should not be
|
||||
/// added to this sink, but queued in the corresponding TwitchChannel
|
||||
/// (`addQueuedRedemption`).
|
||||
/// A channel-point redemption whose reward is not yet known should be
|
||||
/// queued in the corresponding TwitchChannel (`addQueuedRedemption`) and
|
||||
/// the message should be replaced later.
|
||||
RequiresKnownChannelPointReward = 1 << 1,
|
||||
};
|
||||
using MessageSinkTraits = FlagsEnum<MessageSinkTrait>;
|
||||
|
||||
@@ -1010,7 +1010,6 @@ void IrcMessageHandler::addMessage(Communi::IrcMessage *message,
|
||||
"callback since reward is not known:"
|
||||
<< rewardId;
|
||||
chan->addQueuedRedemption(rewardId, originalContent, message);
|
||||
return;
|
||||
}
|
||||
args.channelPointRewardId = rewardId;
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "util/Helpers.hpp"
|
||||
#include "util/PostToThread.hpp"
|
||||
#include "util/QStringHash.hpp"
|
||||
#include "util/VectorMessageSink.hpp"
|
||||
#include "widgets/Window.hpp"
|
||||
|
||||
#include <IrcConnection>
|
||||
@@ -460,9 +461,24 @@ void TwitchChannel::addChannelPointReward(const ChannelPointReward &reward)
|
||||
[&](const QueuedRedemption &msg) {
|
||||
if (reward.id == msg.rewardID)
|
||||
{
|
||||
VectorMessageSink sink(
|
||||
MessageSinkTrait::AddMentionsToGlobalChannel);
|
||||
IrcMessageHandler::instance().addMessage(
|
||||
msg.message.get(), *this, this, msg.originalContent,
|
||||
msg.message.get(), sink, this, msg.originalContent,
|
||||
*server, false, false);
|
||||
if (sink.messages().empty())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
MessagePtr next = sink.messages().back();
|
||||
auto prev = this->findMessageByID(next->id);
|
||||
if (!prev)
|
||||
{
|
||||
// message gone
|
||||
this->addMessage(next, MessageContext::Repost);
|
||||
return true;
|
||||
}
|
||||
this->replaceMessage(prev, next);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user