Combine Ban/Timeout pubsub actions

Fully implement PubSub ban/unban messages
Move the "message combining" to Channel::addMessage

Disable "irc" ban/timeout handling for now. In the future, we might want
to use this if you're not a moderator in a channel.
This commit is contained in:
Rasmus Karlsson
2018-04-27 18:35:31 +02:00
parent 42182ed504
commit 32b6417a55
8 changed files with 163 additions and 37 deletions
+81
View File
@@ -1,5 +1,6 @@
#include "messages/message.hpp"
#include "messageelement.hpp"
#include "singletons/helper/pubsubactions.hpp"
#include "util/irchelpers.hpp"
using SBHighlight = chatterino::widgets::ScrollbarHighlight;
@@ -78,5 +79,85 @@ MessagePtr Message::createTimeoutMessage(const QString &username, const QString
return message;
}
MessagePtr Message::createTimeoutMessage(const singletons::BanAction &action, uint32_t count)
{
MessagePtr msg(new Message);
msg->addElement(new TimestampElement(QTime::currentTime()));
msg->flags.EnableFlag(MessageFlags::System);
msg->flags.EnableFlag(MessageFlags::Timeout);
msg->timeoutUser = action.target.name;
msg->count = count;
msg->banAction.reset(new singletons::BanAction(action));
QString text;
if (action.isBan()) {
if (action.reason.isEmpty()) {
text = QString("%1 banned %2.") //
.arg(action.source.name)
.arg(action.target.name);
} else {
text = QString("%1 banned %2: \"%3\".") //
.arg(action.source.name)
.arg(action.target.name)
.arg(action.reason);
}
} else {
if (action.reason.isEmpty()) {
text = QString("%1 timed out %2 for %3 seconds.") //
.arg(action.source.name)
.arg(action.target.name)
.arg(action.duration);
} else {
text = QString("%1 timed out %2 for %3 seconds: \"%4\".") //
.arg(action.source.name)
.arg(action.target.name)
.arg(action.duration)
.arg(action.reason);
}
if (count > 1) {
text.append(QString(" (%1 times)").arg(count));
}
}
msg->addElement(new messages::TextElement(text, messages::MessageElement::Text,
messages::MessageColor::System));
msg->searchText = text;
return msg;
}
MessagePtr Message::createUntimeoutMessage(const singletons::UnbanAction &action)
{
MessagePtr msg(new Message);
msg->addElement(new TimestampElement(QTime::currentTime()));
msg->flags.EnableFlag(MessageFlags::System);
msg->flags.EnableFlag(MessageFlags::Untimeout);
msg->timeoutUser = action.target.name;
QString text;
if (action.wasBan()) {
text = QString("%1 unbanned %2.") //
.arg(action.source.name)
.arg(action.target.name);
} else {
text = QString("%1 untimedout %2.") //
.arg(action.source.name)
.arg(action.target.name);
}
msg->addElement(new messages::TextElement(text, messages::MessageElement::Text,
messages::MessageColor::System));
msg->searchText = text;
return msg;
}
} // namespace messages
} // namespace chatterino
+9
View File
@@ -1,6 +1,7 @@
#pragma once
#include "messages/messageelement.hpp"
#include "singletons/helper/pubsubactions.hpp"
#include "util/flagsenum.hpp"
#include "widgets/helper/scrollbarhighlight.hpp"
@@ -37,6 +38,7 @@ struct Message {
DisableCompactEmotes = (1 << 6),
Collapsed = (1 << 7),
DisconnectedMessage = (1 << 8),
Untimeout = (1 << 9),
};
util::FlagsEnum<MessageFlags> flags;
@@ -48,6 +50,9 @@ struct Message {
QString localizedName;
QString timeoutUser;
std::unique_ptr<singletons::BanAction> banAction;
uint32_t count = 1;
// Messages should not be added after the message is done initializing.
void addElement(MessageElement *element);
const std::vector<std::unique_ptr<MessageElement>> &getElements() const;
@@ -64,6 +69,10 @@ public:
static std::shared_ptr<Message> createTimeoutMessage(const QString &username,
const QString &durationInSeconds,
const QString &reason, bool multipleTimes);
static std::shared_ptr<Message> createTimeoutMessage(const singletons::BanAction &action,
uint32_t count = 1);
static std::shared_ptr<Message> createUntimeoutMessage(const singletons::UnbanAction &action);
};
using MessagePtr = std::shared_ptr<Message>;