Q_ASSERT(SignalProxy::current());
Q_ASSERT(SignalProxy::current()->targetPeer());
- // We do not serialize the sender prefixes until we have a new protocol or client-features implemented
out << msg.msgId();
if (SignalProxy::current()->targetPeer()->hasFeature(Quassel::Feature::LongTime)) {
Redirected = 0x04,
ServerMsg = 0x08,
StatusMsg = 0x10,
+ Ignored = 0x20, ///< This message matched an active ignore rule when first received
Backlog = 0x80
};
Q_DECLARE_FLAGS(Flags, Flag)
(SELECT DISTINCT TYPE
FROM backlog
WHERE bufferid = :bufferid
+ AND flags & 32 = 0
AND flags & 1 = 0
AND messageid > :lastseenmsgid) t;
FROM
(SELECT COUNT(*) AS sum FROM backlog
WHERE bufferid = :bufferid
+ AND flags & 32 = 0
AND flags & 2 != 0
AND flags & 1 = 0
AND messageid > :lastseenmsgid) t;
(SELECT DISTINCT TYPE
FROM backlog
WHERE bufferid = :bufferid
+ AND flags & 32 = 0
AND flags & 1 = 0
AND messageid > :lastseenmsgid) t;
FROM
(SELECT COUNT(*) AS sum FROM backlog
WHERE bufferid = :bufferid
+ AND flags & 32 = 0
AND flags & 2 != 0
AND flags & 1 = 0
AND messageid > :lastseenmsgid) t;
void addBufferActivity(const Message& message)
{
+ if (message.flags().testFlag(Message::Flag::Ignored)) {
+ // Don't update buffer activity with messages that are ignored
+ return;
+ }
auto oldActivity = activity(message.bufferId());
if (!oldActivity.testFlag(message.type())) {
setBufferActivity(message.bufferId(), (int)(oldActivity | message.type()));
void addCoreHighlight(const Message& message)
{
+ if (message.flags().testFlag(Message::Flag::Ignored)) {
+ // Don't increase highlight count for messages that are ignored
+ return;
+ }
auto oldHighlightCount = highlightCount(message.bufferId());
if (message.flags().testFlag(Message::Flag::Highlight) && !message.flags().testFlag(Message::Flag::Self)) {
setHighlightCount(message.bufferId(), oldHighlightCount + 1);
// check for HardStrictness ignore
CoreNetwork* currentNetwork = network(msg.networkId);
QString networkName = currentNetwork ? currentNetwork->networkName() : QString("");
- if (_ignoreListManager.match(msg, networkName) == IgnoreListManager::HardStrictness)
+ switch (_ignoreListManager.match(msg, networkName)) {
+ case IgnoreListManager::StrictnessType::HardStrictness:
+ // Drop the message permanently
return;
+ case IgnoreListManager::StrictnessType::SoftStrictness:
+ // Mark the message as (dynamically) ignored
+ msg.flags |= Message::Flag::Ignored;
+ break;
+ case IgnoreListManager::StrictnessType::UnmatchedStrictness:
+ // Keep the message unmodified
+ break;
+ }
if (currentNetwork && _highlightRuleManager.match(msg, currentNetwork->myNick(), currentNetwork->identityPtr()->nicks()))
msg.flags |= Message::Flag::Highlight;