initial poc - plugins are now loaded from their own DLL/SO/DYLIB files

This commit is contained in:
Martin Rotter 2024-03-15 13:20:30 +01:00 committed by martinrotter
parent d56fbd7539
commit f585398a64
111 changed files with 818 additions and 527 deletions

View File

@ -308,7 +308,12 @@ elseif(UNIX AND NOT ANDROID)
) )
endif() endif()
# Generate localizations, build library and application. # Common libraries.
add_subdirectory(src/librssguard) add_subdirectory(src/librssguard)
add_subdirectory(localization) add_subdirectory(localization)
# Plugins.
add_subdirectory(src/librssguard-standard)
# GUI executable.
add_subdirectory(src/rssguard) add_subdirectory(src/rssguard)

View File

@ -0,0 +1,148 @@
set(LIBRSSGUARD_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../librssguard")
set(SOURCES
src/definitions.h
src/gui/formdiscoverfeeds.cpp
src/gui/formdiscoverfeeds.h
src/gui/formeditstandardaccount.cpp
src/gui/formeditstandardaccount.h
src/gui/formstandardfeeddetails.cpp
src/gui/formstandardfeeddetails.h
src/gui/formstandardimportexport.cpp
src/gui/formstandardimportexport.h
src/gui/standardaccountdetails.cpp
src/gui/standardaccountdetails.h
src/gui/standardfeeddetails.cpp
src/gui/standardfeeddetails.h
src/parsers/atomparser.cpp
src/parsers/atomparser.h
src/parsers/feedparser.cpp
src/parsers/feedparser.h
src/parsers/icalparser.cpp
src/parsers/icalparser.h
src/parsers/jsonparser.cpp
src/parsers/jsonparser.h
src/parsers/rdfparser.cpp
src/parsers/rdfparser.h
src/parsers/rssparser.cpp
src/parsers/rssparser.h
src/parsers/sitemapparser.cpp
src/parsers/sitemapparser.h
src/standardcategory.cpp
src/standardcategory.h
src/standardfeed.cpp
src/standardfeed.h
src/standardfeedsimportexportmodel.cpp
src/standardfeedsimportexportmodel.h
src/standardserviceentrypoint.cpp
src/standardserviceentrypoint.h
src/standardserviceroot.cpp
src/standardserviceroot.h
)
set(UI_FILES
src/gui/formdiscoverfeeds.ui
src/gui/formstandardimportexport.ui
src/gui/standardaccountdetails.ui
src/gui/standardfeeddetails.ui
)
# Add mimesis.
list(APPEND SOURCES
${LIBRSSGUARD_PATH}/3rd-party/mimesis/mimesis.hpp
${LIBRSSGUARD_PATH}/3rd-party/mimesis/quoted-printable.hpp
)
# Add boolinq.
list(APPEND SOURCES
${LIBRSSGUARD_PATH}/3rd-party/boolinq/boolinq.h
)
# Deal with .ui files.
qt_wrap_ui(SOURCES ${UI_FILES})
# Bundle version info.
if(WIN32)
enable_language("RC")
list(APPEND SOURCES "${CMAKE_BINARY_DIR}/rssguard.rc")
endif()
add_library(rssguard-standard SHARED ${SOURCES} ${QM_FILES})
# Add specific definitions.
target_compile_definitions(rssguard-standard
PRIVATE
RSSGUARD_DLLSPEC=Q_DECL_IMPORT
RSSGUARD_DLLSPEC_EXPORT=Q_DECL_EXPORT
APP_AUTHOR="${APP_AUTHOR}"
APP_DONATE_URL="${APP_DONATE_URL}"
APP_EMAIL="${APP_EMAIL}"
APP_LOW_H_NAME=".${CMAKE_PROJECT_NAME}"
APP_REVISION="${APP_REVISION}"
APP_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}"
APP_SYSTEM_VERSION="${CMAKE_SYSTEM_PROCESSOR}"
APP_URL_DOCUMENTATION="${APP_URL_DOCUMENTATION}"
APP_URL_ISSUES_NEW="${APP_URL_ISSUES_NEW}"
APP_USERAGENT="${APP_NAME}/${CMAKE_PROJECT_VERSION}")
target_include_directories(rssguard-standard
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_BINARY_DIR}/src/librssguard
${LIBRSSGUARD_PATH}
${LIBRSSGUARD_PATH}/gui/dialogs
${LIBRSSGUARD_PATH}/gui/reusable
${LIBRSSGUARD_PATH}/services/abstract/gui
${LIBRSSGUARD_PATH}/dynamic-shortcuts
PRIVATE
${LIBRSSGUARD_PATH}/gui/notifications
${LIBRSSGUARD_PATH}/gui/toolbars
${LIBRSSGUARD_PATH}/gui/richtexteditor
)
# Qt.
target_link_libraries(rssguard-standard PUBLIC
rssguard
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Network
Qt${QT_VERSION_MAJOR}::Qml
Qt${QT_VERSION_MAJOR}::Sql
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Xml
Qt${QT_VERSION_MAJOR}::Concurrent
)
if(QT_VERSION_MAJOR EQUAL 6)
target_link_libraries(rssguard-standard PUBLIC
Qt${QT_VERSION_MAJOR}::Core5Compat
)
endif()
if(WIN32)
target_link_libraries(rssguard-standard PUBLIC
Qt${QT_VERSION_MAJOR}::GuiPrivate
)
endif()
if(NO_LITE)
target_link_libraries(rssguard-standard PUBLIC
Qt${QT_VERSION_MAJOR}::WebEngineWidgets
)
endif()
if(WIN32 OR OS2)
install(TARGETS rssguard-standard DESTINATION .)
elseif(UNIX AND NOT APPLE AND NOT ANDROID)
include (GNUInstallDirs)
install(TARGETS rssguard-standard
DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
elseif(APPLE)
install(TARGETS rssguard-standard
DESTINATION Contents/MacOS
)
endif()

View File

@ -0,0 +1,5 @@
{
"name": "Standard RSS/ATOM/JSON plugin",
"author": "Martin Rotter",
"website": "https://github.com/martinrotter/rssguard"
}

View File

@ -1,6 +1,6 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/gui/formdiscoverfeeds.h" #include "src/gui/formdiscoverfeeds.h"
#include "3rd-party/boolinq/boolinq.h" #include "3rd-party/boolinq/boolinq.h"
#include "database/databasequeries.h" #include "database/databasequeries.h"
@ -10,16 +10,16 @@
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "services/abstract/category.h" #include "services/abstract/category.h"
#include "services/abstract/serviceroot.h" #include "services/abstract/serviceroot.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
#include "services/standard/gui/formstandardfeeddetails.h" #include "src/gui/formstandardfeeddetails.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include "services/standard/parsers/atomparser.h" #include "src/parsers/atomparser.h"
#include "services/standard/parsers/icalparser.h" #include "src/parsers/icalparser.h"
#include "services/standard/parsers/jsonparser.h" #include "src/parsers/jsonparser.h"
#include "services/standard/parsers/rdfparser.h" #include "src/parsers/rdfparser.h"
#include "services/standard/parsers/rssparser.h" #include "src/parsers/rssparser.h"
#include "services/standard/parsers/sitemapparser.h" #include "src/parsers/sitemapparser.h"
#include <QtConcurrentMap> #include <QtConcurrentMap>

View File

@ -8,7 +8,7 @@
#include "ui_formdiscoverfeeds.h" #include "ui_formdiscoverfeeds.h"
#include "services/abstract/accountcheckmodel.h" #include "services/abstract/accountcheckmodel.h"
#include "services/standard/parsers/feedparser.h" #include "src/parsers/feedparser.h"
#include <QFutureWatcher> #include <QFutureWatcher>

View File

@ -1,10 +1,10 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/gui/formeditstandardaccount.h" #include "src/gui/formeditstandardaccount.h"
#include "services/standard/gui/standardaccountdetails.h" #include "src/gui/standardaccountdetails.h"
#include "services/standard/standardserviceentrypoint.h" #include "src/standardserviceentrypoint.h"
#include "services/standard/standardserviceroot.h" #include "src/standardserviceroot.h"
FormEditStandardAccount::FormEditStandardAccount(QWidget* parent) FormEditStandardAccount::FormEditStandardAccount(QWidget* parent)
: FormAccountDetails(StandardServiceEntryPoint().icon(), parent), : FormAccountDetails(StandardServiceEntryPoint().icon(), parent),

View File

@ -1,6 +1,6 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/gui/formstandardfeeddetails.h" #include "src/gui/formstandardfeeddetails.h"
#include "database/databasequeries.h" #include "database/databasequeries.h"
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
@ -10,8 +10,8 @@
#include "services/abstract/category.h" #include "services/abstract/category.h"
#include "services/abstract/gui/authenticationdetails.h" #include "services/abstract/gui/authenticationdetails.h"
#include "services/abstract/serviceroot.h" #include "services/abstract/serviceroot.h"
#include "services/standard/gui/standardfeeddetails.h" #include "src/gui/standardfeeddetails.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include <QFileDialog> #include <QFileDialog>
#include <QNetworkCookie> #include <QNetworkCookie>

View File

@ -1,14 +1,14 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/gui/formstandardimportexport.h" #include "src/gui/formstandardimportexport.h"
#include "exceptions/ioexception.h" #include "exceptions/ioexception.h"
#include "gui/guiutilities.h" #include "gui/guiutilities.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h" #include "miscellaneous/iconfactory.h"
#include "services/abstract/category.h" #include "services/abstract/category.h"
#include "services/standard/standardfeedsimportexportmodel.h" #include "src/standardfeedsimportexportmodel.h"
#include "services/standard/standardserviceroot.h" #include "src/standardserviceroot.h"
#include <QFileDialog> #include <QFileDialog>
#include <QTextStream> #include <QTextStream>

View File

@ -5,7 +5,7 @@
#include <QDialog> #include <QDialog>
#include "services/standard/standardfeedsimportexportmodel.h" #include "src/standardfeedsimportexportmodel.h"
#include "ui_formstandardimportexport.h" #include "ui_formstandardimportexport.h"
namespace Ui { namespace Ui {

View File

@ -1,10 +1,10 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/gui/standardaccountdetails.h" #include "src/gui/standardaccountdetails.h"
#include "3rd-party/boolinq/boolinq.h" #include "3rd-party/boolinq/boolinq.h"
#include "miscellaneous/iconfactory.h" #include "miscellaneous/iconfactory.h"
#include "services/standard/standardserviceentrypoint.h" #include "src/standardserviceentrypoint.h"
#include <QFileDialog> #include <QFileDialog>
#include <QImageReader> #include <QImageReader>

View File

@ -1,6 +1,6 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/gui/standardfeeddetails.h" #include "src/gui/standardfeeddetails.h"
#include "3rd-party/boolinq/boolinq.h" #include "3rd-party/boolinq/boolinq.h"
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
@ -10,7 +10,7 @@
#include "miscellaneous/textfactory.h" #include "miscellaneous/textfactory.h"
#include "network-web/networkfactory.h" #include "network-web/networkfactory.h"
#include "services/abstract/category.h" #include "services/abstract/category.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
#include <QFileDialog> #include <QFileDialog>
#include <QImageReader> #include <QImageReader>

View File

@ -7,7 +7,7 @@
#include "ui_standardfeeddetails.h" #include "ui_standardfeeddetails.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include <QNetworkProxy> #include <QNetworkProxy>

View File

@ -1,14 +1,14 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/parsers/atomparser.h" #include "src/parsers/atomparser.h"
#include "definitions/definitions.h" #include "definitions/definitions.h"
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "miscellaneous/textfactory.h" #include "miscellaneous/textfactory.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include <QTextCodec> #include <QTextCodec>

View File

@ -3,7 +3,7 @@
#ifndef ATOMPARSER_H #ifndef ATOMPARSER_H
#define ATOMPARSER_H #define ATOMPARSER_H
#include "services/standard/parsers/feedparser.h" #include "src/parsers/feedparser.h"
#include "core/message.h" #include "core/message.h"

View File

@ -1,14 +1,18 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/parsers/feedparser.h" #include "src/parsers/feedparser.h"
#include "src/definitions.h"
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
#include "exceptions/feedfetchexception.h" #include "exceptions/feedfetchexception.h"
#include "miscellaneous/application.h" // #include "miscellaneous/application.h"
#include "definitions/definitions.h"
#include "miscellaneous/iofactory.h"
#include "network-web/webfactory.h" #include "network-web/webfactory.h"
#include "services/standard/definitions.h"
#include <QDebug> #include <QDebug>
#include <QFile>
#include <QRegularExpression> #include <QRegularExpression>
#include <utility> #include <utility>
@ -344,7 +348,7 @@ QString FeedParser::xmlRawChild(const QDomElement& container) const {
QTextStream str(&raw_ch); QTextStream str(&raw_ch);
children.at(i).save(str, 0); children.at(i).save(str, 0);
raw += qApp->web()->unescapeHtml(raw_ch); raw += WebFactory::unescapeHtml(raw_ch);
} }
} }

