mirror of
https://github.com/martinrotter/rssguard.git
synced 2025-02-05 20:03:31 +01:00
Work on filtering dialog. add clang-format to support script beautify.
This commit is contained in:
parent
e0415a8060
commit
c608210e3c
@ -175,7 +175,10 @@ win32 {
|
||||
lib.path = $$PREFIX
|
||||
lib.CONFIG = no_check_exist
|
||||
|
||||
INSTALLS += target lib
|
||||
clng.files = ../../resources/scripts/clang-format/clang-format.exe
|
||||
clng.path = $$PREFIX
|
||||
|
||||
INSTALLS += target lib clng
|
||||
|
||||
INSTALL_HEADERS_PREFIX = $$quote($$PREFIX/include/librssguard)
|
||||
}
|
||||
|
BIN
resources/scripts/clang-format/clang-format.exe
Executable file
BIN
resources/scripts/clang-format/clang-format.exe
Executable file
Binary file not shown.
@ -4,6 +4,7 @@
|
||||
|
||||
#include "core/messagefilter.h"
|
||||
#include "definitions/definitions.h"
|
||||
#include "exceptions/filteringexception.h"
|
||||
#include "miscellaneous/application.h"
|
||||
#include "services/abstract/cacheforserviceroot.h"
|
||||
#include "services/abstract/feed.h"
|
||||
@ -147,23 +148,31 @@ void FeedDownloader::updateOneFeed(Feed* feed) {
|
||||
|
||||
tmr.restart();
|
||||
|
||||
FilteringAction decision = msg_filter->filterMessage(&filter_engine);
|
||||
try {
|
||||
FilteringAction decision = msg_filter->filterMessage(&filter_engine);
|
||||
|
||||
qDebug().nospace() << "Running filter script, it took " << tmr.nsecsElapsed() / 1000 << " microseconds.";
|
||||
qDebug().nospace() << "Running filter script, it took " << tmr.nsecsElapsed() / 1000 << " microseconds.";
|
||||
|
||||
switch (decision) {
|
||||
case FilteringAction::Accept:
|
||||
switch (decision) {
|
||||
case FilteringAction::Accept:
|
||||
|
||||
// Message is normally accepted, it could be tweaked by the filter.
|
||||
continue;
|
||||
// Message is normally accepted, it could be tweaked by the filter.
|
||||
continue;
|
||||
|
||||
case FilteringAction::Ignore:
|
||||
case FilteringAction::Ignore:
|
||||
|
||||
// Remove the message, we do not want it.
|
||||
msgs.removeAt(i--);
|
||||
break;
|
||||
// Remove the message, we do not want it.
|
||||
msgs.removeAt(i--);
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (const FilteringException& ex) {
|
||||
qCritical("Error when evaluating filtering JS function: '%s'. Accepting message.", qPrintable(ex.message()));
|
||||
continue;
|
||||
}
|
||||
|
||||
// If we reach this point. Then we ignore the message which is by now
|
||||
// already removed, go to next message.
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "core/messagefilter.h"
|
||||
|
||||
#include "core/message.h"
|
||||
#include "exceptions/filteringexception.h"
|
||||
|
||||
#include <QJSEngine>
|
||||
|
||||
@ -43,15 +44,19 @@ FilteringAction MessageFilter::filterMessage(QJSEngine* engine) {
|
||||
QJSValue filter_func = engine->evaluate(m_script);
|
||||
|
||||
if (filter_func.isError()) {
|
||||
qCritical("Error when evaluating script from filter '%d'. Error is: '%s'", id(), qPrintable(filter_func.toString()));
|
||||
return FilteringAction::Accept;
|
||||
QJSValue::ErrorType error = filter_func.errorType();
|
||||
QString message = filter_func.toString();
|
||||
|
||||
throw FilteringException(error, message);
|
||||
}
|
||||
|
||||
auto filter_output = engine->evaluate(QSL("filterMessage()"));
|
||||
|
||||
if (filter_output.isError()) {
|
||||
qCritical("Error when calling filtering function '%d'. Error is: '%s'", id(), qPrintable(filter_output.toString()));
|
||||
return FilteringAction::Accept;
|
||||
QJSValue::ErrorType error = filter_output.errorType();
|
||||
QString message = filter_output.toString();
|
||||
|
||||
throw FilteringException(error, message);
|
||||
}
|
||||
|
||||
return FilteringAction(filter_output.toInt());
|
||||
|
@ -8,7 +8,6 @@
|
||||
class ApplicationException {
|
||||
public:
|
||||
explicit ApplicationException(QString message = QString());
|
||||
virtual ~ApplicationException() = default;
|
||||
|
||||
QString message() const;
|
||||
|
||||
|
6
src/librssguard/exceptions/filteringexception.cpp
Executable file
6
src/librssguard/exceptions/filteringexception.cpp
Executable file
@ -0,0 +1,6 @@
|
||||
// For license of this file, see <project-root-folder>/LICENSE.md.
|
||||
|
||||
#include "exceptions/filteringexception.h"
|
||||
|
||||
FilteringException::FilteringException(QJSValue::ErrorType js_error, QString message)
|
||||
: ApplicationException(message), m_errorType(js_error) {}
|
18
src/librssguard/exceptions/filteringexception.h
Executable file
18
src/librssguard/exceptions/filteringexception.h
Executable file
@ -0,0 +1,18 @@
|
||||
// For license of this file, see <project-root-folder>/LICENSE.md.
|
||||
|
||||
#ifndef FILTERINGEXCEPTION_H
|
||||
#define FILTERINGEXCEPTION_H
|
||||
|
||||
#include "exceptions/applicationexception.h"
|
||||
|
||||
#include <QJSValue>
|
||||
|
||||
class FilteringException : public ApplicationException {
|
||||
public:
|
||||
explicit FilteringException(QJSValue::ErrorType js_error, QString message = QString());
|
||||
|
||||
private:
|
||||
QJSValue::ErrorType m_errorType;
|
||||
};
|
||||
|
||||
#endif // FILTERINGEXCEPTION_H
|
@ -8,7 +8,6 @@
|
||||
class IOException : public ApplicationException {
|
||||
public:
|
||||
explicit IOException(const QString& message = QString());
|
||||
virtual ~IOException() = default;
|
||||
};
|
||||
|
||||
#endif // IOEXCEPTION_H
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "gui/dialogs/formmessagefiltersmanager.h"
|
||||
|
||||
#include "core/messagefilter.h"
|
||||
#include "exceptions/filteringexception.h"
|
||||
#include "gui/guiutilities.h"
|
||||
#include "miscellaneous/application.h"
|
||||
#include "miscellaneous/feedreader.h"
|
||||
@ -38,6 +39,7 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const Q
|
||||
connect(m_ui.m_btnTest, &QPushButton::clicked, this, &FormMessageFiltersManager::testFilter);
|
||||
|
||||
initializeTestingMessage();
|
||||
loadFilter();
|
||||
}
|
||||
|
||||
FormMessageFiltersManager::~FormMessageFiltersManager() {
|
||||
@ -95,6 +97,12 @@ void FormMessageFiltersManager::loadFilter() {
|
||||
}
|
||||
|
||||
void FormMessageFiltersManager::testFilter() {
|
||||
// TODO: Add button to beautify JavaScript code, call clang-format and distribute
|
||||
// it under windows. On other platforms, just try to call and raise messagebox
|
||||
// error with "install clang-format" if not found.
|
||||
// then call like this with qt process api.
|
||||
// echo "script-code" | ./clang-format.exe --assume-filename="script.js" --style="Chromium"
|
||||
|
||||
// Perform per-message filtering.
|
||||
QJSEngine filter_engine;
|
||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
||||
@ -113,8 +121,37 @@ void FormMessageFiltersManager::testFilter() {
|
||||
msg_obj.setMessage(&msg);
|
||||
|
||||
auto* fltr = selectedFilter();
|
||||
FilteringAction decision = fltr->filterMessage(&filter_engine);
|
||||
int aa = 5;
|
||||
|
||||
try {
|
||||
FilteringAction decision = fltr->filterMessage(&filter_engine);
|
||||
|
||||
m_ui.m_txtErrors->setTextColor(decision == FilteringAction::Accept ? Qt::GlobalColor::darkGreen : Qt::GlobalColor::red);
|
||||
|
||||
QString answer = tr("Message will be %1.\n").arg(decision == FilteringAction::Accept
|
||||
? tr("accepted")
|
||||
: tr("rejected"));
|
||||
|
||||
answer += tr("Output (modified) message is:\n"
|
||||
" Title = '%1'\n"
|
||||
" URL = '%2'\n"
|
||||
" Author = '%3'\n"
|
||||
" Is read/important = '%4/%5'\n"
|
||||
" Created on = '%6'\n"
|
||||
" Contents = '%7'").arg(msg.m_title, msg.m_url, msg.m_author,
|
||||
msg.m_isRead ? tr("yes") : tr("no"),
|
||||
msg.m_isImportant ? tr("yes") : tr("no"),
|
||||
QString::number(msg.m_created.toMSecsSinceEpoch()),
|
||||
msg.m_contents);
|
||||
|
||||
m_ui.m_txtErrors->setPlainText(answer);
|
||||
}
|
||||
catch (const FilteringException& ex) {
|
||||
m_ui.m_txtErrors->setTextColor(Qt::GlobalColor::red);
|
||||
m_ui.m_txtErrors->setPlainText(tr("JavaScript-based filter contains errors: '%1'.").arg(ex.message()));
|
||||
}
|
||||
|
||||
// See output.
|
||||
m_ui.m_tcMessage->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
void FormMessageFiltersManager::showFilter(MessageFilter* filter) {
|
||||
@ -131,6 +168,8 @@ void FormMessageFiltersManager::showFilter(MessageFilter* filter) {
|
||||
m_ui.m_gbDetails->setEnabled(true);
|
||||
}
|
||||
|
||||
// See message.
|
||||
m_ui.m_tcMessage->setCurrentIndex(0);
|
||||
m_loadingFilter = false;
|
||||
}
|
||||
|
||||
|
@ -50,19 +50,6 @@
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<layout class="QFormLayout" name="formLayout_3">
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QTreeView" name="m_treeFeeds">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>150</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboBox"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
@ -73,6 +60,54 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboBox"/>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QTreeView" name="m_treeFeeds">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>150</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="text">
|
||||
<string>&Check all</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_2">
|
||||
<property name="text">
|
||||
<string>&Uncheck all</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
@ -147,108 +182,154 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Sample message</string>
|
||||
<widget class="QTabWidget" name="m_tcMessage">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<item row="0" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="m_cbSampleRead">
|
||||
<property name="text">
|
||||
<string>Read</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="m_cbSampleImportant">
|
||||
<property name="text">
|
||||
<string>Important</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Title</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleTitle</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="m_txtSampleTitle"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>URL</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleUrl</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="m_txtSampleUrl"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Author</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleAuthor</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="m_txtSampleAuthor"/>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Created on</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleCreatedOn</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="m_txtSampleCreatedOn"/>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Contents</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleContents</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QPlainTextEdit" name="m_txtSampleContents"/>
|
||||
</item>
|
||||
</layout>
|
||||
<widget class="QWidget" name="m_tabSample">
|
||||
<attribute name="title">
|
||||
<string>Sample message</string>
|
||||
</attribute>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<property name="leftMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="m_cbSampleRead">
|
||||
<property name="text">
|
||||
<string>Read</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="m_cbSampleImportant">
|
||||
<property name="text">
|
||||
<string>Important</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Title</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleTitle</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="m_txtSampleTitle"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>URL</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleUrl</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="m_txtSampleUrl"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Author</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleAuthor</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="m_txtSampleAuthor"/>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Created on</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleCreatedOn</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="m_txtSampleCreatedOn"/>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Contents</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtSampleContents</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QPlainTextEdit" name="m_txtSampleContents"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="m_tabScriptOutput">
|
||||
<attribute name="title">
|
||||
<string>Script output</string>
|
||||
</attribute>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<property name="leftMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QTextEdit" name="m_txtErrors">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@ -265,7 +346,7 @@
|
||||
<item>
|
||||
<widget class="QPushButton" name="m_btnDetailedHelp">
|
||||
<property name="text">
|
||||
<string>&Detailed &help</string>
|
||||
<string>Detailed &help</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -284,32 +365,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Test output</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_txtErrors</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QPlainTextEdit" name="m_txtErrors">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@ -334,10 +389,13 @@
|
||||
<tabstop>m_btnRemoveSelected</tabstop>
|
||||
<tabstop>comboBox</tabstop>
|
||||
<tabstop>m_treeFeeds</tabstop>
|
||||
<tabstop>pushButton</tabstop>
|
||||
<tabstop>pushButton_2</tabstop>
|
||||
<tabstop>m_txtTitle</tabstop>
|
||||
<tabstop>m_txtScript</tabstop>
|
||||
<tabstop>m_btnTest</tabstop>
|
||||
<tabstop>m_btnDetailedHelp</tabstop>
|
||||
<tabstop>m_tcMessage</tabstop>
|
||||
<tabstop>m_cbSampleRead</tabstop>
|
||||
<tabstop>m_cbSampleImportant</tabstop>
|
||||
<tabstop>m_txtSampleTitle</tabstop>
|
||||
|
@ -44,6 +44,7 @@ HEADERS += core/feeddownloader.h \
|
||||
dynamic-shortcuts/shortcutbutton.h \
|
||||
dynamic-shortcuts/shortcutcatcher.h \
|
||||
exceptions/applicationexception.h \
|
||||
exceptions/filteringexception.h \
|
||||
exceptions/ioexception.h \
|
||||
gui/baselineedit.h \
|
||||
gui/basetoolbar.h \
|
||||
@ -189,6 +190,7 @@ SOURCES += core/feeddownloader.cpp \
|
||||
dynamic-shortcuts/shortcutbutton.cpp \
|
||||
dynamic-shortcuts/shortcutcatcher.cpp \
|
||||
exceptions/applicationexception.cpp \
|
||||
exceptions/filteringexception.cpp \
|
||||
exceptions/ioexception.cpp \
|
||||
gui/baselineedit.cpp \
|
||||
gui/basetoolbar.cpp \
|
||||
|
Loading…
x
Reference in New Issue
Block a user