implement #556
This commit is contained in:
parent
94c9dd71c4
commit
1811a03414
@ -26,7 +26,7 @@
|
|||||||
<url type="donation">https://github.com/sponsors/martinrotter</url>
|
<url type="donation">https://github.com/sponsors/martinrotter</url>
|
||||||
<content_rating type="oars-1.1" />
|
<content_rating type="oars-1.1" />
|
||||||
<releases>
|
<releases>
|
||||||
<release version="4.0.4" date="2022-01-04"/>
|
<release version="4.0.4" date="2022-01-05"/>
|
||||||
</releases>
|
</releases>
|
||||||
<content_rating type="oars-1.0">
|
<content_rating type="oars-1.0">
|
||||||
<content_attribute id="violence-cartoon">none</content_attribute>
|
<content_attribute id="violence-cartoon">none</content_attribute>
|
||||||
|
@ -13,7 +13,26 @@
|
|||||||
#include <QNetworkCookie>
|
#include <QNetworkCookie>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
|
||||||
|
#if defined(USE_WEBENGINE)
|
||||||
|
#include <QWebEngineCookieStore>
|
||||||
|
#include <QWebEngineProfile>
|
||||||
|
#endif
|
||||||
|
|
||||||
CookieJar::CookieJar(QObject* parent) : QNetworkCookieJar(parent) {
|
CookieJar::CookieJar(QObject* parent) : QNetworkCookieJar(parent) {
|
||||||
|
#if defined(USE_WEBENGINE)
|
||||||
|
QWebEngineProfile::defaultProfile()->setPersistentCookiesPolicy(QWebEngineProfile::PersistentCookiesPolicy::NoPersistentCookies);
|
||||||
|
|
||||||
|
m_webEngineCookies = QWebEngineProfile::defaultProfile()->cookieStore();
|
||||||
|
|
||||||
|
// When cookies change in WebEngine, then change in main cookie jar too.
|
||||||
|
connect(m_webEngineCookies, &QWebEngineCookieStore::cookieAdded, this, [=](const QNetworkCookie& cookie) {
|
||||||
|
insertCookieInternal(cookie, false, true);
|
||||||
|
});
|
||||||
|
connect(m_webEngineCookies, &QWebEngineCookieStore::cookieRemoved, this, [=](const QNetworkCookie& cookie) {
|
||||||
|
deleteCookieInternal(cookie, false);
|
||||||
|
});
|
||||||
|
#endif
|
||||||
|
|
||||||
loadCookies();
|
loadCookies();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +75,7 @@ void CookieJar::loadCookies() {
|
|||||||
auto cookie = QNetworkCookie::parseCookies(encoded);
|
auto cookie = QNetworkCookie::parseCookies(encoded);
|
||||||
|
|
||||||
if (!cookie.isEmpty()) {
|
if (!cookie.isEmpty()) {
|
||||||
if (!QNetworkCookieJar::insertCookie(cookie.at(0))) {
|
if (!insertCookieInternal(cookie.at(0), true, false)) {
|
||||||
qCriticalNN << LOGSEC_NETWORK
|
qCriticalNN << LOGSEC_NETWORK
|
||||||
<< "Failed to load cookie"
|
<< "Failed to load cookie"
|
||||||
<< QUOTE_W_SPACE(cookie_key)
|
<< QUOTE_W_SPACE(cookie_key)
|
||||||
@ -95,32 +114,70 @@ bool CookieJar::setCookiesFromUrl(const QList<QNetworkCookie>& cookie_list, cons
|
|||||||
return QNetworkCookieJar::setCookiesFromUrl(cookie_list, url);
|
return QNetworkCookieJar::setCookiesFromUrl(cookie_list, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CookieJar::insertCookie(const QNetworkCookie& cookie) {
|
bool CookieJar::insertCookieInternal(const QNetworkCookie& cookie, bool notify_others, bool should_save) {
|
||||||
auto result = QNetworkCookieJar::insertCookie(cookie);
|
auto result = QNetworkCookieJar::insertCookie(cookie);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
|
if (should_save) {
|
||||||
saveCookies();
|
saveCookies();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_WEBENGINE)
|
||||||
|
if (notify_others) {
|
||||||
|
m_webEngineCookies->setCookie(cookie);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
Q_UNUSED(notify_others)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CookieJar::updateCookie(const QNetworkCookie& cookie) {
|
bool CookieJar::updateCookieInternal(const QNetworkCookie& cookie, bool notify_others) {
|
||||||
auto result = QNetworkCookieJar::updateCookie(cookie);
|
auto result = QNetworkCookieJar::updateCookie(cookie);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
saveCookies();
|
saveCookies();
|
||||||
|
|
||||||
|
#if defined(USE_WEBENGINE)
|
||||||
|
if (notify_others) {
|
||||||
|
m_webEngineCookies->setCookie(cookie);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
Q_UNUSED(notify_others)
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CookieJar::deleteCookie(const QNetworkCookie& cookie) {
|
bool CookieJar::deleteCookieInternal(const QNetworkCookie& cookie, bool notify_others) {
|
||||||
auto result = QNetworkCookieJar::deleteCookie(cookie);
|
auto result = QNetworkCookieJar::deleteCookie(cookie);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
saveCookies();
|
saveCookies();
|
||||||
|
|
||||||
|
#if defined(USE_WEBENGINE)
|
||||||
|
if (notify_others) {
|
||||||
|
m_webEngineCookies->deleteCookie(cookie);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
Q_UNUSED(notify_others)
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CookieJar::insertCookie(const QNetworkCookie& cookie) {
|
||||||
|
return insertCookieInternal(cookie, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CookieJar::deleteCookie(const QNetworkCookie& cookie) {
|
||||||
|
return deleteCookieInternal(cookie, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CookieJar::updateCookie(const QNetworkCookie& cookie) {
|
||||||
|
return updateCookieInternal(cookie, true);
|
||||||
|
}
|
||||||
|
@ -5,6 +5,10 @@
|
|||||||
|
|
||||||
#include <QNetworkCookieJar>
|
#include <QNetworkCookieJar>
|
||||||
|
|
||||||
|
#if defined(USE_WEBENGINE)
|
||||||
|
class QWebEngineCookieStore;
|
||||||
|
#endif
|
||||||
|
|
||||||
class CookieJar : public QNetworkCookieJar {
|
class CookieJar : public QNetworkCookieJar {
|
||||||
public:
|
public:
|
||||||
explicit CookieJar(QObject* parent = nullptr);
|
explicit CookieJar(QObject* parent = nullptr);
|
||||||
@ -19,8 +23,17 @@ class CookieJar : public QNetworkCookieJar {
|
|||||||
static QList<QNetworkCookie> extractCookiesFromUrl(const QString& url);
|
static QList<QNetworkCookie> extractCookiesFromUrl(const QString& url);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool insertCookieInternal(const QNetworkCookie& cookie, bool notify_others, bool should_save);
|
||||||
|
bool updateCookieInternal(const QNetworkCookie& cookie, bool notify_others);
|
||||||
|
bool deleteCookieInternal(const QNetworkCookie& cookie, bool notify_others);
|
||||||
|
|
||||||
void loadCookies();
|
void loadCookies();
|
||||||
void saveCookies();
|
void saveCookies();
|
||||||
|
|
||||||
|
private:
|
||||||
|
#if defined(USE_WEBENGINE)
|
||||||
|
QWebEngineCookieStore * m_webEngineCookies;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // COOKIEJAR_H
|
#endif // COOKIEJAR_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user