diff --git a/src/librssguard/core/feeddownloader.cpp b/src/librssguard/core/feeddownloader.cpp index 95778dbb6..6d589bc75 100644 --- a/src/librssguard/core/feeddownloader.cpp +++ b/src/librssguard/core/feeddownloader.cpp @@ -113,18 +113,13 @@ void FeedDownloader::updateOneFeed(Feed* feed) { // Perform per-message filtering. QJSEngine filter_engine; - MessageFilter::initializeFilteringEngine(filter_engine); - // Create JavaScript communication wrapper for the message. MessageObject msg_obj(&database, feed->customId(), feed->getParentServiceRoot()->accountId(), feed->getParentServiceRoot()->labelsNode()->labels()); - // Register the wrapper. - auto js_object = filter_engine.newQObject(&msg_obj); - - filter_engine.globalObject().setProperty("msg", js_object); + MessageFilter::initializeFilteringEngine(filter_engine, &msg_obj); qDebugNN << LOGSEC_FEEDDOWNLOADER << "Setting up JS evaluation took " << tmr.nsecsElapsed() / 1000 << " microseconds."; diff --git a/src/librssguard/core/messagefilter.cpp b/src/librssguard/core/messagefilter.cpp index b4b14c50d..d70bc136b 100755 --- a/src/librssguard/core/messagefilter.cpp +++ b/src/librssguard/core/messagefilter.cpp @@ -79,10 +79,15 @@ void MessageFilter::setScript(const QString& script) { m_script = script; } -void MessageFilter::initializeFilteringEngine(QJSEngine& engine) { +void MessageFilter::initializeFilteringEngine(QJSEngine& engine, MessageObject* message_wrapper) { engine.installExtensions(QJSEngine::Extension::ConsoleExtension); engine.globalObject().setProperty("MSG_ACCEPT", int(FilteringAction::Accept)); engine.globalObject().setProperty("MSG_IGNORE", int(FilteringAction::Ignore)); + + // Register the wrapper. + auto js_object = engine.newQObject(message_wrapper); + + engine.globalObject().setProperty("msg", js_object); } void MessageFilter::setId(int id) { diff --git a/src/librssguard/core/messagefilter.h b/src/librssguard/core/messagefilter.h index f3d9d7a4b..334e57833 100755 --- a/src/librssguard/core/messagefilter.h +++ b/src/librssguard/core/messagefilter.h @@ -27,7 +27,7 @@ class MessageFilter : public QObject { QString script() const; void setScript(const QString& script); - static void initializeFilteringEngine(QJSEngine& engine); + static void initializeFilteringEngine(QJSEngine& engine, MessageObject* message_wrapper); private: int m_id; diff --git a/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp b/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp index ce66b21e4..076da305f 100644 --- a/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp +++ b/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp @@ -147,24 +147,14 @@ void FormMessageFiltersManager::loadFilter() { void FormMessageFiltersManager::testFilter() { // Perform per-message filtering. QJSEngine filter_engine; - - MessageFilter::initializeFilteringEngine(filter_engine); - QSqlDatabase database = qApp->database()->connection(metaObject()->className()); - - // Create JavaScript communication wrapper for the message. MessageObject msg_obj(&database, QString::number(NO_PARENT_CATEGORY), NO_PARENT_CATEGORY, {}); - - // Register the wrapper. - auto js_object = filter_engine.newQObject(&msg_obj); - - filter_engine.globalObject().setProperty("msg", js_object); - + auto* fltr = selectedFilter(); Message msg = testingMessage(); - msg_obj.setMessage(&msg); + MessageFilter::initializeFilteringEngine(filter_engine, &msg_obj); - auto* fltr = selectedFilter(); + msg_obj.setMessage(&msg); try { FilteringAction decision = fltr->filterMessage(&filter_engine); diff --git a/src/librssguard/network-web/webfactory.cpp b/src/librssguard/network-web/webfactory.cpp index a6ed3fdd3..8c5f0f5b9 100644 --- a/src/librssguard/network-web/webfactory.cpp +++ b/src/librssguard/network-web/webfactory.cpp @@ -70,6 +70,10 @@ QString WebFactory::stripTags(QString text) { } QString WebFactory::unescapeHtml(const QString& html) { + if (html.isEmpty()) { + return html; + } + if (m_htmlNamedEntities.isEmpty()) { generateUnescapes(); }