Simplify some filtering stuff, do not unescape empty strings.

This commit is contained in:
Martin Rotter 2020-11-18 08:35:57 +01:00
parent 5b063cf1af
commit 3940afe1e6
5 changed files with 15 additions and 21 deletions

View file

@ -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.";

View file

@ -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) {

View file

@ -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;

View file

@ -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);

View file

@ -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();
}