make webengine profile actually WORK, working user-data cache path working

This commit is contained in:
Martin Rotter 2022-09-06 14:34:55 +02:00
parent 1f6d7c0bf4
commit 191b503050
20 changed files with 74 additions and 69 deletions

View File

@ -24,7 +24,7 @@
<url type="donation">https://github.com/sponsors/martinrotter</url>
<content_rating type="oars-1.1" />
<releases>
<release version="4.2.4" date="2022-09-05"/>
<release version="4.2.4" date="2022-09-06"/>
</releases>
<content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">none</content_attribute>

View File

@ -3,7 +3,7 @@
#ifndef MESSAGE_H
#define MESSAGE_H
#include "definitions/definitions.h"
//#include "definitions/definitions.h"
#include <QDataStream>
#include <QDateTime>

View File

@ -4,6 +4,7 @@
#include "3rd-party/boolinq/boolinq.h"
#include "database/databasefactory.h"
#include "definitions/definitions.h"
#include <QSqlDatabase>
#include <QSqlError>

View File

@ -165,7 +165,7 @@
#if defined(USE_WEBENGINE)
#define HTTP_COMPLETE_USERAGENT \
(QWebEngineProfile::defaultProfile()->httpUserAgent().toLocal8Bit() + QByteArrayLiteral(" ") + \
(qApp->web()->engineProfile()->httpUserAgent().toLocal8Bit() + QByteArrayLiteral(" ") + \
QByteArrayLiteral(APP_USERAGENT))
#else
#define HTTP_COMPLETE_USERAGENT \

View File

@ -11,6 +11,7 @@
#include "miscellaneous/iconfactory.h"
#include "miscellaneous/settingsproperties.h"
#include "miscellaneous/textfactory.h"
#include "network-web/webfactory.h"
#include <QFile>
#include <QJsonArray>
@ -18,10 +19,6 @@
#include <QPlainTextEdit>
#include <QTextStream>
#if defined(USE_WEBENGINE)
#include <QWebEngineProfile>
#endif
FormAbout::FormAbout(QWidget* parent) : QDialog(parent) {
m_ui.setupUi(this);
m_ui.m_lblIcon->setPixmap(QPixmap(APP_ICON_PATH));
@ -68,7 +65,7 @@ void FormAbout::loadSettingsAndPaths() {
QDir::toNativeSeparators(qApp->nodejs()->packageFolder())
.replace(user_data_path, QSL(USER_DATA_PLACEHOLDER)),
#if defined(USE_WEBENGINE)
QDir::toNativeSeparators(QWebEngineProfile::defaultProfile()->cachePath())
QDir::toNativeSeparators(qApp->web()->engineProfile()->cachePath())
.replace(user_data_path, QSL(USER_DATA_PLACEHOLDER))
#else
QSL("-")

View File

@ -107,6 +107,10 @@ void MessagePreviewer::clear() {
m_message = Message();
}
void MessagePreviewer::showItemInfo(RootItem* item) {
m_msgBrowser->setHtml(item->additionalTooltip());
}
void MessagePreviewer::hideToolbar() {
m_toolBar->setVisible(false);
}

View File

@ -17,7 +17,7 @@ class QToolBar;
class WebBrowser;
class LabelButton : public QToolButton {
Q_OBJECT
Q_OBJECT
public:
explicit LabelButton(QWidget* parent = nullptr);
@ -30,7 +30,7 @@ class LabelButton : public QToolButton {
};
class MessagePreviewer : public QWidget {
Q_OBJECT
Q_OBJECT
public:
explicit MessagePreviewer(QWidget* parent = nullptr);
@ -43,6 +43,7 @@ class MessagePreviewer : public QWidget {
public slots:
void setToolbarsVisible(bool visible);
void clear();
void showItemInfo(RootItem* item);
void hideToolbar();
void loadUrl(const QString& url);
void loadMessage(const Message& message, RootItem* root);

View File

@ -26,7 +26,6 @@
#include <QWebEngineContextMenuData>
#endif
#include <QWebEngineProfile>
#include <QWheelEvent>
WebEngineViewer::WebEngineViewer(QWidget* parent) : QWebEngineView(parent), m_browser(nullptr), m_root(nullptr) {
@ -218,13 +217,10 @@ void WebEngineViewer::setVerticalScrollBarPosition(double pos) {
void WebEngineViewer::applyFont(const QFont& fon) {
auto pixel_size = QFontMetrics(fon).ascent();
QWebEngineProfile::defaultProfile()->settings()->setFontFamily(QWebEngineSettings::FontFamily::StandardFont,
fon.family());
QWebEngineProfile::defaultProfile()->settings()->setFontFamily(QWebEngineSettings::FontFamily::SerifFont,
fon.family());
QWebEngineProfile::defaultProfile()->settings()->setFontFamily(QWebEngineSettings::FontFamily::SansSerifFont,
fon.family());
QWebEngineProfile::defaultProfile()->settings()->setFontSize(QWebEngineSettings::DefaultFontSize, pixel_size);
qApp->web()->engineProfile()->settings()->setFontFamily(QWebEngineSettings::FontFamily::StandardFont, fon.family());
qApp->web()->engineProfile()->settings()->setFontFamily(QWebEngineSettings::FontFamily::SerifFont, fon.family());
qApp->web()->engineProfile()->settings()->setFontFamily(QWebEngineSettings::FontFamily::SansSerifFont, fon.family());
qApp->web()->engineProfile()->settings()->setFontSize(QWebEngineSettings::DefaultFontSize, pixel_size);
}
qreal WebEngineViewer::zoomFactor() const {

View File

@ -3,6 +3,8 @@
#include "core/message.h"
#include "definitions/definitions.h"
#include <QUrl>
class WebBrowser;

View File

@ -50,8 +50,6 @@
#else
#include <QWebEngineDownloadItem>
#endif
#include <QWebEngineProfile>
#endif
#if defined(Q_OS_WIN)
@ -153,17 +151,15 @@ Application::Application(const QString& id, int& argc, char** argv, const QStrin
const QString web_data_root = userDataFolder() + QDir::separator() + QSL("web");
QWebEngineProfile::defaultProfile()->setCachePath(web_data_root + QDir::separator() + QSL("cache"));
QWebEngineProfile::defaultProfile()->setPersistentStoragePath(web_data_root + QDir::separator() + QSL("storage"));
QWebEngineProfile::defaultProfile()->setHttpUserAgent(QString(HTTP_COMPLETE_USERAGENT));
m_webFactory->engineProfile()->setCachePath(web_data_root + QDir::separator() + QSL("cache"));
m_webFactory->engineProfile()->setHttpCacheType(QWebEngineProfile::HttpCacheType::DiskHttpCache);
m_webFactory->engineProfile()->setPersistentStoragePath(web_data_root + QDir::separator() + QSL("storage"));
m_webFactory->engineProfile()->setHttpUserAgent(QString(HTTP_COMPLETE_USERAGENT));
qDebugNN << LOGSEC_NETWORK << "Persistent web data storage path:"
<< QUOTE_W_SPACE_DOT(QWebEngineProfile::defaultProfile()->persistentStoragePath());
<< QUOTE_W_SPACE_DOT(m_webFactory->engineProfile()->persistentStoragePath());
connect(QWebEngineProfile::defaultProfile(),
&QWebEngineProfile::downloadRequested,
this,
&Application::downloadRequested);
connect(m_webFactory->engineProfile(), &QWebEngineProfile::downloadRequested, this, &Application::downloadRequested);
#endif
connect(m_webFactory->adBlock(), &AdBlockManager::processTerminated, this, &Application::onAdBlockFailure);

View File

@ -4,26 +4,21 @@
#include "miscellaneous/application.h"
#include "miscellaneous/textfactory.h"
#include "network-web/webfactory.h"
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QNetworkRequest>
#if defined(USE_WEBENGINE)
#include <QWebEngineProfile>
#endif
BaseNetworkAccessManager::BaseNetworkAccessManager(QObject* parent)
: QNetworkAccessManager(parent) {
BaseNetworkAccessManager::BaseNetworkAccessManager(QObject* parent) : QNetworkAccessManager(parent) {
connect(this, &BaseNetworkAccessManager::sslErrors, this, &BaseNetworkAccessManager::onSslErrors);
loadSettings();
}
void BaseNetworkAccessManager::loadSettings() {
QNetworkProxy new_proxy;
const QNetworkProxy::ProxyType selected_proxy_type = static_cast<QNetworkProxy::ProxyType>(qApp->settings()->value(GROUP(Proxy),
SETTING(Proxy::Type)).
toInt());
const QNetworkProxy::ProxyType selected_proxy_type =
static_cast<QNetworkProxy::ProxyType>(qApp->settings()->value(GROUP(Proxy), SETTING(Proxy::Type)).toInt());
if (selected_proxy_type == QNetworkProxy::ProxyType::NoProxy) {
// No extra setting is needed, set new proxy and exit this method.
@ -35,10 +30,8 @@ void BaseNetworkAccessManager::loadSettings() {
if (QNetworkProxy::applicationProxy().type() != QNetworkProxy::ProxyType::DefaultProxy &&
QNetworkProxy::applicationProxy().type() != QNetworkProxy::ProxyType::NoProxy) {
qWarningNN << LOGSEC_NETWORK
<< "Used proxy address:"
<< QUOTE_W_SPACE_COMMA(QNetworkProxy::applicationProxy().hostName())
<< " type:"
<< QUOTE_W_SPACE_DOT(QNetworkProxy::applicationProxy().type());
<< "Used proxy address:" << QUOTE_W_SPACE_COMMA(QNetworkProxy::applicationProxy().hostName())
<< " type:" << QUOTE_W_SPACE_DOT(QNetworkProxy::applicationProxy().type());
}
setProxy(QNetworkProxy::applicationProxy());
@ -48,9 +41,7 @@ void BaseNetworkAccessManager::loadSettings() {
}
void BaseNetworkAccessManager::onSslErrors(QNetworkReply* reply, const QList<QSslError>& error) {
qWarningNN << LOGSEC_NETWORK
<< "Ignoring SSL errors for"
<< QUOTE_W_SPACE_DOT(reply->url().toString());
qWarningNN << LOGSEC_NETWORK << "Ignoring SSL errors for" << QUOTE_W_SPACE_DOT(reply->url().toString());
reply->ignoreSslErrors(error);
}

View File

@ -7,6 +7,7 @@
#include "miscellaneous/application.h"
#include "miscellaneous/iofactory.h"
#include "miscellaneous/settings.h"
#include "network-web/webfactory.h"
#include <QDateTime>
#include <QDir>
@ -15,16 +16,19 @@
#if defined(USE_WEBENGINE)
#include <QWebEngineCookieStore>
#include <QWebEngineProfile>
#endif
CookieJar::CookieJar(QObject* parent) : QNetworkCookieJar(parent) {
#if defined(USE_WEBENGINE)
// WebEngine does not store cookies, CookieJar does.
QWebEngineProfile::defaultProfile()
->setPersistentCookiesPolicy(QWebEngineProfile::PersistentCookiesPolicy::NoPersistentCookies);
auto* web_factory = qobject_cast<WebFactory*>(parent);
m_webEngineCookies = QWebEngineProfile::defaultProfile()->cookieStore();
if (web_factory != nullptr) {
// WebEngine does not store cookies, CookieJar does.
web_factory->engineProfile()
->setPersistentCookiesPolicy(QWebEngineProfile::PersistentCookiesPolicy::NoPersistentCookies);
m_webEngineCookies = web_factory->engineProfile()->cookieStore();
}
#endif
// Load all cookies and also set them into WebEngine store.

View File

@ -23,8 +23,6 @@
#include "miscellaneous/settings.h"
#include "network-web/webengine/urlinterceptor.h"
#include <QWebEngineProfile>
NetworkUrlInterceptor::NetworkUrlInterceptor(QObject* parent)
: QWebEngineUrlRequestInterceptor(parent), m_sendDnt(false) {}

View File

@ -17,7 +17,7 @@
#include <QUrlQuery>
#include <QWebEngineScript>
WebEnginePage::WebEnginePage(QObject* parent) : QWebEnginePage(parent) {
WebEnginePage::WebEnginePage(QObject* parent) : QWebEnginePage(qApp->web()->engineProfile(), parent) {
setBackgroundColor(Qt::GlobalColor::transparent);
connect(this, &QWebEnginePage::loadFinished, this, &WebEnginePage::hideUnwantedElements);

View File

@ -32,18 +32,19 @@ WebFactory::WebFactory(QObject* parent) : QObject(parent) {
m_adBlock = new AdBlockManager(this);
#if defined(USE_WEBENGINE)
m_engineProfile = new QWebEngineProfile(QSL(APP_LOW_NAME), this);
m_engineSettings = nullptr;
m_urlInterceptor = new NetworkUrlInterceptor(this);
#endif
m_cookieJar = new CookieJar(nullptr);
m_cookieJar = new CookieJar(this);
m_readability = new Readability(this);
#if defined(USE_WEBENGINE)
#if QT_VERSION >= 0x050D00 // Qt >= 5.13.0
QWebEngineProfile::defaultProfile()->setUrlRequestInterceptor(m_urlInterceptor);
m_engineProfile->setUrlRequestInterceptor(m_urlInterceptor);
#else
QWebEngineProfile::defaultProfile()->setRequestInterceptor(m_urlInterceptor);
m_engineProfile->setRequestInterceptor(m_urlInterceptor);
#endif
#endif
}
@ -55,9 +56,9 @@ WebFactory::~WebFactory() {
}
#endif
if (m_cookieJar != nullptr) {
/*if (m_cookieJar != nullptr) {
m_cookieJar->deleteLater();
}
}*/
}
bool WebFactory::sendMessageViaEmail(const Message& message) {
@ -271,6 +272,10 @@ NetworkUrlInterceptor* WebFactory::urlIinterceptor() const {
return m_urlInterceptor;
}
QWebEngineProfile* WebFactory::engineProfile() const {
return m_engineProfile;
}
QAction* WebFactory::engineSettingsAction() {
if (m_engineSettings == nullptr) {
m_engineSettings =
@ -363,7 +368,7 @@ void WebFactory::webEngineSettingChanged(bool enabled) {
QWebEngineSettings::WebAttribute attribute = static_cast<QWebEngineSettings::WebAttribute>(act->data().toInt());
qApp->settings()->setValue(WebEngineAttributes::ID, QString::number(static_cast<int>(attribute)), enabled);
QWebEngineProfile::defaultProfile()->settings()->setAttribute(attribute, act->isChecked());
m_engineProfile->settings()->setAttribute(attribute, act->isChecked());
}
QAction* WebFactory::createEngineSettingsAction(const QString& title, QWebEngineSettings::WebAttribute attribute) {
@ -374,7 +379,7 @@ QAction* WebFactory::createEngineSettingsAction(const QString& title, QWebEngine
act->setChecked(qApp->settings()
->value(WebEngineAttributes::ID, QString::number(static_cast<int>(attribute)), true)
.toBool());
QWebEngineProfile::defaultProfile()->settings()->setAttribute(attribute, act->isChecked());
m_engineProfile->settings()->setAttribute(attribute, act->isChecked());
connect(act, &QAction::toggled, this, &WebFactory::webEngineSettingChanged);
return act;
}

View File

@ -5,13 +5,15 @@
#include <QObject>
#include "core/messagesmodel.h"
#include "core/message.h"
#include <QMap>
#if defined(USE_WEBENGINE)
#include <QWebEngineProfile>
#include <QWebEngineSettings>
class QAction;
class NetworkUrlInterceptor;
#endif
@ -21,7 +23,7 @@ class CookieJar;
class Readability;
class WebFactory : public QObject {
Q_OBJECT
Q_OBJECT
public:
explicit WebFactory(QObject* parent = nullptr);
@ -43,6 +45,7 @@ class WebFactory : public QObject {
#if defined(USE_WEBENGINE)
NetworkUrlInterceptor* urlIinterceptor() const;
QWebEngineProfile* engineProfile() const;
#endif
CookieJar* cookieJar() const;
@ -68,6 +71,7 @@ class WebFactory : public QObject {
AdBlockManager* m_adBlock;
#if defined(USE_WEBENGINE)
QWebEngineProfile* m_engineProfile;
NetworkUrlInterceptor* m_urlInterceptor;
QAction* m_engineSettings;
#endif

View File

@ -10,14 +10,13 @@
class RootItem;
class CustomMessagePreviewer : public QWidget {
Q_OBJECT
Q_OBJECT
public:
explicit CustomMessagePreviewer(QWidget* parent = nullptr);
virtual ~CustomMessagePreviewer();
public:
// Clears displayed message.
virtual void clear() = 0;

View File

@ -2,6 +2,7 @@
#include "services/reddit/redditsubscription.h"
#include "definitions/definitions.h"
#include "services/reddit/redditserviceroot.h"
RedditSubscription::RedditSubscription(RootItem* parent) : Feed(parent), m_prefixedName(QString()) {}

View File

@ -2,6 +2,7 @@
#include "services/tt-rss/gui/ttrssaccountdetails.h"
#include "definitions/definitions.h"
#include "gui/guiutilities.h"
#include "network-web/networkfactory.h"
#include "services/tt-rss/definitions.h"

View File

@ -2,6 +2,7 @@
#include "services/tt-rss/gui/ttrssfeeddetails.h"
#include "definitions/definitions.h"
#include "services/abstract/category.h"
TtRssFeedDetails::TtRssFeedDetails(QWidget* parent) : QWidget(parent) {
@ -21,8 +22,9 @@ void TtRssFeedDetails::onUrlChanged(const QString& new_url) {
}
else if (!new_url.simplified().isEmpty()) {
// New url is not well-formed but is not empty on the other hand.
ui.m_txtUrl->setStatus(LineEditWithStatus::StatusType::Warning,
tr(R"(The URL does not meet standard pattern. Does your URL start with "http://" or "https://" prefix.)"));
ui.m_txtUrl->setStatus(
LineEditWithStatus::StatusType::Warning,
tr(R"(The URL does not meet standard pattern. Does your URL start with "http://" or "https://" prefix.)"));
}
else {
// New url is empty.
@ -30,16 +32,19 @@ void TtRssFeedDetails::onUrlChanged(const QString& new_url) {
}
}
void TtRssFeedDetails::loadCategories(const QList<Category*>& categories, RootItem* root_item, RootItem* parent_to_select) {
ui.m_cmbParentCategory->addItem(root_item->fullIcon(), root_item->title(), QVariant::fromValue((void*) root_item));
void TtRssFeedDetails::loadCategories(const QList<Category*>& categories,
RootItem* root_item,
RootItem* parent_to_select) {
ui.m_cmbParentCategory->addItem(root_item->fullIcon(), root_item->title(), QVariant::fromValue((void*)root_item));
for (Category* category : categories) {
ui.m_cmbParentCategory->addItem(category->fullIcon(), category->title(), QVariant::fromValue((void*) category));
ui.m_cmbParentCategory->addItem(category->fullIcon(), category->title(), QVariant::fromValue((void*)category));
}
if (parent_to_select != nullptr) {
if (parent_to_select->kind() == RootItem::Kind::Category) {
ui.m_cmbParentCategory->setCurrentIndex(ui.m_cmbParentCategory->findData(QVariant::fromValue((void*)parent_to_select)));
ui.m_cmbParentCategory
->setCurrentIndex(ui.m_cmbParentCategory->findData(QVariant::fromValue((void*)parent_to_select)));
}
else if (parent_to_select->kind() == RootItem::Kind::Feed) {
int target_item = ui.m_cmbParentCategory->findData(QVariant::fromValue((void*)parent_to_select->parent()));