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:
dnsge
2020-10-18 15:16:56 +02:00
committed by Rasmus Karlsson
parent 812cbdf4f9
commit 4199a01b96
41 changed files with 2189 additions and 43 deletions
+8
View File
@@ -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();
+1
View File
@@ -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();
+18
View File
@@ -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)
+2
View File
@@ -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);
};