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
+