diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml index 8a18a5c67..add4e7ca5 100644 --- a/resources/desktop/com.github.rssguard.appdata.xml +++ b/resources/desktop/com.github.rssguard.appdata.xml @@ -26,7 +26,7 @@ https://github.com/sponsors/martinrotter - + none diff --git a/resources/icons.qrc b/resources/icons.qrc index f79f998c5..30fae3bd5 100644 --- a/resources/icons.qrc +++ b/resources/icons.qrc @@ -50,6 +50,7 @@ ./graphics/Breeze/actions/22/list-add.svg ./graphics/Breeze/actions/22/list-remove.svg ./graphics/Breeze/actions/32/mail-attachment.svg + ./graphics/Breeze/actions/32/mail-forward.svg ./graphics/Breeze/actions/symbolic/mail-inbox-symbolic.svg ./graphics/Breeze/actions/32/mail-mark-important.svg ./graphics/Breeze/actions/32/mail-mark-junk.svg @@ -125,6 +126,7 @@ ./graphics/Breeze Dark/actions/22/list-add.svg ./graphics/Breeze Dark/actions/22/list-remove.svg ./graphics/Breeze Dark/actions/32/mail-attachment.svg + ./graphics/Breeze Dark/actions/32/mail-forward.svg ./graphics/Breeze Dark/actions/symbolic/mail-inbox-symbolic.svg ./graphics/Breeze Dark/actions/32/mail-mark-important.svg ./graphics/Breeze Dark/actions/32/mail-mark-junk.svg @@ -198,6 +200,7 @@ ./graphics/Faenza/actions/64/list-add.png ./graphics/Faenza/actions/64/list-remove.png ./graphics/Faenza/actions/64/mail-attachment.png + ./graphics/Faenza/actions/64/mail-forward.png ./graphics/Faenza/actions/64/mail-inbox.png ./graphics/Faenza/actions/64/mail-mark-important.png ./graphics/Faenza/actions/64/mail-mark-junk.png @@ -277,6 +280,7 @@ ./graphics/Numix/22/actions/list-add.svg ./graphics/Numix/22/actions/list-remove.svg ./graphics/Numix/22/actions/mail-attachment.svg + ./graphics/Numix/22/actions/mail-forward.svg ./graphics/Numix/22/places/mail-inbox.svg ./graphics/Numix/22/actions/mail-mark-important.svg ./graphics/Numix/22/actions/mail-mark-junk.svg diff --git a/src/librssguard/core/feeddownloader.cpp b/src/librssguard/core/feeddownloader.cpp index 408f38aa7..a972710df 100644 --- a/src/librssguard/core/feeddownloader.cpp +++ b/src/librssguard/core/feeddownloader.cpp @@ -17,10 +17,8 @@ #include #include #include -#include #include #include -#include FeedDownloader::FeedDownloader() : QObject(), m_isCacheSynchronizationRunning(false), m_stopCacheSynchronization(false), m_mutex(new QMutex()), m_feedsUpdated(0), m_feedsOriginalCount(0) { diff --git a/src/librssguard/core/feedsmodel.cpp b/src/librssguard/core/feedsmodel.cpp index ea1f05632..518c70fa0 100644 --- a/src/librssguard/core/feedsmodel.cpp +++ b/src/librssguard/core/feedsmodel.cpp @@ -10,30 +10,26 @@ #include "miscellaneous/feedreader.h" #include "miscellaneous/iconfactory.h" #include "miscellaneous/textfactory.h" -#include "services/abstract/category.h" #include "services/abstract/feed.h" #include "services/abstract/recyclebin.h" #include "services/abstract/serviceentrypoint.h" #include "services/abstract/serviceroot.h" -#include "services/standard/standardserviceentrypoint.h" #include "services/standard/standardserviceroot.h" #include #include #include -#include #include #include -#include - using RootItemPtr = RootItem*; -FeedsModel::FeedsModel(QObject* parent) : QAbstractItemModel(parent) { +FeedsModel::FeedsModel(QObject* parent) : QAbstractItemModel(parent), m_rootItem(new RootItem()) +{ setObjectName(QSL("FeedsModel")); // Create root item. - m_rootItem = new RootItem(); + // : Name of root item of feed list which can be seen in feed add/edit dialog. m_rootItem->setTitle(tr("Root")); diff --git a/src/librssguard/core/filterutils.cpp b/src/librssguard/core/filterutils.cpp index 4f38543fc..13dca4dcd 100644 --- a/src/librssguard/core/filterutils.cpp +++ b/src/librssguard/core/filterutils.cpp @@ -11,7 +11,6 @@ #include #include #include -#include FilterUtils::FilterUtils(QObject* parent) : QObject(parent) {} diff --git a/src/librssguard/core/message.cpp b/src/librssguard/core/message.cpp index bf186d084..a240e0c4d 100644 --- a/src/librssguard/core/message.cpp +++ b/src/librssguard/core/message.cpp @@ -10,9 +10,6 @@ #include #include #include -#include -#include -#include #include #include #include diff --git a/src/librssguard/core/messagefilter.cpp b/src/librssguard/core/messagefilter.cpp index d3b3d52e3..98ee2fb86 100644 --- a/src/librssguard/core/messagefilter.cpp +++ b/src/librssguard/core/messagefilter.cpp @@ -3,7 +3,6 @@ #include "core/messagefilter.h" #include "core/filterutils.h" -#include "core/message.h" #include "exceptions/filteringexception.h" #include "miscellaneous/application.h" diff --git a/src/librssguard/core/messagesmodelcache.cpp b/src/librssguard/core/messagesmodelcache.cpp index fbc4a7312..4f33d7657 100644 --- a/src/librssguard/core/messagesmodelcache.cpp +++ b/src/librssguard/core/messagesmodelcache.cpp @@ -2,8 +2,6 @@ #include "core/messagesmodelcache.h" -#include "miscellaneous/textfactory.h" - MessagesModelCache::MessagesModelCache(QObject* parent) : QObject(parent) {} void MessagesModelCache::setData(const QModelIndex& index, const QVariant& value, const QSqlRecord& record) { diff --git a/src/librssguard/database/databasedriver.cpp b/src/librssguard/database/databasedriver.cpp index 1a43b9f7b..5ccbe9faf 100644 --- a/src/librssguard/database/databasedriver.cpp +++ b/src/librssguard/database/databasedriver.cpp @@ -11,8 +11,7 @@ #include #include -DatabaseDriver::DatabaseDriver(QObject* parent) : QObject(parent) -{} +DatabaseDriver::DatabaseDriver(QObject* parent) : QObject(parent) {} void DatabaseDriver::updateDatabaseSchema(QSqlQuery& query, int source_db_schema_version, diff --git a/src/librssguard/database/databasefactory.cpp b/src/librssguard/database/databasefactory.cpp index cf2aa7c3b..a5949c95b 100644 --- a/src/librssguard/database/databasefactory.cpp +++ b/src/librssguard/database/databasefactory.cpp @@ -13,8 +13,6 @@ #include #include -#include -#include #include #include #include diff --git a/src/librssguard/database/sqlitedriver.cpp b/src/librssguard/database/sqlitedriver.cpp index 637c3de4c..429c1b126 100644 --- a/src/librssguard/database/sqlitedriver.cpp +++ b/src/librssguard/database/sqlitedriver.cpp @@ -3,7 +3,6 @@ #include "database/sqlitedriver.h" #include "exceptions/applicationexception.h" -#include "exceptions/ioexception.h" #include "miscellaneous/application.h" #include diff --git a/src/librssguard/dynamic-shortcuts/dynamicshortcutswidget.cpp b/src/librssguard/dynamic-shortcuts/dynamicshortcutswidget.cpp index 2d9953489..d0506c5d0 100644 --- a/src/librssguard/dynamic-shortcuts/dynamicshortcutswidget.cpp +++ b/src/librssguard/dynamic-shortcuts/dynamicshortcutswidget.cpp @@ -4,7 +4,6 @@ #include "definitions/definitions.h" #include "dynamic-shortcuts/shortcutcatcher.h" -#include "gui/reusable/squeezelabel.h" #include #include diff --git a/src/librssguard/gui/messagepreviewer.cpp b/src/librssguard/gui/messagepreviewer.cpp index 70e658e63..45af3eb4b 100644 --- a/src/librssguard/gui/messagepreviewer.cpp +++ b/src/librssguard/gui/messagepreviewer.cpp @@ -14,6 +14,7 @@ #include "services/abstract/label.h" #include "services/abstract/labelsnode.h" #include "services/abstract/serviceroot.h" +#include "services/gmail/gui/emailpreviewer.h" #include #include @@ -141,7 +142,7 @@ void MessagePreviewer::loadMessage(const Message& message, RootItem* root) { } m_viewerLayout->setCurrentIndex(1); - custom_previewer->loadMessage(message, m_root); + custom_previewer->loadMessage(message, root); } else { ensureDefaultBrowserVisible(); diff --git a/src/librssguard/gui/webbrowser.cpp b/src/librssguard/gui/webbrowser.cpp index b53ae43b9..9681402b6 100644 --- a/src/librssguard/gui/webbrowser.cpp +++ b/src/librssguard/gui/webbrowser.cpp @@ -9,7 +9,6 @@ #include "gui/reusable/locationlineedit.h" #include "gui/reusable/searchtextwidget.h" #include "gui/tabwidget.h" -#include "gui/webviewers/litehtml/litehtmlviewer.h" // QLiteHtml-based web browsing. #include "gui/webviewers/webviewer.h" #include "miscellaneous/application.h" #include "miscellaneous/iconfactory.h" @@ -18,10 +17,6 @@ #include "network-web/webfactory.h" #include "services/abstract/serviceroot.h" -#if defined(USE_WEBENGINE) -#include "gui/webviewers/webengine/webengineviewer.h" // WebEngine-based web browsing. -#endif - #include #include #include @@ -43,16 +38,8 @@ WebBrowser::WebBrowser(WebViewer* viewer, QWidget* parent) : TabContent(parent), tr("View website in reader mode"), this)) { if (m_webView == nullptr) { -#if !defined(USE_WEBENGINE) - m_webView = new LiteHtmlViewer(this); -#else - if (qApp->forcedNoWebEngine()) { - m_webView = new LiteHtmlViewer(this); - } - else { - m_webView = new WebEngineViewer(this); - } -#endif + m_webView = qApp->createWebView(); + dynamic_cast(m_webView)->setParent(this); } // Initialize the components and layout. @@ -100,6 +87,10 @@ void WebBrowser::loadUrl(const QUrl& url) { } } +void WebBrowser::setHtml(const QString& html, const QUrl& base_url) { + m_webView->setHtml(html, base_url); +} + WebBrowser::~WebBrowser() { // Delete members. Do not use scoped pointers here. delete m_layout; diff --git a/src/librssguard/gui/webbrowser.h b/src/librssguard/gui/webbrowser.h index 81a294129..d4e158e02 100644 --- a/src/librssguard/gui/webbrowser.h +++ b/src/librssguard/gui/webbrowser.h @@ -10,6 +10,7 @@ #include #include +#include class QToolButton; class QVBoxLayout; @@ -46,6 +47,7 @@ class WebBrowser : public TabContent { void clear(bool also_hide); void loadUrl(const QString& url); void loadUrl(const QUrl& url); + void setHtml(const QString& html, const QUrl& base_url = {}); void loadMessages(const QList& messages, RootItem* root); void setNavigationBarVisible(bool visible); diff --git a/src/librssguard/gui/webviewers/webviewer.h b/src/librssguard/gui/webviewers/webviewer.h index 32093f0a7..c5f796390 100755 --- a/src/librssguard/gui/webviewers/webviewer.h +++ b/src/librssguard/gui/webviewers/webviewer.h @@ -3,12 +3,15 @@ #include "core/message.h" +#include + class WebBrowser; class RootItem; // Interface for web/article viewers. class WebViewer { public: + virtual ~WebViewer(); // Performs necessary steps to make viewer work with browser. // NOTE: Each implementor must do this in this method: @@ -56,4 +59,6 @@ class WebViewer { virtual void setZoomFactor(qreal zoom_factor) = 0; }; +inline WebViewer::~WebViewer() {} + #endif // WEBVIEWER_H diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index 6192eed44..ba7c9a851 100644 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -11,11 +11,14 @@ #include "gui/feedsview.h" #include "gui/messagebox.h" #include "gui/toolbars/statusbar.h" +#include "gui/webviewers/litehtml/litehtmlviewer.h" // QLiteHtml-based web browsing. #include "miscellaneous/feedreader.h" #include "miscellaneous/iconfactory.h" #include "miscellaneous/iofactory.h" #include "miscellaneous/mutex.h" #include "miscellaneous/notificationfactory.h" +#include "network-web/adblock/adblockicon.h" +#include "network-web/adblock/adblockmanager.h" #include "network-web/webfactory.h" #include "services/abstract/serviceroot.h" #include "services/owncloud/owncloudserviceentrypoint.h" @@ -38,10 +41,8 @@ #include #endif -#include "network-web/adblock/adblockicon.h" -#include "network-web/adblock/adblockmanager.h" - #if defined(USE_WEBENGINE) +#include "gui/webviewers/webengine/webengineviewer.h" // WebEngine-based web browsing. #include "network-web/webengine/networkurlinterceptor.h" #if QT_VERSION_MAJOR == 6 @@ -612,6 +613,19 @@ void Application::showGuiMessage(Notification::Event event, } } +WebViewer* Application::createWebView() { +#if !defined(USE_WEBENGINE) + return new LiteHtmlViewer(); +#else + if (forcedNoWebEngine()) { + return new LiteHtmlViewer(); + } + else { + return new WebEngineViewer(); + } +#endif +} + void Application::onCommitData(QSessionManager& manager) { qDebugNN << LOGSEC_CORE << "OS asked application to commit its data."; diff --git a/src/librssguard/miscellaneous/application.h b/src/librssguard/miscellaneous/application.h index 0cdce1538..ac85f8814 100644 --- a/src/librssguard/miscellaneous/application.h +++ b/src/librssguard/miscellaneous/application.h @@ -43,6 +43,7 @@ class QWebEngineDownloadItem; class WebFactory; class NotificationFactory; +class WebViewer; #if defined(Q_OS_WIN) struct ITaskbarList4; @@ -160,6 +161,8 @@ class RSSGUARD_DLLSPEC Application : public SingleApplication { const GuiAction& action = {}, QWidget* parent = nullptr); + WebViewer* createWebView(); + #if defined(USE_WEBENGINE) bool forcedNoWebEngine() const; #endif diff --git a/src/librssguard/services/abstract/gui/custommessagepreviewer.cpp b/src/librssguard/services/abstract/gui/custommessagepreviewer.cpp index 7233055db..aaa604a7a 100755 --- a/src/librssguard/services/abstract/gui/custommessagepreviewer.cpp +++ b/src/librssguard/services/abstract/gui/custommessagepreviewer.cpp @@ -3,3 +3,5 @@ #include "services/abstract/gui/custommessagepreviewer.h" CustomMessagePreviewer::CustomMessagePreviewer(QWidget* parent) : QWidget{parent} {} + +CustomMessagePreviewer::~CustomMessagePreviewer() {} diff --git a/src/librssguard/services/abstract/gui/custommessagepreviewer.h b/src/librssguard/services/abstract/gui/custommessagepreviewer.h index 4fa07b148..39bd13e2d 100755 --- a/src/librssguard/services/abstract/gui/custommessagepreviewer.h +++ b/src/librssguard/services/abstract/gui/custommessagepreviewer.h @@ -14,6 +14,7 @@ class CustomMessagePreviewer : public QWidget { public: explicit CustomMessagePreviewer(QWidget* parent = nullptr); + virtual ~CustomMessagePreviewer(); public: diff --git a/src/librssguard/services/gmail/gui/emailpreviewer.cpp b/src/librssguard/services/gmail/gui/emailpreviewer.cpp index 92588e61d..0b9ea73bd 100755 --- a/src/librssguard/services/gmail/gui/emailpreviewer.cpp +++ b/src/librssguard/services/gmail/gui/emailpreviewer.cpp @@ -1,13 +1,34 @@ +// For license of this file, see /LICENSE.md. + #include "services/gmail/gui/emailpreviewer.h" -EmailPreviewer::EmailPreviewer(QWidget* parent) : CustomMessagePreviewer(parent) { +#include "miscellaneous/application.h" +#include "miscellaneous/iconfactory.h" + +EmailPreviewer::EmailPreviewer(QWidget* parent) : CustomMessagePreviewer(parent), m_webView(new WebBrowser(nullptr, this)) { m_ui.setupUi(this); + + m_ui.m_mainLayout->addWidget(dynamic_cast(m_webView.data()), 3, 0, 1, -1); + m_ui.m_btnAttachments->setIcon(qApp->icons()->fromTheme(QSL("mail-attachment"))); + m_ui.m_btnForward->setIcon(qApp->icons()->fromTheme(QSL("mail-forward"))); + m_ui.m_btnReply->setIcon(qApp->icons()->fromTheme(QSL("mail-reply-sender"))); + + m_webView->setNavigationBarVisible(false); } EmailPreviewer::~EmailPreviewer() { qDebugNN << LOGSEC_GMAIL << "Email previewer destroyed."; } -void EmailPreviewer::clear() {} +void EmailPreviewer::clear() { + m_webView->clear(false); +} -void EmailPreviewer::loadMessage(const Message& msg, RootItem* selected_item) {} +void EmailPreviewer::loadMessage(const Message& msg, RootItem* selected_item) { + m_webView->setHtml(msg.m_contents); + m_ui.m_tbFrom->setText(msg.m_author); + m_ui.m_tbSubject->setText(msg.m_title); + + // TODO: todo + m_ui.m_tbTo->setText(QSL("-")); +} diff --git a/src/librssguard/services/gmail/gui/emailpreviewer.h b/src/librssguard/services/gmail/gui/emailpreviewer.h index 5fcfebd03..a9f037041 100755 --- a/src/librssguard/services/gmail/gui/emailpreviewer.h +++ b/src/librssguard/services/gmail/gui/emailpreviewer.h @@ -1,8 +1,12 @@ +// For license of this file, see /LICENSE.md. + #ifndef EMAILPREVIEWER_H #define EMAILPREVIEWER_H #include "services/abstract/gui/custommessagepreviewer.h" +#include "gui/webbrowser.h" + #include "ui_emailpreviewer.h" class EmailPreviewer : public CustomMessagePreviewer { @@ -17,6 +21,7 @@ class EmailPreviewer : public CustomMessagePreviewer { private: Ui::EmailPreviewer m_ui; + QScopedPointer m_webView; }; #endif // EMAILPREVIEWER_H diff --git a/src/librssguard/services/gmail/gui/emailpreviewer.ui b/src/librssguard/services/gmail/gui/emailpreviewer.ui index 99e3e8b34..0892889f9 100755 --- a/src/librssguard/services/gmail/gui/emailpreviewer.ui +++ b/src/librssguard/services/gmail/gui/emailpreviewer.ui @@ -6,27 +6,127 @@ 0 0 - 400 - 300 + 518 + 378 Form - - - - 80 - 90 - 49 - 16 - - - - test - - + + + + + true + + + + + + + From + + + m_tbFrom + + + + + + + true + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + &Attachments + + + QToolButton::InstantPopup + + + Qt::ToolButtonTextBesideIcon + + + Qt::DownArrow + + + + + + + &Reply + + + Qt::ToolButtonTextBesideIcon + + + + + + + &Forward + + + Qt::ToolButtonTextBesideIcon + + + + + + + + + Subject + + + m_tbSubject + + + + + + + true + + + + + + + To + + + m_tbTo + + + + + + m_tbFrom + m_tbTo + m_tbSubject + m_btnReply + m_btnForward +