View File

@ -11,7 +11,7 @@
#include "core/message.h" #include "core/message.h"
#include "definitions/typedefs.h" #include "definitions/typedefs.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
// Base class for all XML-based feed parsers. // Base class for all XML-based feed parsers.
class FeedParser { class FeedParser {

View File

@ -1,6 +1,6 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/parsers/icalparser.h" #include "src/parsers/icalparser.h"
#include "3rd-party/boolinq/boolinq.h" #include "3rd-party/boolinq/boolinq.h"
#include "definitions/definitions.h" #include "definitions/definitions.h"
@ -9,7 +9,7 @@
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "miscellaneous/textfactory.h" #include "miscellaneous/textfactory.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
IcalParser::IcalParser(const QString& data) IcalParser::IcalParser(const QString& data)
: FeedParser(data, DataType::Other), m_iCalendar(Icalendar(m_data.toUtf8())) {} : FeedParser(data, DataType::Other), m_iCalendar(Icalendar(m_data.toUtf8())) {}

View File

@ -3,7 +3,7 @@
#ifndef ICALPARSER_H #ifndef ICALPARSER_H
#define ICALPARSER_H #define ICALPARSER_H
#include "services/standard/parsers/feedparser.h" #include "src/parsers/feedparser.h"
#include <QTimeZone> #include <QTimeZone>

View File

@ -1,6 +1,6 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/parsers/jsonparser.h" #include "src/parsers/jsonparser.h"
#include "definitions/definitions.h" #include "definitions/definitions.h"
#include "definitions/typedefs.h" #include "definitions/typedefs.h"
@ -8,8 +8,8 @@
#include "exceptions/feedrecognizedbutfailedexception.h" #include "exceptions/feedrecognizedbutfailedexception.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "miscellaneous/textfactory.h" #include "miscellaneous/textfactory.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include <QJsonArray> #include <QJsonArray>
#include <QJsonDocument> #include <QJsonDocument>

View File

@ -3,7 +3,7 @@
#ifndef JSONPARSER_H #ifndef JSONPARSER_H
#define JSONPARSER_H #define JSONPARSER_H
#include "services/standard/parsers/feedparser.h" #include "src/parsers/feedparser.h"
#include "core/message.h" #include "core/message.h"

View File

@ -1,12 +1,12 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/parsers/rdfparser.h" #include "src/parsers/rdfparser.h"
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "miscellaneous/textfactory.h" #include "miscellaneous/textfactory.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include <QDomDocument> #include <QDomDocument>
#include <QTextCodec> #include <QTextCodec>

View File

@ -3,7 +3,7 @@
#ifndef RDFPARSER_H #ifndef RDFPARSER_H
#define RDFPARSER_H #define RDFPARSER_H
#include "services/standard/parsers/feedparser.h" #include "src/parsers/feedparser.h"
#include "core/message.h" #include "core/message.h"

View File

@ -1,14 +1,14 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/parsers/rssparser.h" #include "src/parsers/rssparser.h"
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "miscellaneous/textfactory.h" #include "miscellaneous/textfactory.h"
#include "network-web/networkfactory.h" #include "network-web/networkfactory.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include <QDomDocument> #include <QDomDocument>
#include <QTextCodec> #include <QTextCodec>

View File

@ -3,7 +3,7 @@
#ifndef RSSPARSER_H #ifndef RSSPARSER_H
#define RSSPARSER_H #define RSSPARSER_H
#include "services/standard/parsers/feedparser.h" #include "src/parsers/feedparser.h"
#include "core/message.h" #include "core/message.h"

View File

@ -1,6 +1,6 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/parsers/sitemapparser.h" #include "src/parsers/sitemapparser.h"
#if defined(ENABLE_COMPRESSED_SITEMAP) #if defined(ENABLE_COMPRESSED_SITEMAP)
#include "3rd-party/qcompressor/qcompressor.h" #include "3rd-party/qcompressor/qcompressor.h"
@ -11,7 +11,7 @@
#include "exceptions/feedrecognizedbutfailedexception.h" #include "exceptions/feedrecognizedbutfailedexception.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "miscellaneous/textfactory.h" #include "miscellaneous/textfactory.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
#include <QDomDocument> #include <QDomDocument>
#include <QTextCodec> #include <QTextCodec>

View File

@ -3,9 +3,9 @@
#ifndef SITEMAPPARSER_H #ifndef SITEMAPPARSER_H
#define SITEMAPPARSER_H #define SITEMAPPARSER_H
#include "services/standard/parsers/feedparser.h" #include "src/parsers/feedparser.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
class SitemapParser : public FeedParser { class SitemapParser : public FeedParser {
public: public:

View File

@ -1,13 +1,13 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/standardcategory.h" #include "src/standardcategory.h"
#include "database/databasequeries.h" #include "database/databasequeries.h"
#include "definitions/definitions.h" #include "definitions/definitions.h"
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
#include "services/abstract/gui/formcategorydetails.h" #include "services/abstract/gui/formcategorydetails.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include "services/standard/standardserviceroot.h" #include "src/standardserviceroot.h"
#include <QPointer> #include <QPointer>

View File

@ -1,6 +1,6 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include "database/databasequeries.h" #include "database/databasequeries.h"
#include "definitions/definitions.h" #include "definitions/definitions.h"
@ -10,20 +10,20 @@
#include "exceptions/scriptexception.h" #include "exceptions/scriptexception.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "miscellaneous/textfactory.h" #include "miscellaneous/textfactory.h"
#include "services/standard/gui/formstandardfeeddetails.h" #include "src/gui/formstandardfeeddetails.h"
#include "services/standard/standardserviceroot.h" #include "src/standardserviceroot.h"
#if defined(NO_LITE) #if defined(NO_LITE)
#include "gui/webviewers/webengine/webengineviewer.h" #include "gui/webviewers/webengine/webengineviewer.h"
#include "network-web/webengine/webenginepage.h" #include "network-web/webengine/webenginepage.h"
#endif #endif
#include "services/standard/parsers/atomparser.h" #include "src/parsers/atomparser.h"
#include "services/standard/parsers/icalparser.h" #include "src/parsers/icalparser.h"
#include "services/standard/parsers/jsonparser.h" #include "src/parsers/jsonparser.h"
#include "services/standard/parsers/rdfparser.h" #include "src/parsers/rdfparser.h"
#include "services/standard/parsers/rssparser.h" #include "src/parsers/rssparser.h"
#include "services/standard/parsers/sitemapparser.h" #include "src/parsers/sitemapparser.h"
#if defined(ENABLE_COMPRESSED_SITEMAP) #if defined(ENABLE_COMPRESSED_SITEMAP)
#include "3rd-party/qcompressor/qcompressor.h" #include "3rd-party/qcompressor/qcompressor.h"

View File

@ -1,16 +1,16 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/standardfeedsimportexportmodel.h" #include "src/standardfeedsimportexportmodel.h"
#include "3rd-party/boolinq/boolinq.h" #include "3rd-party/boolinq/boolinq.h"
#include "definitions/definitions.h" #include "definitions/definitions.h"
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h" #include "miscellaneous/iconfactory.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
#include "services/standard/standardcategory.h" #include "src/standardcategory.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include "services/standard/standardserviceroot.h" #include "src/standardserviceroot.h"
#include <QDomAttr> #include <QDomAttr>
#include <QDomDocument> #include <QDomDocument>

View File

@ -1,12 +1,14 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/standardserviceentrypoint.h" #include "src/standardserviceentrypoint.h"
#include "database/databasequeries.h" #include "database/databasequeries.h"
#include "definitions/definitions.h" #include "definitions/definitions.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
#include "services/standard/gui/formeditstandardaccount.h" #include "src/gui/formeditstandardaccount.h"
#include "services/standard/standardserviceroot.h" #include "src/standardserviceroot.h"
StandardServiceEntryPoint::StandardServiceEntryPoint(QObject* parent) : QObject(parent) {}
QString StandardServiceEntryPoint::name() const { QString StandardServiceEntryPoint::name() const {
return QSL("RSS/RDF/ATOM/JSON"); return QSL("RSS/RDF/ATOM/JSON");

View File

@ -5,8 +5,14 @@
#include "services/abstract/serviceentrypoint.h" #include "services/abstract/serviceentrypoint.h"
class StandardServiceEntryPoint : public ServiceEntryPoint { class RSSGUARD_DLLSPEC_EXPORT StandardServiceEntryPoint : public QObject, public ServiceEntryPoint {
Q_OBJECT
Q_PLUGIN_METADATA(IID "io.github.martinrotter.rssguard.standard" FILE "plugin.json")
Q_INTERFACES(ServiceEntryPoint)
public: public:
explicit StandardServiceEntryPoint(QObject* parent = nullptr);
virtual QString name() const; virtual QString name() const;
virtual QString description() const; virtual QString description() const;
virtual QString author() const; virtual QString author() const;

View File

@ -1,6 +1,6 @@
// For license of this file, see <project-root-folder>/LICENSE.md. // For license of this file, see <project-root-folder>/LICENSE.md.
#include "services/standard/standardserviceroot.h" #include "src/standardserviceroot.h"
#include "database/databasequeries.h" #include "database/databasequeries.h"
#include "definitions/definitions.h" #include "definitions/definitions.h"
@ -15,21 +15,21 @@
#include "network-web/networkfactory.h" #include "network-web/networkfactory.h"
#include "services/abstract/gui/formcategorydetails.h" #include "services/abstract/gui/formcategorydetails.h"
#include "services/standard/definitions.h" #include "src/definitions.h"
#include "services/standard/gui/formdiscoverfeeds.h" #include "src/gui/formdiscoverfeeds.h"
#include "services/standard/gui/formeditstandardaccount.h" #include "src/gui/formeditstandardaccount.h"
#include "services/standard/gui/formstandardfeeddetails.h" #include "src/gui/formstandardfeeddetails.h"
#include "services/standard/gui/formstandardimportexport.h" #include "src/gui/formstandardimportexport.h"
#include "services/standard/parsers/atomparser.h" #include "src/parsers/atomparser.h"
#include "services/standard/parsers/icalparser.h" #include "src/parsers/icalparser.h"
#include "services/standard/parsers/jsonparser.h" #include "src/parsers/jsonparser.h"
#include "services/standard/parsers/rdfparser.h" #include "src/parsers/rdfparser.h"
#include "services/standard/parsers/rssparser.h" #include "src/parsers/rssparser.h"
#include "services/standard/parsers/sitemapparser.h" #include "src/parsers/sitemapparser.h"
#include "services/standard/standardcategory.h" #include "src/standardcategory.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include "services/standard/standardfeedsimportexportmodel.h" #include "src/standardfeedsimportexportmodel.h"
#include "services/standard/standardserviceentrypoint.h" #include "src/standardserviceentrypoint.h"
#if defined(NO_LITE) #if defined(NO_LITE)
#include "gui/webviewers/webengine/webengineviewer.h" #include "gui/webviewers/webengine/webengineviewer.h"

View File

@ -5,7 +5,7 @@
#include "services/abstract/serviceroot.h" #include "services/abstract/serviceroot.h"
#include "services/standard/standardfeed.h" #include "src/standardfeed.h"
#include <QCoreApplication> #include <QCoreApplication>
#include <QPair> #include <QPair>

View File

@ -231,6 +231,8 @@ set(SOURCES
miscellaneous/notification.h miscellaneous/notification.h
miscellaneous/notificationfactory.cpp miscellaneous/notificationfactory.cpp
miscellaneous/notificationfactory.h miscellaneous/notificationfactory.h
miscellaneous/pluginfactory.cpp
miscellaneous/pluginfactory.h
miscellaneous/regexfactory.cpp miscellaneous/regexfactory.cpp
miscellaneous/regexfactory.h miscellaneous/regexfactory.h
miscellaneous/settings.cpp miscellaneous/settings.cpp
@ -399,43 +401,6 @@ set(SOURCES
services/reddit/redditserviceroot.h services/reddit/redditserviceroot.h
services/reddit/redditsubscription.cpp services/reddit/redditsubscription.cpp
services/reddit/redditsubscription.h services/reddit/redditsubscription.h
services/standard/definitions.h
services/standard/gui/formdiscoverfeeds.cpp
services/standard/gui/formdiscoverfeeds.h
services/standard/gui/formeditstandardaccount.cpp
services/standard/gui/formeditstandardaccount.h
services/standard/gui/formstandardfeeddetails.cpp
services/standard/gui/formstandardfeeddetails.h
services/standard/gui/formstandardimportexport.cpp
services/standard/gui/formstandardimportexport.h
services/standard/gui/standardaccountdetails.cpp
services/standard/gui/standardaccountdetails.h
services/standard/gui/standardfeeddetails.cpp
services/standard/gui/standardfeeddetails.h
services/standard/parsers/atomparser.cpp
services/standard/parsers/atomparser.h
services/standard/parsers/feedparser.cpp
services/standard/parsers/feedparser.h
services/standard/parsers/icalparser.cpp
services/standard/parsers/icalparser.h
services/standard/parsers/jsonparser.cpp
services/standard/parsers/jsonparser.h
services/standard/parsers/rdfparser.cpp
services/standard/parsers/rdfparser.h
services/standard/parsers/rssparser.cpp
services/standard/parsers/rssparser.h
services/standard/parsers/sitemapparser.cpp
services/standard/parsers/sitemapparser.h
services/standard/standardcategory.cpp
services/standard/standardcategory.h
services/standard/standardfeed.cpp
services/standard/standardfeed.h
services/standard/standardfeedsimportexportmodel.cpp
services/standard/standardfeedsimportexportmodel.h
services/standard/standardserviceentrypoint.cpp
services/standard/standardserviceentrypoint.h
services/standard/standardserviceroot.cpp
services/standard/standardserviceroot.h
services/tt-rss/definitions.h services/tt-rss/definitions.h
services/tt-rss/gui/formeditttrssaccount.cpp services/tt-rss/gui/formeditttrssaccount.cpp
services/tt-rss/gui/formeditttrssaccount.h services/tt-rss/gui/formeditttrssaccount.h
@ -508,10 +473,6 @@ set(UI_FILES
services/greader/gui/greaderfeeddetails.ui services/greader/gui/greaderfeeddetails.ui
services/owncloud/gui/owncloudaccountdetails.ui services/owncloud/gui/owncloudaccountdetails.ui
services/reddit/gui/redditaccountdetails.ui services/reddit/gui/redditaccountdetails.ui
services/standard/gui/formdiscoverfeeds.ui
services/standard/gui/formstandardimportexport.ui
services/standard/gui/standardaccountdetails.ui
services/standard/gui/standardfeeddetails.ui
services/tt-rss/gui/formttrssnote.ui services/tt-rss/gui/formttrssnote.ui
services/tt-rss/gui/ttrssaccountdetails.ui services/tt-rss/gui/ttrssaccountdetails.ui
services/tt-rss/gui/ttrssfeeddetails.ui services/tt-rss/gui/ttrssfeeddetails.ui

View File

@ -11,8 +11,8 @@
#include <QJSEngine> #include <QJSEngine>
// Class which represents one message filter. // Class which represents one message filter.
class MessageFilter : public QObject { class RSSGUARD_DLLSPEC MessageFilter : public QObject {
Q_OBJECT Q_OBJECT
public: public:
explicit MessageFilter(int id = -1, QObject* parent = nullptr); explicit MessageFilter(int id = -1, QObject* parent = nullptr);

View File

@ -8,15 +8,22 @@
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlQuery> #include <QSqlQuery>
class DatabaseDriver : public QObject { class RSSGUARD_DLLSPEC DatabaseDriver : public QObject {
Q_OBJECT Q_OBJECT
public: public:
// Describes available types of database backend. // Describes available types of database backend.
enum class DriverType { SQLite, MySQL }; enum class DriverType {
SQLite,
MySQL
};
// Describes what type of database user wants. // Describes what type of database user wants.
enum class DesiredStorageType { StrictlyFileBased, StrictlyInMemory, FromSettings }; enum class DesiredStorageType {
StrictlyFileBased,
StrictlyInMemory,
FromSettings
};
explicit DatabaseDriver(QObject* parent = nullptr); explicit DatabaseDriver(QObject* parent = nullptr);

View File

@ -9,8 +9,8 @@
#include <QSqlDatabase> #include <QSqlDatabase>
class DatabaseFactory : public QObject { class RSSGUARD_DLLSPEC DatabaseFactory : public QObject {
Q_OBJECT Q_OBJECT
public: public:
explicit DatabaseFactory(QObject* parent = nullptr); explicit DatabaseFactory(QObject* parent = nullptr);

View File

@ -21,7 +21,7 @@
#include <QSqlError> #include <QSqlError>
#include <QSqlQuery> #include <QSqlQuery>
class DatabaseQueries { class RSSGUARD_DLLSPEC DatabaseQueries {
public: public:
static QMap<int, QString> messageTableAttributes(bool only_msg_table, bool is_sqlite); static QMap<int, QString> messageTableAttributes(bool only_msg_table, bool is_sqlite);

View File

@ -5,7 +5,7 @@
#include <QString> #include <QString>
class ApplicationException { class RSSGUARD_DLLSPEC ApplicationException {
public: public:
explicit ApplicationException(QString message = {}); explicit ApplicationException(QString message = {});
virtual ~ApplicationException(); virtual ~ApplicationException();

View File

@ -6,7 +6,7 @@
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
#include "services/abstract/feed.h" #include "services/abstract/feed.h"
class FeedFetchException : public ApplicationException { class RSSGUARD_DLLSPEC FeedFetchException : public ApplicationException {
public: public:
explicit FeedFetchException(Feed::Status feed_status, const QString& message = {}); explicit FeedFetchException(Feed::Status feed_status, const QString& message = {});

View File

@ -7,7 +7,7 @@
#include <QVariant> #include <QVariant>
class FeedRecognizedButFailedException : public ApplicationException { class RSSGUARD_DLLSPEC FeedRecognizedButFailedException : public ApplicationException {
public: public:
explicit FeedRecognizedButFailedException(const QString& message = {}, const QVariant& arbitrary_data = {}); explicit FeedRecognizedButFailedException(const QString& message = {}, const QVariant& arbitrary_data = {});

View File

@ -7,7 +7,7 @@
#include <QJSValue> #include <QJSValue>
class FilteringException : public ApplicationException { class RSSGUARD_DLLSPEC FilteringException : public ApplicationException {
public: public:
explicit FilteringException(QJSValue::ErrorType js_error, QString message = QString()); explicit FilteringException(QJSValue::ErrorType js_error, QString message = QString());

View File

@ -5,7 +5,7 @@
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"
class IOException : public ApplicationException { class RSSGUARD_DLLSPEC IOException : public ApplicationException {
public: public:
explicit IOException(const QString& message = QString()); explicit IOException(const QString& message = QString());
}; };

View File

@ -7,7 +7,7 @@
#include <QNetworkReply> #include <QNetworkReply>
class NetworkException : public ApplicationException { class RSSGUARD_DLLSPEC NetworkException : public ApplicationException {
public: public:
explicit NetworkException(QNetworkReply::NetworkError error, const QString& message = QString()); explicit NetworkException(QNetworkReply::NetworkError error, const QString& message = QString());

View File

@ -7,10 +7,12 @@
#include <QProcess> #include <QProcess>
class ProcessException : public ApplicationException { class RSSGUARD_DLLSPEC ProcessException : public ApplicationException {
public: public:
ProcessException(int exit_code, QProcess::ExitStatus exit_status, ProcessException(int exit_code,
QProcess::ProcessError error, const QString& message = QString()); QProcess::ExitStatus exit_status,
QProcess::ProcessError error,
const QString& message = QString());
QProcess::ExitStatus exitStatus() const; QProcess::ExitStatus exitStatus() const;
int exitCode() const; int exitCode() const;

View File

@ -7,7 +7,7 @@
#include <QCoreApplication> #include <QCoreApplication>
class ScriptException : public ApplicationException { class RSSGUARD_DLLSPEC ScriptException : public ApplicationException {
Q_DECLARE_TR_FUNCTIONS(ScriptException) Q_DECLARE_TR_FUNCTIONS(ScriptException)
public: public:

View File

@ -17,6 +17,10 @@
#include <QPlainTextEdit> #include <QPlainTextEdit>
#include <QTextStream> #include <QTextStream>
#if defined(NO_LITE)
#include <QWebEngineProfile>
#endif
FormAbout::FormAbout(bool go_to_changelog, QWidget* parent) : QDialog(parent) { FormAbout::FormAbout(bool go_to_changelog, QWidget* parent) : QDialog(parent) {
m_ui.setupUi(this); m_ui.setupUi(this);
m_ui.m_lblIcon->setPixmap(QPixmap(APP_ICON_PATH)); m_ui.m_lblIcon->setPixmap(QPixmap(APP_ICON_PATH));

View File

@ -7,7 +7,7 @@
#include <QLabel> #include <QLabel>
#include <QWidget> #include <QWidget>
class GuiUtilities { class RSSGUARD_DLLSPEC GuiUtilities {
public: public:
static void setLabelAsNotice(QLabel& label, bool is_warning, bool set_margins = true); static void setLabelAsNotice(QLabel& label, bool is_warning, bool set_margins = true);
static void applyDialogProperties(QWidget& widget, const QIcon& icon = QIcon(), const QString& title = QString()); static void applyDialogProperties(QWidget& widget, const QIcon& icon = QIcon(), const QString& title = QString());

View File

@ -8,11 +8,10 @@
#include <functional> #include <functional>
class MsgBox : public QMessageBox { class RSSGUARD_DLLSPEC MsgBox : public QMessageBox {
Q_OBJECT Q_OBJECT
public: public:
// Constructors and destructors. // Constructors and destructors.
explicit MsgBox(QWidget* parent = nullptr); explicit MsgBox(QWidget* parent = nullptr);

View File

@ -5,7 +5,9 @@
#include "miscellaneous/iconfactory.h" #include "miscellaneous/iconfactory.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include <QAbstractButton>
#include <QCloseEvent> #include <QCloseEvent>
#include <QLabel>
#include <QTimerEvent> #include <QTimerEvent>
#include <chrono> #include <chrono>

View File

@ -12,7 +12,7 @@ class QParallelAnimationGroup;
class QScrollArea; class QScrollArea;
class PlainToolButton; class PlainToolButton;
class HelpSpoiler : public QWidget { class RSSGUARD_DLLSPEC HelpSpoiler : public QWidget {
Q_OBJECT Q_OBJECT
public: public:

View File

@ -7,8 +7,8 @@
#include <QLabel> #include <QLabel>
class LabelWithStatus : public WidgetWithStatus { class RSSGUARD_DLLSPEC LabelWithStatus : public WidgetWithStatus {
Q_OBJECT Q_OBJECT
public: public:
explicit LabelWithStatus(QWidget* parent = nullptr); explicit LabelWithStatus(QWidget* parent = nullptr);

View File

@ -9,8 +9,8 @@
#include <QPlainTextEdit> #include <QPlainTextEdit>
class LineEditWithStatus : public WidgetWithStatus { class RSSGUARD_DLLSPEC LineEditWithStatus : public WidgetWithStatus {
Q_OBJECT Q_OBJECT
public: public:
explicit LineEditWithStatus(QWidget* parent = nullptr); explicit LineEditWithStatus(QWidget* parent = nullptr);
@ -23,8 +23,8 @@ inline BaseLineEdit* LineEditWithStatus::lineEdit() const {
return static_cast<BaseLineEdit*>(m_wdgInput); return static_cast<BaseLineEdit*>(m_wdgInput);
} }
class TextEditWithStatus : public WidgetWithStatus { class RSSGUARD_DLLSPEC TextEditWithStatus : public WidgetWithStatus {
Q_OBJECT Q_OBJECT
public: public:
explicit TextEditWithStatus(QWidget* parent = nullptr); explicit TextEditWithStatus(QWidget* parent = nullptr);

View File

@ -9,8 +9,8 @@
class PlainToolButton; class PlainToolButton;
class QHBoxLayout; class QHBoxLayout;
class WidgetWithStatus : public QWidget { class RSSGUARD_DLLSPEC WidgetWithStatus : public QWidget {
Q_OBJECT Q_OBJECT
public: public:
enum class StatusType { enum class StatusType {

View File

@ -17,6 +17,7 @@
#include "network-web/webfactory.h" #include "network-web/webfactory.h"
#include <QKeyEvent> #include <QKeyEvent>
#include <QProgressBar>
#include <QScrollBar> #include <QScrollBar>
#include <QTimer> #include <QTimer>
#include <QToolBar> #include <QToolBar>

View File

@ -21,7 +21,7 @@ class Downloader;
class TextBrowserViewer; class TextBrowserViewer;
class TextBrowserDocument : public QTextDocument { class RSSGUARD_DLLSPEC TextBrowserDocument : public QTextDocument {
Q_OBJECT Q_OBJECT
public: public:
@ -34,7 +34,7 @@ class TextBrowserDocument : public QTextDocument {
QPointer<TextBrowserViewer> m_viewer; QPointer<TextBrowserViewer> m_viewer;
}; };
class TextBrowserViewer : public QTextBrowser, public WebViewer { class RSSGUARD_DLLSPEC TextBrowserViewer : public QTextBrowser, public WebViewer {
Q_OBJECT Q_OBJECT
Q_INTERFACES(WebViewer) Q_INTERFACES(WebViewer)

View File

@ -26,6 +26,9 @@
#include <QWebEngineContextMenuData> #include <QWebEngineContextMenuData>
#endif #endif
#include <QWebEngineProfile>
#include <QWebEngineSettings>
WebEngineViewer::WebEngineViewer(QWidget* parent) : QWebEngineView(parent), m_browser(nullptr), m_root(nullptr) { WebEngineViewer::WebEngineViewer(QWidget* parent) : QWebEngineView(parent), m_browser(nullptr), m_root(nullptr) {
WebEnginePage* page = new WebEnginePage(this); WebEnginePage* page = new WebEnginePage(this);

View File

@ -14,7 +14,7 @@
class RootItem; class RootItem;
class WebBrowser; class WebBrowser;
class WebEngineViewer : public QWebEngineView, public WebViewer { class RSSGUARD_DLLSPEC WebEngineViewer : public QWebEngineView, public WebViewer {
Q_OBJECT Q_OBJECT
Q_INTERFACES(WebViewer) Q_INTERFACES(WebViewer)

View File

@ -62,6 +62,9 @@
#else #else
#include <QWebEngineDownloadItem> #include <QWebEngineDownloadItem>
#endif #endif
#include <QWebEngineProfile>
#include <QWebEngineSettings>
#endif #endif
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)

View File

@ -12,6 +12,7 @@
#include "gui/dialogs/formmessagefiltersmanager.h" #include "gui/dialogs/formmessagefiltersmanager.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
#include "miscellaneous/mutex.h" #include "miscellaneous/mutex.h"
#include "miscellaneous/pluginfactory.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "services/abstract/cacheforserviceroot.h" #include "services/abstract/cacheforserviceroot.h"
#include "services/abstract/serviceroot.h" #include "services/abstract/serviceroot.h"
@ -20,7 +21,6 @@
#include "services/greader/greaderentrypoint.h" #include "services/greader/greaderentrypoint.h"
#include "services/owncloud/owncloudserviceentrypoint.h" #include "services/owncloud/owncloudserviceentrypoint.h"
#include "services/reddit/redditentrypoint.h" #include "services/reddit/redditentrypoint.h"
#include "services/standard/standardserviceentrypoint.h"
#include "services/tt-rss/ttrssserviceentrypoint.h" #include "services/tt-rss/ttrssserviceentrypoint.h"
#include <QThread> #include <QThread>
@ -68,8 +68,12 @@ QList<ServiceEntryPoint*> FeedReader::feedServices() {
m_feedServices.append(new RedditEntryPoint()); m_feedServices.append(new RedditEntryPoint());
#endif #endif
m_feedServices.append(new StandardServiceEntryPoint());
m_feedServices.append(new TtRssServiceEntryPoint()); m_feedServices.append(new TtRssServiceEntryPoint());
PluginFactory plugin_loader;
// Add dynamically loaded plugins.
m_feedServices.append(plugin_loader.loadPlugins());
} }
return m_feedServices; return m_feedServices;

View File

@ -10,7 +10,7 @@
#include <QProcessEnvironment> #include <QProcessEnvironment>
#include <QStandardPaths> #include <QStandardPaths>
class IOFactory { class RSSGUARD_DLLSPEC IOFactory {
Q_DECLARE_TR_FUNCTIONS(IOFactory) Q_DECLARE_TR_FUNCTIONS(IOFactory)
private: private:

View File

@ -6,8 +6,8 @@
#include <QMutex> #include <QMutex>
#include <QObject> #include <QObject>
class Mutex : public QObject { class RSSGUARD_DLLSPEC Mutex : public QObject {
Q_OBJECT Q_OBJECT
public: public:
explicit Mutex(QObject* parent = nullptr); explicit Mutex(QObject* parent = nullptr);
@ -20,14 +20,13 @@ class Mutex : public QObject {
// Identifies if mutes is locked or not. // Identifies if mutes is locked or not.
bool isLocked() const; bool isLocked() const;
operator QMutex* () const; operator QMutex*() const;
public slots: public slots:
void lock(); void lock();
void unlock(); void unlock();
protected: protected:
// These methods set proper value for m_isLocked and emit signals. // These methods set proper value for m_isLocked and emit signals.
void setLocked(); void setLocked();
void setUnlocked(); void setUnlocked();

View File

@ -0,0 +1,88 @@
// For license of this file, see <project-root-folder>/LICENSE.md.
#include "miscellaneous/pluginfactory.h"
#include "definitions/definitions.h"
#include "services/abstract/serviceentrypoint.h"
#include <QCoreApplication>
#include <QDir>
#include <QDirIterator>
#include <QPluginLoader>
PluginFactory::PluginFactory() {}
QList<ServiceEntryPoint*> PluginFactory::loadPlugins() const {
QList<ServiceEntryPoint*> plugins;
const QString plugin_name_wildcard = pluginNameWildCard() + pluginSuffix();
const auto plugins_paths = pluginPaths();
const auto backup_current_dir = QDir::currentPath();
for (const QString& plugin_folder : plugins_paths) {
QDirIterator dir_iter(plugin_folder,
{plugin_name_wildcard},
QDir::Filter::Files,
QDirIterator::IteratorFlag::Subdirectories);
while (dir_iter.hasNext()) {
dir_iter.next();
const QFileInfo& plugin_file = dir_iter.fileInfo();
qApp->addLibraryPath(plugin_file.absolutePath());
QDir::setCurrent(plugin_file.absolutePath());
qDebugNN << LOGSEC_CORE << "Loading plugin"
<< QUOTE_W_SPACE_DOT(QDir::toNativeSeparators(plugin_file.absoluteFilePath()));
QPluginLoader loader(plugin_file.absoluteFilePath());
ServiceEntryPoint* plugin_instance = qobject_cast<ServiceEntryPoint*>(loader.instance());
if (plugin_instance == nullptr) {
qCriticalNN << LOGSEC_CORE
<< "The plugin was not loaded successfully:" << QUOTE_W_SPACE_DOT(loader.errorString());
}
else {
qDebugNN << LOGSEC_CORE << "Plugin" << QUOTE_W_SPACE(plugin_instance->code()) << "loaded.";
plugins.append(plugin_instance);
}
}
}
QDir::setCurrent(backup_current_dir);
return plugins;
}
QStringList PluginFactory::pluginPaths() const {
QStringList paths;
#if defined(Q_OS_LINUX)
paths << QCoreApplication::applicationDirPath() + QDir::separator() + QL1S("..") + QDir::separator() + QL1S("lib") +
QDir::separator() + QL1S(APP_LOW_NAME) + QDir::separator() + QL1S("plugins");
#else
paths << QCoreApplication::applicationDirPath() + QDir::separator() + QL1S("plugins");
#endif
#if !defined(NDEBUG)
paths << QCoreApplication::applicationDirPath() + QDir::separator() + QL1S("..") + QDir::separator();
#endif
return paths;
}
QString PluginFactory::pluginSuffix() const {
#if defined(Q_OS_LINUX)
return QSL(".so");
#elif defined(Q_OS_WIN)
return QSL(".dll");
#elif defined(Q_OS_MACOS)
return QSL(".dylib");
#else
return QSL("");
#endif
}
QString PluginFactory::pluginNameWildCard() const {
return QSL("*rssguard-*");
}

View File

@ -0,0 +1,22 @@
// For license of this file, see <project-root-folder>/LICENSE.md.
#ifndef PLUGINFACTORY_H
#define PLUGINFACTORY_H
#include <QStringList>
class ServiceEntryPoint;
class PluginFactory {
public:
explicit PluginFactory();
QList<ServiceEntryPoint*> loadPlugins() const;
private:
QStringList pluginPaths() const;
QString pluginSuffix() const;
QString pluginNameWildCard() const;
};
#endif // PLUGINFACTORY_H

View File

@ -19,15 +19,18 @@
#include <QStringList> #include <QStringList>
#include <QWriteLocker> #include <QWriteLocker>
#define KEY extern const QString #define KEY RSSGUARD_DLLSPEC extern const QString
#define DKEY const QString #define DKEY const QString
#define VALUE(x) extern const x
#define NON_CONST_VALUE(x) extern x #define VALUE(x) RSSGUARD_DLLSPEC extern const x
#define NON_CONST_VALUE(x) extern x
#define DVALUE(x) const x #define DVALUE(x) const x
#define NON_CONST_DVALUE(x) x #define NON_CONST_DVALUE(x) x
#define SETTING(x) x, x##Def
#define DEFAULT_VALUE(x) x##Def #define SETTING(x) x, x##Def
#define GROUP(x) x::ID #define DEFAULT_VALUE(x) x##Def
#define GROUP(x) x::ID
#if defined(NO_LITE) #if defined(NO_LITE)
namespace WebEngineAttributes { namespace WebEngineAttributes {

View File

@ -15,6 +15,7 @@
#include <QMetaEnum> #include <QMetaEnum>
#include <QMetaObject> #include <QMetaObject>
#include <QProcessEnvironment> #include <QProcessEnvironment>
#include <QStyle>
#include <QStyleFactory> #include <QStyleFactory>
#include <QStyleHints> #include <QStyleHints>
#include <QTextDocument> #include <QTextDocument>

View File

@ -13,17 +13,15 @@
#include <QPair> #include <QPair>
#include <QRegularExpression> #include <QRegularExpression>
class UpdateUrl { class RSSGUARD_DLLSPEC UpdateUrl {
public: public:
QString m_fileUrl; QString m_fileUrl;
QString m_name; QString m_name;
QString m_size; QString m_size;
}; };
class UpdateInfo { class RSSGUARD_DLLSPEC UpdateInfo {
public: public:
QString m_availableVersion; QString m_availableVersion;
QString m_changes; QString m_changes;
QDateTime m_date; QDateTime m_date;
@ -32,11 +30,10 @@ class UpdateInfo {
Q_DECLARE_METATYPE(UpdateInfo) Q_DECLARE_METATYPE(UpdateInfo)
class SystemFactory : public QObject { class RSSGUARD_DLLSPEC SystemFactory : public QObject {
Q_OBJECT Q_OBJECT
public: public:
// Specifies possible states of auto-start functionality. // Specifies possible states of auto-start functionality.
enum class AutoStartStatus { enum class AutoStartStatus {
Enabled, Enabled,
@ -81,7 +78,6 @@ class SystemFactory : public QObject {
void updatesChecked(QPair<QList<UpdateInfo>, QNetworkReply::NetworkError> updates) const; void updatesChecked(QPair<QList<UpdateInfo>, QNetworkReply::NetworkError> updates) const;
private: private:
// Performs parsing of downloaded file with list of updates. // Performs parsing of downloaded file with list of updates.
QList<UpdateInfo> parseUpdatesFile(const QByteArray& updates_file) const; QList<UpdateInfo> parseUpdatesFile(const QByteArray& updates_file) const;
}; };

View File

@ -8,7 +8,7 @@
#include <QDateTime> #include <QDateTime>
#include <QFontMetrics> #include <QFontMetrics>
class TextFactory { class RSSGUARD_DLLSPEC TextFactory {
private: private:
// Constructors and destructors. // Constructors and destructors.
TextFactory(); TextFactory();

View File

@ -10,6 +10,11 @@
#include <QNetworkReply> #include <QNetworkReply>
#include <QNetworkRequest> #include <QNetworkRequest>
#if defined(NO_LITE)
#include <QWebEngineProfile>
#include <QWebEngineSettings>
#endif
BaseNetworkAccessManager::BaseNetworkAccessManager(QObject* parent) BaseNetworkAccessManager::BaseNetworkAccessManager(QObject* parent)
: QNetworkAccessManager(parent), m_enableHttp2(false) { : QNetworkAccessManager(parent), m_enableHttp2(false) {
connect(this, &BaseNetworkAccessManager::sslErrors, this, &BaseNetworkAccessManager::onSslErrors); connect(this, &BaseNetworkAccessManager::sslErrors, this, &BaseNetworkAccessManager::onSslErrors);

View File

@ -14,6 +14,7 @@
#if defined(NO_LITE) #if defined(NO_LITE)
#include <QWebEngineCookieStore> #include <QWebEngineCookieStore>
#include <QWebEngineProfile>
#endif #endif
CookieJar::CookieJar(QObject* parent) CookieJar::CookieJar(QObject* parent)

View File

@ -2,6 +2,9 @@
#include "network-web/downloadmanager.h" #include "network-web/downloadmanager.h"
#include "ui_downloaditem.h"
#include "ui_downloadmanager.h"
#include "gui/dialogs/formmain.h" #include "gui/dialogs/formmain.h"
#include "gui/messagebox.h" #include "gui/messagebox.h"
#include "gui/tabwidget.h" #include "gui/tabwidget.h"

View File

@ -3,11 +3,9 @@
#ifndef DOWNLOADMANAGER_H #ifndef DOWNLOADMANAGER_H
#define DOWNLOADMANAGER_H #define DOWNLOADMANAGER_H
#include "ui_downloaditem.h"
#include "ui_downloadmanager.h"
#include "gui/tabcontent.h" #include "gui/tabcontent.h"
#include <QAbstractListModel>
#include <QDateTime> #include <QDateTime>
#include <QElapsedTimer> #include <QElapsedTimer>
#include <QFile> #include <QFile>
@ -18,16 +16,24 @@ class DownloadModel;
class QFileIconProvider; class QFileIconProvider;
class QMimeData; class QMimeData;
class DownloadItem : public QWidget { namespace Ui {
Q_OBJECT class DownloadItem;
}
friend class DownloadManager; namespace Ui {
friend class DownloadModel; class DownloadManager;
}
class DownloadItem : public QWidget {
Q_OBJECT
friend class DownloadManager;
friend class DownloadModel;
public: public:
explicit DownloadItem(QNetworkReply* reply = nullptr, explicit DownloadItem(QNetworkReply* reply = nullptr,
const QString& preferred_file_name = {}, const QString& preferred_file_name = {},
const std::function<void (DownloadItem*)>& run_on_finish = {}, const std::function<void(DownloadItem*)>& run_on_finish = {},
QWidget* parent = nullptr); QWidget* parent = nullptr);
virtual ~DownloadItem(); virtual ~DownloadItem();
@ -69,7 +75,7 @@ class DownloadItem : public QWidget {
QFile m_output; QFile m_output;
QNetworkReply* m_reply; QNetworkReply* m_reply;
QString m_preferredFileName; QString m_preferredFileName;
std::function<void (DownloadItem*)> m_runOnFinish; std::function<void(DownloadItem*)> m_runOnFinish;
qint64 m_bytesReceived; qint64 m_bytesReceived;
QElapsedTimer m_downloadTime; QElapsedTimer m_downloadTime;
QTime m_lastProgressTime; QTime m_lastProgressTime;
@ -84,10 +90,10 @@ class WebBrowser;
class SilentNetworkAccessManager; class SilentNetworkAccessManager;
class DownloadManager : public TabContent { class DownloadManager : public TabContent {
Q_OBJECT Q_OBJECT
Q_PROPERTY(RemovePolicy removePolicy READ removePolicy WRITE setRemovePolicy NOTIFY removePolicyChanged) Q_PROPERTY(RemovePolicy removePolicy READ removePolicy WRITE setRemovePolicy NOTIFY removePolicyChanged)
friend class DownloadModel; friend class DownloadModel;
public: public:
enum class RemovePolicy { enum class RemovePolicy {
@ -142,7 +148,7 @@ class DownloadManager : public TabContent {
private: private:
void handleUnsupportedContent(QNetworkReply* reply, void handleUnsupportedContent(QNetworkReply* reply,
const QString& preferred_file_name, const QString& preferred_file_name,
const std::function<void (DownloadItem*)>& run_on_finish); const std::function<void(DownloadItem*)>& run_on_finish);
void addItem(DownloadItem* item); void addItem(DownloadItem* item);
QScopedPointer<Ui::DownloadManager> m_ui; QScopedPointer<Ui::DownloadManager> m_ui;
@ -160,9 +166,9 @@ inline WebBrowser* DownloadManager::webBrowser() const {
} }
class DownloadModel : public QAbstractListModel { class DownloadModel : public QAbstractListModel {
Q_OBJECT Q_OBJECT
friend class DownloadManager; friend class DownloadManager;
public: public:
explicit DownloadModel(DownloadManager* download_manager, QObject* parent = nullptr); explicit DownloadModel(DownloadManager* download_manager, QObject* parent = nullptr);

View File

@ -16,7 +16,7 @@
#include <QPair> #include <QPair>
#include <QVariant> #include <QVariant>
struct NetworkResult { struct RSSGUARD_DLLSPEC NetworkResult {
QNetworkReply::NetworkError m_networkError; QNetworkReply::NetworkError m_networkError;
int m_httpCode; int m_httpCode;
QString m_contentType; QString m_contentType;
@ -32,7 +32,7 @@ struct NetworkResult {
class Downloader; class Downloader;
class NetworkFactory { class RSSGUARD_DLLSPEC NetworkFactory {
Q_DECLARE_TR_FUNCTIONS(NetworkFactory) Q_DECLARE_TR_FUNCTIONS(NetworkFactory)
private: private:

View File

@ -23,9 +23,11 @@
#else #else
#include <QWebEngineDownloadItem> #include <QWebEngineDownloadItem>
#endif #endif
#include <QWebEngineProfile> #include <QWebEngineProfile>
#include <QWebEngineScript> #include <QWebEngineScript>
#include <QWebEngineScriptCollection> #include <QWebEngineScriptCollection>
#include <QWebEngineSettings>
#include <QWebEngineUrlScheme> #include <QWebEngineUrlScheme>
#endif #endif
@ -179,9 +181,7 @@ QString WebFactory::unescapeHtml(const QString& html) {
return html; return html;
} }
if (m_htmlNamedEntities.isEmpty()) { static QMap<QString, char16_t> entities = generateUnescapes();
generateUnescapes();
}
QString output; QString output;
output.reserve(html.size()); output.reserve(html.size());
@ -236,9 +236,9 @@ QString WebFactory::unescapeHtml(const QString& html) {
// We have named entity. // We have named entity.
auto entity_name = html.mid(pos + 1, pos_end - pos - 1); auto entity_name = html.mid(pos + 1, pos_end - pos - 1);
if (m_htmlNamedEntities.contains(entity_name)) { if (entities.contains(entity_name)) {
// Entity found, proceed. // Entity found, proceed.
output.append(m_htmlNamedEntities.value(entity_name)); output.append(entities.value(entity_name));
} }
else { else {
// Entity NOT found, leave intact. // Entity NOT found, leave intact.
@ -539,7 +539,10 @@ void WebFactory::webEngineSettingChanged(bool enabled) {
m_engineProfile->settings()->setAttribute(attribute, act->isChecked()); m_engineProfile->settings()->setAttribute(attribute, act->isChecked());
} }
QAction* WebFactory::createEngineSettingsAction(const QString& title, QWebEngineSettings::WebAttribute attribute) { QAction* WebFactory::createEngineSettingsAction(const QString& title, int web_attribute) {
// TODO: ověřit že cast je funkční
QWebEngineSettings::WebAttribute attribute = QWebEngineSettings::WebAttribute(web_attribute);
auto* act = new QAction(title, m_engineSettings->menu()); auto* act = new QAction(title, m_engineSettings->menu());
act->setData(attribute); act->setData(attribute);
@ -581,265 +584,268 @@ void WebFactory::stopApiServer() {
} }
} }
void WebFactory::generateUnescapes() { QMap<QString, char16_t> WebFactory::generateUnescapes() {
m_htmlNamedEntities[QSL("AElig")] = 0x00c6; QMap<QString, char16_t> res;
m_htmlNamedEntities[QSL("AMP")] = 38; res[QSL("AElig")] = 0x00c6;
m_htmlNamedEntities[QSL("Aacute")] = 0x00c1; res[QSL("AMP")] = 38;
m_htmlNamedEntities[QSL("Acirc")] = 0x00c2; res[QSL("Aacute")] = 0x00c1;
m_htmlNamedEntities[QSL("Agrave")] = 0x00c0; res[QSL("Acirc")] = 0x00c2;
m_htmlNamedEntities[QSL("Alpha")] = 0x0391; res[QSL("Agrave")] = 0x00c0;
m_htmlNamedEntities[QSL("Aring")] = 0x00c5; res[QSL("Alpha")] = 0x0391;
m_htmlNamedEntities[QSL("Atilde")] = 0x00c3; res[QSL("Aring")] = 0x00c5;
m_htmlNamedEntities[QSL("Auml")] = 0x00c4; res[QSL("Atilde")] = 0x00c3;
m_htmlNamedEntities[QSL("Beta")] = 0x0392; res[QSL("Auml")] = 0x00c4;
m_htmlNamedEntities[QSL("Ccedil")] = 0x00c7; res[QSL("Beta")] = 0x0392;
m_htmlNamedEntities[QSL("Chi")] = 0x03a7; res[QSL("Ccedil")] = 0x00c7;
m_htmlNamedEntities[QSL("Dagger")] = 0x2021; res[QSL("Chi")] = 0x03a7;
m_htmlNamedEntities[QSL("Delta")] = 0x0394; res[QSL("Dagger")] = 0x2021;
m_htmlNamedEntities[QSL("ETH")] = 0x00d0; res[QSL("Delta")] = 0x0394;
m_htmlNamedEntities[QSL("Eacute")] = 0x00c9; res[QSL("ETH")] = 0x00d0;
m_htmlNamedEntities[QSL("Ecirc")] = 0x00ca; res[QSL("Eacute")] = 0x00c9;
m_htmlNamedEntities[QSL("Egrave")] = 0x00c8; res[QSL("Ecirc")] = 0x00ca;
m_htmlNamedEntities[QSL("Epsilon")] = 0x0395; res[QSL("Egrave")] = 0x00c8;
m_htmlNamedEntities[QSL("Eta")] = 0x0397; res[QSL("Epsilon")] = 0x0395;
m_htmlNamedEntities[QSL("Euml")] = 0x00cb; res[QSL("Eta")] = 0x0397;
m_htmlNamedEntities[QSL("GT")] = 62; res[QSL("Euml")] = 0x00cb;
m_htmlNamedEntities[QSL("Gamma")] = 0x0393; res[QSL("GT")] = 62;
m_htmlNamedEntities[QSL("Iacute")] = 0x00cd; res[QSL("Gamma")] = 0x0393;
m_htmlNamedEntities[QSL("Icirc")] = 0x00ce; res[QSL("Iacute")] = 0x00cd;
m_htmlNamedEntities[QSL("Igrave")] = 0x00cc; res[QSL("Icirc")] = 0x00ce;
m_htmlNamedEntities[QSL("Iota")] = 0x0399; res[QSL("Igrave")] = 0x00cc;
m_htmlNamedEntities[QSL("Iuml")] = 0x00cf; res[QSL("Iota")] = 0x0399;
m_htmlNamedEntities[QSL("Kappa")] = 0x039a; res[QSL("Iuml")] = 0x00cf;
m_htmlNamedEntities[QSL("LT")] = 60; res[QSL("Kappa")] = 0x039a;
m_htmlNamedEntities[QSL("Lambda")] = 0x039b; res[QSL("LT")] = 60;
m_htmlNamedEntities[QSL("Mu")] = 0x039c; res[QSL("Lambda")] = 0x039b;
m_htmlNamedEntities[QSL("Ntilde")] = 0x00d1; res[QSL("Mu")] = 0x039c;
m_htmlNamedEntities[QSL("Nu")] = 0x039d; res[QSL("Ntilde")] = 0x00d1;
m_htmlNamedEntities[QSL("OElig")] = 0x0152; res[QSL("Nu")] = 0x039d;
m_htmlNamedEntities[QSL("Oacute")] = 0x00d3; res[QSL("OElig")] = 0x0152;
m_htmlNamedEntities[QSL("Ocirc")] = 0x00d4; res[QSL("Oacute")] = 0x00d3;
m_htmlNamedEntities[QSL("Ograve")] = 0x00d2; res[QSL("Ocirc")] = 0x00d4;
m_htmlNamedEntities[QSL("Omega")] = 0x03a9; res[QSL("Ograve")] = 0x00d2;
m_htmlNamedEntities[QSL("Omicron")] = 0x039f; res[QSL("Omega")] = 0x03a9;
m_htmlNamedEntities[QSL("Oslash")] = 0x00d8; res[QSL("Omicron")] = 0x039f;
m_htmlNamedEntities[QSL("Otilde")] = 0x00d5; res[QSL("Oslash")] = 0x00d8;
m_htmlNamedEntities[QSL("Ouml")] = 0x00d6; res[QSL("Otilde")] = 0x00d5;
m_htmlNamedEntities[QSL("Phi")] = 0x03a6; res[QSL("Ouml")] = 0x00d6;
m_htmlNamedEntities[QSL("Pi")] = 0x03a0; res[QSL("Phi")] = 0x03a6;
m_htmlNamedEntities[QSL("Prime")] = 0x2033; res[QSL("Pi")] = 0x03a0;
m_htmlNamedEntities[QSL("Psi")] = 0x03a8; res[QSL("Prime")] = 0x2033;
m_htmlNamedEntities[QSL("QUOT")] = 34; res[QSL("Psi")] = 0x03a8;
m_htmlNamedEntities[QSL("Rho")] = 0x03a1; res[QSL("QUOT")] = 34;
m_htmlNamedEntities[QSL("Scaron")] = 0x0160; res[QSL("Rho")] = 0x03a1;
m_htmlNamedEntities[QSL("Sigma")] = 0x03a3; res[QSL("Scaron")] = 0x0160;
m_htmlNamedEntities[QSL("THORN")] = 0x00de; res[QSL("Sigma")] = 0x03a3;
m_htmlNamedEntities[QSL("Tau")] = 0x03a4; res[QSL("THORN")] = 0x00de;
m_htmlNamedEntities[QSL("Theta")] = 0x0398; res[QSL("Tau")] = 0x03a4;
m_htmlNamedEntities[QSL("Uacute")] = 0x00da; res[QSL("Theta")] = 0x0398;
m_htmlNamedEntities[QSL("Ucirc")] = 0x00db; res[QSL("Uacute")] = 0x00da;
m_htmlNamedEntities[QSL("Ugrave")] = 0x00d9; res[QSL("Ucirc")] = 0x00db;
m_htmlNamedEntities[QSL("Upsilon")] = 0x03a5; res[QSL("Ugrave")] = 0x00d9;
m_htmlNamedEntities[QSL("Uuml")] = 0x00dc; res[QSL("Upsilon")] = 0x03a5;
m_htmlNamedEntities[QSL("Xi")] = 0x039e; res[QSL("Uuml")] = 0x00dc;
m_htmlNamedEntities[QSL("Yacute")] = 0x00dd; res[QSL("Xi")] = 0x039e;
m_htmlNamedEntities[QSL("Yuml")] = 0x0178; res[QSL("Yacute")] = 0x00dd;
m_htmlNamedEntities[QSL("Zeta")] = 0x0396; res[QSL("Yuml")] = 0x0178;
m_htmlNamedEntities[QSL("aacute")] = 0x00e1; res[QSL("Zeta")] = 0x0396;
m_htmlNamedEntities[QSL("acirc")] = 0x00e2; res[QSL("aacute")] = 0x00e1;
m_htmlNamedEntities[QSL("acute")] = 0x00b4; res[QSL("acirc")] = 0x00e2;
m_htmlNamedEntities[QSL("aelig")] = 0x00e6; res[QSL("acute")] = 0x00b4;
m_htmlNamedEntities[QSL("agrave")] = 0x00e0; res[QSL("aelig")] = 0x00e6;
m_htmlNamedEntities[QSL("alefsym")] = 0x2135; res[QSL("agrave")] = 0x00e0;
m_htmlNamedEntities[QSL("alpha")] = 0x03b1; res[QSL("alefsym")] = 0x2135;
m_htmlNamedEntities[QSL("amp")] = 38; res[QSL("alpha")] = 0x03b1;
m_htmlNamedEntities[QSL("and")] = 0x22a5; res[QSL("amp")] = 38;
m_htmlNamedEntities[QSL("ang")] = 0x2220; res[QSL("and")] = 0x22a5;
m_htmlNamedEntities[QSL("apos")] = 0x0027; res[QSL("ang")] = 0x2220;
m_htmlNamedEntities[QSL("aring")] = 0x00e5; res[QSL("apos")] = 0x0027;
m_htmlNamedEntities[QSL("asymp")] = 0x2248; res[QSL("aring")] = 0x00e5;
m_htmlNamedEntities[QSL("atilde")] = 0x00e3; res[QSL("asymp")] = 0x2248;
m_htmlNamedEntities[QSL("auml")] = 0x00e4; res[QSL("atilde")] = 0x00e3;
m_htmlNamedEntities[QSL("bdquo")] = 0x201e; res[QSL("auml")] = 0x00e4;
m_htmlNamedEntities[QSL("beta")] = 0x03b2; res[QSL("bdquo")] = 0x201e;
m_htmlNamedEntities[QSL("brvbar")] = 0x00a6; res[QSL("beta")] = 0x03b2;
m_htmlNamedEntities[QSL("bull")] = 0x2022; res[QSL("brvbar")] = 0x00a6;
m_htmlNamedEntities[QSL("cap")] = 0x2229; res[QSL("bull")] = 0x2022;
m_htmlNamedEntities[QSL("ccedil")] = 0x00e7; res[QSL("cap")] = 0x2229;
m_htmlNamedEntities[QSL("cedil")] = 0x00b8; res[QSL("ccedil")] = 0x00e7;
m_htmlNamedEntities[QSL("cent")] = 0x00a2; res[QSL("cedil")] = 0x00b8;
m_htmlNamedEntities[QSL("chi")] = 0x03c7; res[QSL("cent")] = 0x00a2;
m_htmlNamedEntities[QSL("circ")] = 0x02c6; res[QSL("chi")] = 0x03c7;
m_htmlNamedEntities[QSL("clubs")] = 0x2663; res[QSL("circ")] = 0x02c6;
m_htmlNamedEntities[QSL("cong")] = 0x2245; res[QSL("clubs")] = 0x2663;
m_htmlNamedEntities[QSL("copy")] = 0x00a9; res[QSL("cong")] = 0x2245;
m_htmlNamedEntities[QSL("crarr")] = 0x21b5; res[QSL("copy")] = 0x00a9;
m_htmlNamedEntities[QSL("cup")] = 0x222a; res[QSL("crarr")] = 0x21b5;
m_htmlNamedEntities[QSL("curren")] = 0x00a4; res[QSL("cup")] = 0x222a;
m_htmlNamedEntities[QSL("dArr")] = 0x21d3; res[QSL("curren")] = 0x00a4;
m_htmlNamedEntities[QSL("dagger")] = 0x2020; res[QSL("dArr")] = 0x21d3;
m_htmlNamedEntities[QSL("darr")] = 0x2193; res[QSL("dagger")] = 0x2020;
m_htmlNamedEntities[QSL("deg")] = 0x00b0; res[QSL("darr")] = 0x2193;
m_htmlNamedEntities[QSL("delta")] = 0x03b4; res[QSL("deg")] = 0x00b0;
m_htmlNamedEntities[QSL("diams")] = 0x2666; res[QSL("delta")] = 0x03b4;
m_htmlNamedEntities[QSL("divide")] = 0x00f7; res[QSL("diams")] = 0x2666;
m_htmlNamedEntities[QSL("eacute")] = 0x00e9; res[QSL("divide")] = 0x00f7;
m_htmlNamedEntities[QSL("ecirc")] = 0x00ea; res[QSL("eacute")] = 0x00e9;
m_htmlNamedEntities[QSL("egrave")] = 0x00e8; res[QSL("ecirc")] = 0x00ea;
m_htmlNamedEntities[QSL("empty")] = 0x2205; res[QSL("egrave")] = 0x00e8;
m_htmlNamedEntities[QSL("emsp")] = 0x2003; res[QSL("empty")] = 0x2205;
m_htmlNamedEntities[QSL("ensp")] = 0x2002; res[QSL("emsp")] = 0x2003;
m_htmlNamedEntities[QSL("epsilon")] = 0x03b5; res[QSL("ensp")] = 0x2002;
m_htmlNamedEntities[QSL("equiv")] = 0x2261; res[QSL("epsilon")] = 0x03b5;
m_htmlNamedEntities[QSL("eta")] = 0x03b7; res[QSL("equiv")] = 0x2261;
m_htmlNamedEntities[QSL("eth")] = 0x00f0; res[QSL("eta")] = 0x03b7;
m_htmlNamedEntities[QSL("euml")] = 0x00eb; res[QSL("eth")] = 0x00f0;
m_htmlNamedEntities[QSL("euro")] = 0x20ac; res[QSL("euml")] = 0x00eb;
m_htmlNamedEntities[QSL("exist")] = 0x2203; res[QSL("euro")] = 0x20ac;
m_htmlNamedEntities[QSL("fnof")] = 0x0192; res[QSL("exist")] = 0x2203;
m_htmlNamedEntities[QSL("forall")] = 0x2200; res[QSL("fnof")] = 0x0192;
m_htmlNamedEntities[QSL("frac12")] = 0x00bd; res[QSL("forall")] = 0x2200;
m_htmlNamedEntities[QSL("frac14")] = 0x00bc; res[QSL("frac12")] = 0x00bd;
m_htmlNamedEntities[QSL("frac34")] = 0x00be; res[QSL("frac14")] = 0x00bc;
m_htmlNamedEntities[QSL("frasl")] = 0x2044; res[QSL("frac34")] = 0x00be;
m_htmlNamedEntities[QSL("gamma")] = 0x03b3; res[QSL("frasl")] = 0x2044;
m_htmlNamedEntities[QSL("ge")] = 0x2265; res[QSL("gamma")] = 0x03b3;
m_htmlNamedEntities[QSL("gt")] = 62; res[QSL("ge")] = 0x2265;
m_htmlNamedEntities[QSL("hArr")] = 0x21d4; res[QSL("gt")] = 62;
m_htmlNamedEntities[QSL("harr")] = 0x2194; res[QSL("hArr")] = 0x21d4;
m_htmlNamedEntities[QSL("hearts")] = 0x2665; res[QSL("harr")] = 0x2194;
m_htmlNamedEntities[QSL("hellip")] = 0x2026; res[QSL("hearts")] = 0x2665;
m_htmlNamedEntities[QSL("iacute")] = 0x00ed; res[QSL("hellip")] = 0x2026;
m_htmlNamedEntities[QSL("icirc")] = 0x00ee; res[QSL("iacute")] = 0x00ed;
m_htmlNamedEntities[QSL("iexcl")] = 0x00a1; res[QSL("icirc")] = 0x00ee;
m_htmlNamedEntities[QSL("igrave")] = 0x00ec; res[QSL("iexcl")] = 0x00a1;
m_htmlNamedEntities[QSL("image")] = 0x2111; res[QSL("igrave")] = 0x00ec;
m_htmlNamedEntities[QSL("infin")] = 0x221e; res[QSL("image")] = 0x2111;
m_htmlNamedEntities[QSL("int")] = 0x222b; res[QSL("infin")] = 0x221e;
m_htmlNamedEntities[QSL("iota")] = 0x03b9; res[QSL("int")] = 0x222b;
m_htmlNamedEntities[QSL("iquest")] = 0x00bf; res[QSL("iota")] = 0x03b9;
m_htmlNamedEntities[QSL("isin")] = 0x2208; res[QSL("iquest")] = 0x00bf;
m_htmlNamedEntities[QSL("iuml")] = 0x00ef; res[QSL("isin")] = 0x2208;
m_htmlNamedEntities[QSL("kappa")] = 0x03ba; res[QSL("iuml")] = 0x00ef;
m_htmlNamedEntities[QSL("lArr")] = 0x21d0; res[QSL("kappa")] = 0x03ba;
m_htmlNamedEntities[QSL("lambda")] = 0x03bb; res[QSL("lArr")] = 0x21d0;
m_htmlNamedEntities[QSL("lang")] = 0x2329; res[QSL("lambda")] = 0x03bb;
m_htmlNamedEntities[QSL("laquo")] = 0x00ab; res[QSL("lang")] = 0x2329;
m_htmlNamedEntities[QSL("larr")] = 0x2190; res[QSL("laquo")] = 0x00ab;
m_htmlNamedEntities[QSL("lceil")] = 0x2308; res[QSL("larr")] = 0x2190;
m_htmlNamedEntities[QSL("ldquo")] = 0x201c; res[QSL("lceil")] = 0x2308;
m_htmlNamedEntities[QSL("le")] = 0x2264; res[QSL("ldquo")] = 0x201c;
m_htmlNamedEntities[QSL("lfloor")] = 0x230a; res[QSL("le")] = 0x2264;
m_htmlNamedEntities[QSL("lowast")] = 0x2217; res[QSL("lfloor")] = 0x230a;
m_htmlNamedEntities[QSL("loz")] = 0x25ca; res[QSL("lowast")] = 0x2217;
m_htmlNamedEntities[QSL("lrm")] = 0x200e; res[QSL("loz")] = 0x25ca;
m_htmlNamedEntities[QSL("lsaquo")] = 0x2039; res[QSL("lrm")] = 0x200e;
m_htmlNamedEntities[QSL("lsquo")] = 0x2018; res[QSL("lsaquo")] = 0x2039;
m_htmlNamedEntities[QSL("lt")] = 60; res[QSL("lsquo")] = 0x2018;
m_htmlNamedEntities[QSL("macr")] = 0x00af; res[QSL("lt")] = 60;
m_htmlNamedEntities[QSL("mdash")] = 0x2014; res[QSL("macr")] = 0x00af;
m_htmlNamedEntities[QSL("micro")] = 0x00b5; res[QSL("mdash")] = 0x2014;
m_htmlNamedEntities[QSL("middot")] = 0x00b7; res[QSL("micro")] = 0x00b5;
m_htmlNamedEntities[QSL("minus")] = 0x2212; res[QSL("middot")] = 0x00b7;
m_htmlNamedEntities[QSL("mu")] = 0x03bc; res[QSL("minus")] = 0x2212;
m_htmlNamedEntities[QSL("nabla")] = 0x2207; res[QSL("mu")] = 0x03bc;
m_htmlNamedEntities[QSL("nbsp")] = 0x00a0; res[QSL("nabla")] = 0x2207;
m_htmlNamedEntities[QSL("ndash")] = 0x2013; res[QSL("nbsp")] = 0x00a0;
m_htmlNamedEntities[QSL("ne")] = 0x2260; res[QSL("ndash")] = 0x2013;
m_htmlNamedEntities[QSL("ni")] = 0x220b; res[QSL("ne")] = 0x2260;
m_htmlNamedEntities[QSL("not")] = 0x00ac; res[QSL("ni")] = 0x220b;
m_htmlNamedEntities[QSL("notin")] = 0x2209; res[QSL("not")] = 0x00ac;
m_htmlNamedEntities[QSL("nsub")] = 0x2284; res[QSL("notin")] = 0x2209;
m_htmlNamedEntities[QSL("ntilde")] = 0x00f1; res[QSL("nsub")] = 0x2284;
m_htmlNamedEntities[QSL("nu")] = 0x03bd; res[QSL("ntilde")] = 0x00f1;
m_htmlNamedEntities[QSL("oacute")] = 0x00f3; res[QSL("nu")] = 0x03bd;
m_htmlNamedEntities[QSL("ocirc")] = 0x00f4; res[QSL("oacute")] = 0x00f3;
m_htmlNamedEntities[QSL("oelig")] = 0x0153; res[QSL("ocirc")] = 0x00f4;
m_htmlNamedEntities[QSL("ograve")] = 0x00f2; res[QSL("oelig")] = 0x0153;
m_htmlNamedEntities[QSL("oline")] = 0x203e; res[QSL("ograve")] = 0x00f2;
m_htmlNamedEntities[QSL("omega")] = 0x03c9; res[QSL("oline")] = 0x203e;
m_htmlNamedEntities[QSL("omicron")] = 0x03bf; res[QSL("omega")] = 0x03c9;
m_htmlNamedEntities[QSL("oplus")] = 0x2295; res[QSL("omicron")] = 0x03bf;
m_htmlNamedEntities[QSL("or")] = 0x22a6; res[QSL("oplus")] = 0x2295;
m_htmlNamedEntities[QSL("ordf")] = 0x00aa; res[QSL("or")] = 0x22a6;
m_htmlNamedEntities[QSL("ordm")] = 0x00ba; res[QSL("ordf")] = 0x00aa;
m_htmlNamedEntities[QSL("oslash")] = 0x00f8; res[QSL("ordm")] = 0x00ba;
m_htmlNamedEntities[QSL("otilde")] = 0x00f5; res[QSL("oslash")] = 0x00f8;
m_htmlNamedEntities[QSL("otimes")] = 0x2297; res[QSL("otilde")] = 0x00f5;
m_htmlNamedEntities[QSL("ouml")] = 0x00f6; res[QSL("otimes")] = 0x2297;
m_htmlNamedEntities[QSL("para")] = 0x00b6; res[QSL("ouml")] = 0x00f6;
m_htmlNamedEntities[QSL("part")] = 0x2202; res[QSL("para")] = 0x00b6;
m_htmlNamedEntities[QSL("percnt")] = 0x0025; res[QSL("part")] = 0x2202;
m_htmlNamedEntities[QSL("permil")] = 0x2030; res[QSL("percnt")] = 0x0025;
m_htmlNamedEntities[QSL("perp")] = 0x22a5; res[QSL("permil")] = 0x2030;
m_htmlNamedEntities[QSL("phi")] = 0x03c6; res[QSL("perp")] = 0x22a5;
m_htmlNamedEntities[QSL("pi")] = 0x03c0; res[QSL("phi")] = 0x03c6;
m_htmlNamedEntities[QSL("piv")] = 0x03d6; res[QSL("pi")] = 0x03c0;
m_htmlNamedEntities[QSL("plusmn")] = 0x00b1; res[QSL("piv")] = 0x03d6;
m_htmlNamedEntities[QSL("pound")] = 0x00a3; res[QSL("plusmn")] = 0x00b1;
m_htmlNamedEntities[QSL("prime")] = 0x2032; res[QSL("pound")] = 0x00a3;
m_htmlNamedEntities[QSL("prod")] = 0x220f; res[QSL("prime")] = 0x2032;
m_htmlNamedEntities[QSL("prop")] = 0x221d; res[QSL("prod")] = 0x220f;
m_htmlNamedEntities[QSL("psi")] = 0x03c8; res[QSL("prop")] = 0x221d;
m_htmlNamedEntities[QSL("quot")] = 34; res[QSL("psi")] = 0x03c8;
m_htmlNamedEntities[QSL("rArr")] = 0x21d2; res[QSL("quot")] = 34;
m_htmlNamedEntities[QSL("radic")] = 0x221a; res[QSL("rArr")] = 0x21d2;
m_htmlNamedEntities[QSL("rang")] = 0x232a; res[QSL("radic")] = 0x221a;
m_htmlNamedEntities[QSL("raquo")] = 0x00bb; res[QSL("rang")] = 0x232a;
m_htmlNamedEntities[QSL("rarr")] = 0x2192; res[QSL("raquo")] = 0x00bb;
m_htmlNamedEntities[QSL("rceil")] = 0x2309; res[QSL("rarr")] = 0x2192;
m_htmlNamedEntities[QSL("rdquo")] = 0x201d; res[QSL("rceil")] = 0x2309;
m_htmlNamedEntities[QSL("real")] = 0x211c; res[QSL("rdquo")] = 0x201d;
m_htmlNamedEntities[QSL("reg")] = 0x00ae; res[QSL("real")] = 0x211c;
m_htmlNamedEntities[QSL("rfloor")] = 0x230b; res[QSL("reg")] = 0x00ae;
m_htmlNamedEntities[QSL("rho")] = 0x03c1; res[QSL("rfloor")] = 0x230b;
m_htmlNamedEntities[QSL("rlm")] = 0x200f; res[QSL("rho")] = 0x03c1;
m_htmlNamedEntities[QSL("rsaquo")] = 0x203a; res[QSL("rlm")] = 0x200f;
m_htmlNamedEntities[QSL("rsquo")] = 0x2019; res[QSL("rsaquo")] = 0x203a;
m_htmlNamedEntities[QSL("sbquo")] = 0x201a; res[QSL("rsquo")] = 0x2019;
m_htmlNamedEntities[QSL("scaron")] = 0x0161; res[QSL("sbquo")] = 0x201a;
m_htmlNamedEntities[QSL("sdot")] = 0x22c5; res[QSL("scaron")] = 0x0161;
m_htmlNamedEntities[QSL("sect")] = 0x00a7; res[QSL("sdot")] = 0x22c5;
m_htmlNamedEntities[QSL("shy")] = 0x00ad; res[QSL("sect")] = 0x00a7;
m_htmlNamedEntities[QSL("sigma")] = 0x03c3; res[QSL("shy")] = 0x00ad;
m_htmlNamedEntities[QSL("sigmaf")] = 0x03c2; res[QSL("sigma")] = 0x03c3;
m_htmlNamedEntities[QSL("sim")] = 0x223c; res[QSL("sigmaf")] = 0x03c2;
m_htmlNamedEntities[QSL("spades")] = 0x2660; res[QSL("sim")] = 0x223c;
m_htmlNamedEntities[QSL("sub")] = 0x2282; res[QSL("spades")] = 0x2660;
m_htmlNamedEntities[QSL("sube")] = 0x2286; res[QSL("sub")] = 0x2282;
m_htmlNamedEntities[QSL("sum")] = 0x2211; res[QSL("sube")] = 0x2286;
m_htmlNamedEntities[QSL("sup")] = 0x2283; res[QSL("sum")] = 0x2211;
m_htmlNamedEntities[QSL("sup1")] = 0x00b9; res[QSL("sup")] = 0x2283;
m_htmlNamedEntities[QSL("sup2")] = 0x00b2; res[QSL("sup1")] = 0x00b9;
m_htmlNamedEntities[QSL("sup3")] = 0x00b3; res[QSL("sup2")] = 0x00b2;
m_htmlNamedEntities[QSL("supe")] = 0x2287; res[QSL("sup3")] = 0x00b3;
m_htmlNamedEntities[QSL("szlig")] = 0x00df; res[QSL("supe")] = 0x2287;
m_htmlNamedEntities[QSL("tau")] = 0x03c4; res[QSL("szlig")] = 0x00df;
m_htmlNamedEntities[QSL("there4")] = 0x2234; res[QSL("tau")] = 0x03c4;
m_htmlNamedEntities[QSL("theta")] = 0x03b8; res[QSL("there4")] = 0x2234;
m_htmlNamedEntities[QSL("thetasym")] = 0x03d1; res[QSL("theta")] = 0x03b8;
m_htmlNamedEntities[QSL("thinsp")] = 0x2009; res[QSL("thetasym")] = 0x03d1;
m_htmlNamedEntities[QSL("thorn")] = 0x00fe; res[QSL("thinsp")] = 0x2009;
m_htmlNamedEntities[QSL("tilde")] = 0x02dc; res[QSL("thorn")] = 0x00fe;
m_htmlNamedEntities[QSL("times")] = 0x00d7; res[QSL("tilde")] = 0x02dc;
m_htmlNamedEntities[QSL("trade")] = 0x2122; res[QSL("times")] = 0x00d7;
m_htmlNamedEntities[QSL("uArr")] = 0x21d1; res[QSL("trade")] = 0x2122;
m_htmlNamedEntities[QSL("uacute")] = 0x00fa; res[QSL("uArr")] = 0x21d1;
m_htmlNamedEntities[QSL("uarr")] = 0x2191; res[QSL("uacute")] = 0x00fa;
m_htmlNamedEntities[QSL("ucirc")] = 0x00fb; res[QSL("uarr")] = 0x2191;
m_htmlNamedEntities[QSL("ugrave")] = 0x00f9; res[QSL("ucirc")] = 0x00fb;
m_htmlNamedEntities[QSL("uml")] = 0x00a8; res[QSL("ugrave")] = 0x00f9;
m_htmlNamedEntities[QSL("upsih")] = 0x03d2; res[QSL("uml")] = 0x00a8;
m_htmlNamedEntities[QSL("upsilon")] = 0x03c5; res[QSL("upsih")] = 0x03d2;
m_htmlNamedEntities[QSL("uuml")] = 0x00fc; res[QSL("upsilon")] = 0x03c5;
m_htmlNamedEntities[QSL("weierp")] = 0x2118; res[QSL("uuml")] = 0x00fc;
m_htmlNamedEntities[QSL("xi")] = 0x03be; res[QSL("weierp")] = 0x2118;
m_htmlNamedEntities[QSL("yacute")] = 0x00fd; res[QSL("xi")] = 0x03be;
m_htmlNamedEntities[QSL("yen")] = 0x00a5; res[QSL("yacute")] = 0x00fd;
m_htmlNamedEntities[QSL("yuml")] = 0x00ff; res[QSL("yen")] = 0x00a5;
m_htmlNamedEntities[QSL("zeta")] = 0x03b6; res[QSL("yuml")] = 0x00ff;
m_htmlNamedEntities[QSL("zwj")] = 0x200d; res[QSL("zeta")] = 0x03b6;
m_htmlNamedEntities[QSL("zwnj")] = 0x200c; res[QSL("zwj")] = 0x200d;
res[QSL("zwnj")] = 0x200c;
return res;
} }
QString WebFactory::customUserAgent() const { QString WebFactory::customUserAgent() const {

View File

@ -10,9 +10,8 @@
#include <QMap> #include <QMap>
#if defined(NO_LITE) #if defined(NO_LITE)
#include <QWebEngineProfile> class QWebEngineProfile;
#include <QWebEngineSettings> class QWebEngineSettings;
class QAction; class QAction;
class NetworkUrlInterceptor; class NetworkUrlInterceptor;
#endif #endif
@ -23,7 +22,7 @@ class CookieJar;
class ApiServer; class ApiServer;
class Readability; class Readability;
class WebFactory : public QObject { class RSSGUARD_DLLSPEC WebFactory : public QObject {
Q_OBJECT Q_OBJECT
public: public:
@ -37,7 +36,7 @@ class WebFactory : public QObject {
// converts both HTML entity names and numbers to UTF-8 string. // converts both HTML entity names and numbers to UTF-8 string.
// Example of entities are: // Example of entities are:
// ∀ = &forall; (entity name), &#8704; (base-10 entity), &#x2200; (base-16 entity) // ∀ = &forall; (entity name), &#8704; (base-10 entity), &#x2200; (base-16 entity)
QString unescapeHtml(const QString& html); static QString unescapeHtml(const QString& html);
QString limitSizeOfHtmlImages(const QString& html, int desired_width, int images_max_height) const; QString limitSizeOfHtmlImages(const QString& html, int desired_width, int images_max_height) const;
QString processFeedUriScheme(const QString& url); QString processFeedUriScheme(const QString& url);
@ -79,11 +78,11 @@ class WebFactory : public QObject {
void webEngineSettingChanged(bool enabled); void webEngineSettingChanged(bool enabled);
private: private:
QAction* createEngineSettingsAction(const QString& title, QWebEngineSettings::WebAttribute attribute); QAction* createEngineSettingsAction(const QString& title, int web_attribute);
#endif #endif
private: private:
void generateUnescapes(); static QMap<QString, char16_t> generateUnescapes();
private: private:
AdBlockManager* m_adBlock; AdBlockManager* m_adBlock;
@ -97,7 +96,6 @@ class WebFactory : public QObject {
ApiServer* m_apiServer; ApiServer* m_apiServer;
CookieJar* m_cookieJar; CookieJar* m_cookieJar;
Readability* m_readability; Readability* m_readability;
QMap<QString, char16_t> m_htmlNamedEntities;
QString m_customUserAgent; QString m_customUserAgent;
}; };

View File

@ -10,8 +10,8 @@
// This is common model which displays only categories/feeds // This is common model which displays only categories/feeds
// and allows user to place checkmarks. // and allows user to place checkmarks.
class AccountCheckModel : public QAbstractItemModel { class RSSGUARD_DLLSPEC AccountCheckModel : public QAbstractItemModel {
Q_OBJECT Q_OBJECT
public: public:
explicit AccountCheckModel(QObject* parent = nullptr); explicit AccountCheckModel(QObject* parent = nullptr);
@ -56,8 +56,8 @@ class AccountCheckModel : public QAbstractItemModel {
bool m_recursiveChange; bool m_recursiveChange;
}; };
class AccountCheckSortedModel : public QSortFilterProxyModel { class RSSGUARD_DLLSPEC AccountCheckSortedModel : public QSortFilterProxyModel {
Q_OBJECT Q_OBJECT
public: public:
explicit AccountCheckSortedModel(QObject* parent = nullptr); explicit AccountCheckSortedModel(QObject* parent = nullptr);

View File

@ -10,14 +10,14 @@
#include <QPair> #include <QPair>
#include <QStringList> #include <QStringList>
struct CacheSnapshot { struct RSSGUARD_DLLSPEC CacheSnapshot {
QMap<QString, QStringList> m_cachedLabelAssignments; QMap<QString, QStringList> m_cachedLabelAssignments;
QMap<QString, QStringList> m_cachedLabelDeassignments; QMap<QString, QStringList> m_cachedLabelDeassignments;
QMap<RootItem::ReadStatus, QStringList> m_cachedStatesRead; QMap<RootItem::ReadStatus, QStringList> m_cachedStatesRead;
QMap<RootItem::Importance, QList<Message>> m_cachedStatesImportant; QMap<RootItem::Importance, QList<Message>> m_cachedStatesImportant;
}; };
class CacheForServiceRoot { class RSSGUARD_DLLSPEC CacheForServiceRoot {
public: public:
explicit CacheForServiceRoot(); explicit CacheForServiceRoot();
virtual ~CacheForServiceRoot(); virtual ~CacheForServiceRoot();
@ -34,7 +34,6 @@ class CacheForServiceRoot {
bool isEmpty() const; bool isEmpty() const;
protected: protected:
// Returns all cached data and clears the cache. // Returns all cached data and clears the cache.
// NOTE: If returned data are not successfuly passed back to // NOTE: If returned data are not successfuly passed back to
// server then caller needs to re-add the data back to cache. // server then caller needs to re-add the data back to cache.

View File

@ -5,7 +5,7 @@
#include "services/abstract/rootitem.h" #include "services/abstract/rootitem.h"
class Category : public RootItem { class RSSGUARD_DLLSPEC Category : public RootItem {
Q_OBJECT Q_OBJECT
public: public:

View File

@ -12,7 +12,7 @@
#include <QVariant> #include <QVariant>
// Base class for "feed" nodes. // Base class for "feed" nodes.
class Feed : public RootItem { class RSSGUARD_DLLSPEC Feed : public RootItem {
Q_OBJECT Q_OBJECT
public: public:

View File

@ -11,7 +11,7 @@ namespace Ui {
class AccountDetails; class AccountDetails;
} }
class AccountDetails : public QWidget { class RSSGUARD_DLLSPEC AccountDetails : public QWidget {
Q_OBJECT Q_OBJECT
friend class FormAccountDetails; friend class FormAccountDetails;

View File

@ -10,7 +10,7 @@
#include "network-web/networkfactory.h" #include "network-web/networkfactory.h"
#include "services/abstract/feed.h" #include "services/abstract/feed.h"
class AuthenticationDetails : public QWidget, public Ui::AuthenticationDetails { class RSSGUARD_DLLSPEC AuthenticationDetails : public QWidget, public Ui::AuthenticationDetails {
Q_OBJECT Q_OBJECT
public: public:

View File

@ -9,7 +9,7 @@
class RootItem; class RootItem;
class CustomMessagePreviewer : public QWidget { class RSSGUARD_DLLSPEC CustomMessagePreviewer : public QWidget {
Q_OBJECT Q_OBJECT
public: public:

View File

@ -2,6 +2,8 @@
#include "services/abstract/gui/formaccountdetails.h" #include "services/abstract/gui/formaccountdetails.h"
#include "ui_formaccountdetails.h"
#include "gui/guiutilities.h" #include "gui/guiutilities.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h" #include "miscellaneous/iconfactory.h"

View File

@ -15,7 +15,7 @@
class ServiceRoot; class ServiceRoot;
class FormAccountDetails : public QDialog { class RSSGUARD_DLLSPEC FormAccountDetails : public QDialog {
Q_OBJECT Q_OBJECT
public: public:

View File

@ -7,6 +7,8 @@
#include "miscellaneous/iconfactory.h" #include "miscellaneous/iconfactory.h"
#include "services/abstract/label.h" #include "services/abstract/label.h"
#include <QPushButton>
FormAddEditLabel::FormAddEditLabel(QWidget* parent) : QDialog(parent), m_editableLabel(nullptr) { FormAddEditLabel::FormAddEditLabel(QWidget* parent) : QDialog(parent), m_editableLabel(nullptr) {
m_ui.setupUi(this); m_ui.setupUi(this);
m_ui.m_txtName->lineEdit()->setPlaceholderText(tr("Name for your label")); m_ui.m_txtName->lineEdit()->setPlaceholderText(tr("Name for your label"));

View File

@ -13,8 +13,8 @@ namespace Ui {
class Label; class Label;
class FormAddEditLabel : public QDialog { class RSSGUARD_DLLSPEC FormAddEditLabel : public QDialog {
Q_OBJECT Q_OBJECT
public: public:
explicit FormAddEditLabel(QWidget* parent = nullptr); explicit FormAddEditLabel(QWidget* parent = nullptr);

View File

@ -13,7 +13,7 @@ namespace Ui {
class Search; class Search;
class FormAddEditProbe : public QDialog { class RSSGUARD_DLLSPEC FormAddEditProbe : public QDialog {
Q_OBJECT Q_OBJECT
public: public:

View File

@ -22,7 +22,7 @@ class QMenu;
class QAction; class QAction;
class MultiFeedEditCheckBox; class MultiFeedEditCheckBox;
class FormCategoryDetails : public QDialog { class RSSGUARD_DLLSPEC FormCategoryDetails : public QDialog {
Q_OBJECT Q_OBJECT
public: public:

View File

@ -2,6 +2,8 @@
#include "services/abstract/gui/formfeeddetails.h" #include "services/abstract/gui/formfeeddetails.h"
#include "ui_formfeeddetails.h"
#include "database/databasequeries.h" #include "database/databasequeries.h"
#include "definitions/definitions.h" #include "definitions/definitions.h"
#include "exceptions/applicationexception.h" #include "exceptions/applicationexception.h"

Some files were not shown because too many files have changed in this diff Show More