Advanced channel filters (#1748)
Adds custom channel filters complete with their own mini-language. Filters can be created in settings, and applied by clicking the three dots to open the Split menu and selecting "Set filters".
This commit is contained in:
@@ -224,6 +224,14 @@ void Channel::replaceMessage(MessagePtr message, MessagePtr replacement)
|
||||
}
|
||||
}
|
||||
|
||||
void Channel::replaceMessage(size_t index, MessagePtr replacement)
|
||||
{
|
||||
if (this->messages_.replaceItem(index, replacement))
|
||||
{
|
||||
this->messageReplaced.invoke(index, replacement);
|
||||
}
|
||||
}
|
||||
|
||||
void Channel::deleteMessage(QString messageID)
|
||||
{
|
||||
LimitedQueueSnapshot<MessagePtr> snapshot = this->getMessageSnapshot();
|
||||
|
||||
@@ -72,6 +72,7 @@ public:
|
||||
void addOrReplaceTimeout(MessagePtr message);
|
||||
void disableAllMessages();
|
||||
void replaceMessage(MessagePtr message, MessagePtr replacement);
|
||||
void replaceMessage(size_t index, MessagePtr replacement);
|
||||
void deleteMessage(QString messageID);
|
||||
void clearMessages();
|
||||
|
||||
|
||||
@@ -68,6 +68,23 @@ namespace {
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
const QList<QUuid> loadFilters(QJsonValue val)
|
||||
{
|
||||
QList<QUuid> filterIds;
|
||||
|
||||
if (!val.isUndefined())
|
||||
{
|
||||
const auto array = val.toArray();
|
||||
filterIds.reserve(array.size());
|
||||
for (const auto &id : array)
|
||||
{
|
||||
filterIds.append(QUuid::fromString(id.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
return filterIds;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void SplitDescriptor::loadFromJSON(SplitDescriptor &descriptor,
|
||||
@@ -85,6 +102,7 @@ void SplitDescriptor::loadFromJSON(SplitDescriptor &descriptor,
|
||||
{
|
||||
descriptor.channelName_ = data.value("name").toString();
|
||||
}
|
||||
descriptor.filters_ = loadFilters(root.value("filters"));
|
||||
}
|
||||
|
||||
WindowLayout WindowLayout::loadFromFile(const QString &path)
|
||||
|
||||
@@ -37,6 +37,8 @@ struct SplitDescriptor {
|
||||
// Whether "Moderation Mode" (the sword icon) is enabled in this split or not
|
||||
bool moderationMode_{false};
|
||||
|
||||
QList<QUuid> filters_;
|
||||
|
||||
static void loadFromJSON(SplitDescriptor &descriptor,
|
||||
const QJsonObject &root, const QJsonObject &data);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user