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> <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.2.4" date="2022-09-05"/> <release version="4.2.4" date="2022-09-06"/>
</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>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -43,6 +43,7 @@ class MessagePreviewer : public QWidget {
public slots: public slots:
void setToolbarsVisible(bool visible); void setToolbarsVisible(bool visible);
void clear(); void clear();
void showItemInfo(RootItem* item);
void hideToolbar(); void hideToolbar();
void loadUrl(const QString& url); void loadUrl(const QString& url);
void loadMessage(const Message& message, RootItem* root); void loadMessage(const Message& message, RootItem* root);

View File

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

View File

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

View File

@ -50,8 +50,6 @@
#else #else
#include <QWebEngineDownloadItem> #include <QWebEngineDownloadItem>
#endif #endif
#include <QWebEngineProfile>
#endif #endif
#if defined(Q_OS_WIN) #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"); const QString web_data_root = userDataFolder() + QDir::separator() + QSL("web");
QWebEngineProfile::defaultProfile()->setCachePath(web_data_root + QDir::separator() + QSL("cache")); m_webFactory->engineProfile()->setCachePath(web_data_root + QDir::separator() + QSL("cache"));
QWebEngineProfile::defaultProfile()->setPersistentStoragePath(web_data_root + QDir::separator() + QSL("storage")); m_webFactory->engineProfile()->setHttpCacheType(QWebEngineProfile::HttpCacheType::DiskHttpCache);
QWebEngineProfile::defaultProfile()->setHttpUserAgent(QString(HTTP_COMPLETE_USERAGENT)); 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:" 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(), connect(m_webFactory->engineProfile(), &QWebEngineProfile::downloadRequested, this, &Application::downloadRequested);
&QWebEngineProfile::downloadRequested,
this,
&Application::downloadRequested);
#endif #endif
connect(m_webFactory->adBlock(), &AdBlockManager::processTerminated, this, &Application::onAdBlockFailure); connect(m_webFactory->adBlock(), &AdBlockManager::processTerminated, this, &Application::onAdBlockFailure);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -17,7 +17,6 @@ class CustomMessagePreviewer : public QWidget {
virtual ~CustomMessagePreviewer(); virtual ~CustomMessagePreviewer();
public: public:
// Clears displayed message. // Clears displayed message.
virtual void clear() = 0; virtual void clear() = 0;

View File

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

View File

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

View File

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