Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ lxqt_translate_ts(NOTIFICATIONS_QM_FILES
lxqt_app_translation_loader(QM_LOADER ${PROJECT_NAME})
#************************************************

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions")
add_executable(lxqt-notificationd
${NOTIFICATIONS_SRC}
${NOTIFICATIONS_QM_FILES}
Expand Down
40 changes: 17 additions & 23 deletions src/notificationlayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,7 @@
#include <QBrush>
#include <QSettings>
#include <QStandardPaths>

#include <regex>
#include <sstream>
#include <iostream>

#include <QRegularExpression>

NotificationLayout::NotificationLayout(QWidget *parent)
: QWidget(parent),
Expand Down Expand Up @@ -76,19 +72,17 @@ void NotificationLayout::setSizes(int space, int width)
}
}

bool NotificationLayout::filter(const std::string& input, const std::string& pcre) {
if (pcre.empty()) {
void NotificationLayout::setPCREFilter(QRegularExpression& re, const QString& pattern) {
re.setPattern(pattern);
qWarning() << "Unable to compile regexp from pattern " << pattern << ", error: "
<< re.errorString() << ", at position " << re.patternErrorOffset();
}

bool NotificationLayout::filter(const QString& input, const QRegularExpression& re) {
if (re.pattern().isEmpty() || !re.isValid())
return false;
}
try{
std::regex pattern(pcre);
return std::regex_search(input, pattern);
} catch (const std::regex_error& e) {
std::cerr << "ERROR: Invalid pcre: " << pcre << std::endl;
std::cerr << " " << e.what() << std::endl;
std::cerr << " Code: " << e.code() << std::endl;
}
return false;

return re.match(input).hasMatch();
}

void NotificationLayout::addNotification(uint id, const QString &application,
Expand All @@ -103,18 +97,18 @@ void NotificationLayout::addNotification(uint id, const QString &application,
// qDebug() << "NotificationLayout::addNotification" << id << application << summary << body << icon << timeout;
//bool showNotification = !m_doNotDisturb && !filter;
//std::cout << std::boolalpha << "m_doNotDisturb: " << m_doNotDisturb << std::endl;
bool applicationPCRECaptured = filter(application.toStdString(), m_application_pcre_filter);
bool bodyPCRECaptured = filter(summary.toStdString(), m_body_pcre_filter);
bool summaryPCRECaptured = filter(summary.toStdString(), m_summary_pcre_filter);
bool applicationPCRECaptured = filter(application, m_application_pcre_filter);
bool bodyPCRECaptured = filter(summary, m_body_pcre_filter);
bool summaryPCRECaptured = filter(summary, m_summary_pcre_filter);
qInfo() << "New notification: ";
qInfo() << " application: " << application;
qInfo() << " application PCRE: " << QString::fromStdString(m_application_pcre_filter);
qInfo() << " application PCRE: " << m_application_pcre_filter;
qInfo() << " application PCRE captured: " << QString::fromStdString( (applicationPCRECaptured ? "true" : "false"));
qInfo() << " body: " << body;
qInfo() << " body PCRE: " << QString::fromStdString(m_body_pcre_filter);
qInfo() << " body PCRE: " << m_body_pcre_filter;
qInfo() << " body PCRE captured: " << QString::fromStdString( (bodyPCRECaptured ? "true" : "false"));
qInfo() << " summary: " << summary;
qInfo() << " summary PCRE: " << QString::fromStdString(m_summary_pcre_filter);
qInfo() << " summary PCRE: " << m_summary_pcre_filter;
qInfo() << " summary PCRE captured: " << QString::fromStdString( (summaryPCRECaptured ? "true" : "false"));

//bool filter = summary.toStdString() == "shit";
Expand Down
25 changes: 14 additions & 11 deletions src/notificationlayout.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#define NotificationLayout_H

#include "notification.h"
#include <QRegularExpression>


class NotificationLayout : public QWidget
Expand All @@ -53,17 +54,19 @@ class NotificationLayout : public QWidget
void setDoNotDisturb(bool value) {
m_doNotDisturb = value;
}

void setApplicationPCREFilter(const std::string& pcre) {
m_application_pcre_filter = pcre;

void setPCREFilter(QRegularExpression& re, const QString& pattern);

void setApplicationPCREFilter(const QString& pcre) {
setPCREFilter(m_application_pcre_filter, pcre);
}

void setBodyPCREFilter(const std::string& pcre) {
m_body_pcre_filter = pcre;
void setBodyPCREFilter(const QString& pcre) {
setPCREFilter(m_body_pcre_filter, pcre);
}

void setSummaryPCREFilter(const std::string& pcre) {
m_summary_pcre_filter = pcre;
void setSummaryPCREFilter(const QString& pcre) {
setPCREFilter(m_summary_pcre_filter, pcre);
}

void setBlackList(const QStringList &l) {
Expand Down Expand Up @@ -119,9 +122,9 @@ public slots:
QVBoxLayout *m_layout;
int m_unattendedMaxNum;
bool m_doNotDisturb;
std::string m_application_pcre_filter;
std::string m_body_pcre_filter;
std::string m_summary_pcre_filter;
QRegularExpression m_application_pcre_filter;
QRegularExpression m_body_pcre_filter;
QRegularExpression m_summary_pcre_filter;
QStringList m_blackList;
QString m_cacheFile;
QString m_cacheDateFormat;
Expand All @@ -132,7 +135,7 @@ public slots:
*/
void checkHeight();

bool filter(const std::string& input, const std::string& pcre);
bool filter(const QString& input, const QRegularExpression& re);

private slots:
/*! \c Notification's timer timeouted, so closing the notifiaction
Expand Down
10 changes: 3 additions & 7 deletions src/notifyd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -155,10 +155,6 @@ void Notifyd::reloadSettings()
m_serverTimeout = m_settings->value(QSL("server_decides"), 10).toInt();
bool old_doNotDisturb = m_doNotDisturb;
m_doNotDisturb = m_settings->value(QL1S("doNotDisturb"), false).toBool();
std::string m_application_pcre_filter = m_settings->value(QL1S("application_pcre_filter")).toString().toStdString();
std::string m_body_pcre_filter = m_settings->value(QL1S("body_pcre_filter")).toString().toStdString();
std::string m_summary_pcre_filter = m_settings->value(QL1S("summary_pcre_filter")).toString().toStdString();

int maxNum = m_settings->value(QSL("unattendedMaxNum"), 10).toInt();
if (m_doNotDisturb)
maxNum = qMax(maxNum, 50);
Expand All @@ -170,9 +166,9 @@ void Notifyd::reloadSettings()
m_settings->value(QSL("screenWithMouse"),false).toBool(),
m_doNotDisturb ? QStringList() : m_settings->value(QSL("blackList")).toStringList());
m_area->layout()->setDoNotDisturb(m_doNotDisturb);
m_area->layout()->setApplicationPCREFilter(m_application_pcre_filter);
m_area->layout()->setBodyPCREFilter(m_body_pcre_filter);
m_area->layout()->setSummaryPCREFilter(m_summary_pcre_filter);
m_area->layout()->setApplicationPCREFilter(m_settings->value(QL1S("application_pcre_filter")).toString());
m_area->layout()->setBodyPCREFilter(m_settings->value(QL1S("body_pcre_filter")).toString());
m_area->layout()->setSummaryPCREFilter(m_settings->value(QL1S("summary_pcre_filter")).toString());

if (m_trayIcon.isNull())
{
Expand Down