make it all work with qt6

This commit is contained in:
Martin Rotter 2021-10-29 13:01:52 +02:00
parent 0c753b493d
commit 729453a06a
24 changed files with 131 additions and 37 deletions

View file

@ -14,10 +14,10 @@ APP_URL_DOCUMENTATION = "https://github.com/martinrotter/rssguard/blob/m
APP_USERAGENT = "RSS Guard/$$APP_VERSION (github.com/martinrotter/rssguard)"
APP_DONATE_URL = "https://martinrotter.github.io/donate"
message(rssguard: Welcome RSS Guard qmake script.)
message($$MSG_PREFIX: Welcome RSS Guard qmake script.)
lessThan(QT_MAJOR_VERSION, 5)|lessThan(QT_MINOR_VERSION, 9) {
warning(rssguard: At least Qt \"5.9.0\" is required!!!)
!versionAtLeast(QT_VERSION, 5.9.0) {
warning($$MSG_PREFIX: At least Qt \"5.9.0\" is required!!!)
}
isEmpty(USE_WEBENGINE) {

View file

@ -26,7 +26,7 @@
<url type="donation">https://github.com/sponsors/martinrotter</url>
<content_rating type="oars-1.1" />
<releases>
<release version="4.0.4" date="2021-10-21"/>
<release version="4.0.4" date="2021-10-29"/>
</releases>
<content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">none</content_attribute>

View file

@ -104,7 +104,7 @@ QByteArray SimpleCrypt::encryptToByteArray(QByteArray plaintext) {
flags |= CryptoFlagChecksum;
QDataStream s(&integrityProtection, QIODevice::WriteOnly);
s << qChecksum(ba.constData(), ba.length());
s << qChecksum(ba);
}
else if (m_protectionMode == ProtectionHash) {
flags |= CryptoFlagHash;
@ -228,7 +228,7 @@ QByteArray SimpleCrypt::decryptToByteArray(QByteArray cypher) {
}
ba = ba.mid(2);
quint16 checksum = qChecksum(ba.constData(), ba.length());
quint16 checksum = qChecksum(ba);
integrityOk = (checksum == storedChecksum);
}

View file

@ -16,6 +16,7 @@
#include <QSqlError>
#include <QSqlField>
#include <QSqlQuery>
#include <QSqlResult>
#include <QVariant>
DatabaseFactory::DatabaseFactory(QObject* parent)
@ -82,6 +83,8 @@ DatabaseDriver* DatabaseFactory::driverForType(DatabaseDriver::DriverType d) con
QString DatabaseFactory::lastExecutedQuery(const QSqlQuery& query) {
QString str = query.lastQuery();
#if QT_VERSION_MAJOR == 5
QMapIterator<QString, QVariant> it(query.boundValues());
while (it.hasNext()) {
@ -95,6 +98,7 @@ QString DatabaseFactory::lastExecutedQuery(const QSqlQuery& query) {
str.replace(it.key(), it.value().toString());
}
}
#endif
return str;
}

View file

@ -1344,7 +1344,7 @@ QPair<int, int> DatabaseQueries::updateMessages(QSqlDatabase db,
for (int i = 0; i < msgs_to_insert.size(); i += 1000) {
QStringList vals;
int batch_length = std::min(1000, msgs_to_insert.size() - i);
int batch_length = std::min(1000, int(msgs_to_insert.size()) - i);
for (int l = i; l < (i + batch_length); l++) {
Message* msg = msgs_to_insert[l];

View file

@ -594,7 +594,7 @@ RootItem* FormMessageFiltersManager::selectedCategoryFeed() const {
Message FormMessageFiltersManager::testingMessage() const {
Message msg;
msg.m_feedId = NO_PARENT_CATEGORY;
msg.m_feedId = QString::number(NO_PARENT_CATEGORY);
msg.m_url = m_ui.m_txtSampleUrl->text();
msg.m_customId = m_ui.m_txtSampleUrl->text();
msg.m_title = m_ui.m_txtSampleTitle->text();

View file

@ -292,7 +292,7 @@ void MessagesView::initializeContextMenu() {
for (const ExternalTool& tool : qAsConst(tools)) {
QAction* act_tool = new QAction(QFileInfo(tool.executable()).fileName(), menu_ext_tools);
act_tool->setIcon(icon_provider.icon(tool.executable()));
act_tool->setIcon(icon_provider.icon(QFileInfo(tool.executable())));
act_tool->setToolTip(tool.executable());
act_tool->setData(QVariant::fromValue(tool));
menu_ext_tools->addAction(act_tool);

View file

@ -70,7 +70,12 @@ bool SettingsGui::eventFilter(QObject* obj, QEvent* e) {
if (e->type() == QEvent::Type::Drop) {
auto* drop_event = static_cast<QDropEvent*>(e);
if (drop_event->keyboardModifiers() != Qt::KeyboardModifier::NoModifier) {
#if QT_VERSION_MAJOR == 6
if (drop_event->modifiers() !=
#else
if (drop_event->keyboardModifiers() !=
#endif
Qt::KeyboardModifier::NoModifier) {
drop_event->setDropAction(Qt::DropAction::MoveAction);
}
}

View file

@ -19,6 +19,7 @@
#include <QTimer>
#include <QToolBar>
#include <QToolTip>
#include <QWebEngineProfile>
#include <QWebEngineSettings>
#include <QWidgetAction>
@ -118,10 +119,10 @@ void WebBrowser::reloadFontSettings() {
fon.fromString(qApp->settings()->value(GROUP(Messages),
SETTING(Messages::PreviewerFontStandard)).toString());
QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FontFamily::StandardFont, fon.family());
QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FontFamily::SerifFont, fon.family());
QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FontFamily::SansSerifFont, fon.family());
QWebEngineSettings::defaultSettings()->setFontSize(QWebEngineSettings::DefaultFontSize, fon.pointSize());
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, fon.pointSize());
}
void WebBrowser::increaseZoom() {
@ -215,6 +216,12 @@ void WebBrowser::initializeLayout() {
m_actionForward->setText(tr("Forward"));
m_actionReload->setText(tr("Reload"));
m_actionStop->setText(tr("Stop"));
m_actionBack->setIcon(qApp->icons()->fromTheme(QSL("go-previous")));
m_actionForward->setIcon(qApp->icons()->fromTheme(QSL("go-next")));
m_actionReload->setIcon(qApp->icons()->fromTheme(QSL("reload")));
m_actionStop->setIcon(qApp->icons()->fromTheme(QSL("process-stop")));
QWidgetAction* act_discover = new QWidgetAction(this);
m_actionOpenInSystemBrowser->setEnabled(false);
@ -228,6 +235,7 @@ void WebBrowser::initializeLayout() {
m_toolBar->addAction(m_actionOpenInSystemBrowser);
m_toolBar->addAction(act_discover);
m_toolBar->addWidget(m_txtLocation);
m_loadingProgress = new QProgressBar(this);
m_loadingProgress->setFixedHeight(5);
m_loadingProgress->setMinimum(0);
@ -240,7 +248,7 @@ void WebBrowser::initializeLayout() {
m_layout->addWidget(m_webView);
m_layout->addWidget(m_loadingProgress);
m_layout->addWidget(m_searchWidget);
m_layout->setMargin(0);
m_layout->setContentsMargins({ 0, 0, 0, 0 });
m_layout->setSpacing(0);
m_searchWidget->hide();

View file

@ -16,9 +16,15 @@
#include "network-web/webpage.h"
#include <QFileIconProvider>
#include <QOpenGLWidget>
#include <QTimer>
#if QT_VERSION_MAJOR == 6
#include <QWebEngineContextMenuRequest>
#else
#include <QOpenGLWidget>
#include <QWebEngineContextMenuData>
#endif
#include <QWheelEvent>
WebViewer::WebViewer(QWidget* parent) : QWebEngineView(parent), m_root(nullptr) {
@ -186,13 +192,22 @@ void WebViewer::clear() {
void WebViewer::contextMenuEvent(QContextMenuEvent* event) {
event->accept();
#if QT_VERSION_MAJOR == 6
QMenu* menu = createStandardContextMenu();
auto* menu_pointer = lastContextMenuRequest();
QWebEngineContextMenuRequest& menu_data = *menu_pointer;
#else
QMenu* menu = page()->createStandardContextMenu();
QWebEngineContextMenuData menu_data = page()->contextMenuData();
#endif
if (menu_data.linkUrl().isValid()) {
QString link_url = menu_data.linkUrl().toString();
// Add option to open link in external viewe
menu->addAction(qApp->icons()->fromTheme(QSL("document-open")), tr("Open link in external browser"), [menu_data]() {
qApp->web()->openUrlInExternalBrowser(menu_data.linkUrl().toString());
menu->addAction(qApp->icons()->fromTheme(QSL("document-open")), tr("Open link in external browser"), [link_url]() {
qApp->web()->openUrlInExternalBrowser(link_url);
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::BringAppToFrontAfterMessageOpenedExternally)).toBool()) {
QTimer::singleShot(1000, qApp, []() {
@ -203,6 +218,7 @@ void WebViewer::contextMenuEvent(QContextMenuEvent* event) {
}
if (menu_data.mediaUrl().isValid() || menu_data.linkUrl().isValid()) {
QString media_link = menu_data.mediaUrl().isValid() ? menu_data.mediaUrl().toString() : menu_data.linkUrl().toString();
QFileIconProvider icon_provider;
QMenu* menu_ext_tools = new QMenu(tr("Open with external tool"), menu);
auto tools = ExternalTool::toolsFromSettings();
@ -212,13 +228,13 @@ void WebViewer::contextMenuEvent(QContextMenuEvent* event) {
for (const ExternalTool& tool : qAsConst(tools)) {
QAction* act_tool = new QAction(QFileInfo(tool.executable()).fileName(), menu_ext_tools);
act_tool->setIcon(icon_provider.icon(tool.executable()));
act_tool->setIcon(icon_provider.icon(QFileInfo(tool.executable())));
act_tool->setToolTip(tool.executable());
act_tool->setData(QVariant::fromValue(tool));
menu_ext_tools->addAction(act_tool);
connect(act_tool, &QAction::triggered, this, [this, act_tool, menu_data]() {
openUrlWithExternalTool(act_tool->data().value<ExternalTool>(), menu_data);
connect(act_tool, &QAction::triggered, this, [this, act_tool, media_link]() {
openUrlWithExternalTool(act_tool->data().value<ExternalTool>(), media_link);
});
}
@ -296,8 +312,8 @@ bool WebViewer::eventFilter(QObject* object, QEvent* event) {
return false;
}
void WebViewer::openUrlWithExternalTool(ExternalTool tool, const QWebEngineContextMenuData& target) {
tool.run(target.mediaUrl().isValid() ? target.mediaUrl().toString() : target.linkUrl().toString());
void WebViewer::openUrlWithExternalTool(ExternalTool tool, const QString& target_url) {
tool.run(target_url);
}
RootItem* WebViewer::root() const {

View file

@ -41,7 +41,7 @@ class WebViewer : public QWebEngineView {
virtual bool eventFilter(QObject* object, QEvent* event);
private slots:
void openUrlWithExternalTool(ExternalTool tool, const QWebEngineContextMenuData& target);
void openUrlWithExternalTool(ExternalTool tool, const QString& target_url);
private:
RootItem* m_root;

View file

@ -40,7 +40,12 @@
#include "network-web/adblock/adblockmanager.h"
#include "network-web/networkurlinterceptor.h"
#if QT_VERSION_MAJOR == 6
#include <QWebEngineDownloadRequest>
#else
#include <QWebEngineDownloadItem>
#endif
#include <QWebEngineProfile>
#endif
@ -606,7 +611,11 @@ void Application::restart() {
#if defined(USE_WEBENGINE)
#if QT_VERSION_MAJOR == 6
void Application::downloadRequested(QWebEngineDownloadRequest* download_item) {
#else
void Application::downloadRequested(QWebEngineDownloadItem* download_item) {
#endif
downloadManager()->download(download_item->url());
download_item->cancel();
download_item->deleteLater();

View file

@ -33,7 +33,13 @@ class FormMain;
class IconFactory;
class QAction;
class Mutex;
#if QT_VERSION_MAJOR == 6
class QWebEngineDownloadRequest;
#else
class QWebEngineDownloadItem;
#endif
class WebFactory;
class NotificationFactory;
@ -140,7 +146,12 @@ class RSSGUARD_DLLSPEC Application : public SingleApplication {
void showMessagesNumber(int unread_messages, bool any_feed_has_unread_messages);
#if defined(USE_WEBENGINE)
#if QT_VERSION_MAJOR == 6
void downloadRequested(QWebEngineDownloadRequest* download_item);
#else
void downloadRequested(QWebEngineDownloadItem* download_item);
#endif
void onAdBlockFailure();
#endif

View file

@ -8,6 +8,10 @@
#if !defined(Q_OS_OS2)
#include <QMediaPlayer>
#if QT_VERSION_MAJOR == 6
#include <QAudioOutput>
#endif
#endif
Notification::Notification(Notification::Event event, bool balloon, const QString& sound_path, int volume)
@ -34,6 +38,29 @@ void Notification::playSound(Application* app) const {
#if !defined(Q_OS_OS2)
QMediaPlayer* play = new QMediaPlayer(app);
#if QT_VERSION_MAJOR == 6
QAudioOutput* out = new QAudioOutput(app);
play->setAudioOutput(out);
QObject::connect(play, &QMediaPlayer::playbackStateChanged, play, [play, out](QMediaPlayer::PlaybackState state) {
if (state == QMediaPlayer::PlaybackState::StoppedState) {
out->deleteLater();
play->deleteLater();
}
});
if (m_soundPath.startsWith(QSL(":"))) {
play->setSource(QUrl(QSL("qrc") + m_soundPath));
}
else {
play->setSource(QUrl::fromLocalFile(QDir::toNativeSeparators(app->replaceDataUserDataFolderPlaceholder(m_soundPath))));
}
play->audioOutput()->setVolume((m_volume * 1.0f) / 100.0f);
play->play();
#else
QObject::connect(play, &QMediaPlayer::stateChanged, play, [play](QMediaPlayer::State state) {
if (state == QMediaPlayer::State::StoppedState) {
play->deleteLater();
@ -52,6 +79,7 @@ void Notification::playSound(Application* app) const {
play->setVolume(m_volume);
play->play();
#endif
#endif
}
}

View file

@ -51,7 +51,7 @@ QString RegexFactory::wildcardToRegularExpression(const QString& pattern) {
int i = 0;
const QChar* wc = pattern.unicode();
#ifdef Q_OS_WIN
#if defined(Q_OS_WIN)
const QLatin1Char nativePathSeparator('\\');
const QLatin1String starEscape("[^/\\\\]*");
const QLatin1String questionMarkEscape("[^/\\\\]");
@ -74,7 +74,7 @@ QString RegexFactory::wildcardToRegularExpression(const QString& pattern) {
break;
case '\\':
#ifdef Q_OS_WIN
#if defined(Q_OS_WIN)
case '/':
rx += QLatin1String("[/\\\\]");
break;

View file

@ -582,7 +582,7 @@ void DownloadManager::updateRow(DownloadItem* item) {
m_iconProvider.reset(new QFileIconProvider());
}
QIcon icon = m_iconProvider->icon(item->m_output.fileName());
QIcon icon = m_iconProvider->icon(QFileInfo(item->m_output.fileName()));
if (icon.isNull()) {
icon = style()->standardIcon(QStyle::StandardPixmap::SP_FileIcon);

View file

@ -17,7 +17,11 @@
#include "network-web/networkurlinterceptor.h"
#include "network-web/urlinterceptor.h"
#if QT_VERSION_MAJOR == 6
#include <QWebEngineDownloadRequest>
#else
#include <QWebEngineDownloadItem>
#endif
#include <QWebEngineProfile>
#include <QWebEngineScript>
#include <QWebEngineScriptCollection>
@ -163,7 +167,7 @@ QString WebFactory::unescapeHtml(const QString& html) {
}
else {
// Failed to convert to number, leave intact.
output.append(html.midRef(pos, pos_end - pos + 1));
output.append(html.mid(pos, pos_end - pos + 1));
}
pos = pos_end + 1;

View file

@ -24,7 +24,11 @@ WebPage::WebPage(QObject* parent) : QWebEnginePage(parent) {
}
WebViewer* WebPage::view() const {
#if QT_VERSION_MAJOR == 6
return qobject_cast<WebViewer*>(QWebEngineView::forPage(this));
#else
return qobject_cast<WebViewer*>(QWebEnginePage::view());
#endif
}
void WebPage::hideUnwantedElements() {

View file

@ -289,10 +289,18 @@ class ServiceRoot : public RootItem {
QNetworkProxy m_networkProxy;
};
#if QT_VERSION_MAJOR == 6
inline size_t qHash(ServiceRoot::BagOfMessages key, size_t seed) {
return ::qHash(static_cast<uint>(key), seed);
}
#else
inline uint qHash(ServiceRoot::BagOfMessages key, uint seed) {
return ::qHash(static_cast<uint>(key), seed);
}
#endif
ServiceRoot::LabelOperation operator|(ServiceRoot::LabelOperation lhs, ServiceRoot::LabelOperation rhs);
ServiceRoot::LabelOperation operator&(ServiceRoot::LabelOperation lhs, ServiceRoot::LabelOperation rhs);

View file

@ -50,7 +50,7 @@ QNetworkReply::NetworkError GreaderNetwork::editLabels(const QString& state,
trimmed_ids.append(QSL("i=") + id);
}
QStringList working_subset; working_subset.reserve(std::min(GREADER_API_EDIT_TAG_BATCH, trimmed_ids.size()));
QStringList working_subset; working_subset.reserve(std::min(GREADER_API_EDIT_TAG_BATCH, int(trimmed_ids.size())));
// Now, we perform messages update in batches (max X messages per batch).
while (!trimmed_ids.isEmpty()) {

View file

@ -73,8 +73,6 @@ Message AtomParser::extractMessage(const QDomElement& msg_element, const QDateTi
QString raw_contents;
QTextStream str(&raw_contents);
str.setCodec(DEFAULT_FEED_ENCODING);
msg_element.save(str, 0, QDomNode::EncodingPolicy::EncodingFromTextStream);
new_message.m_rawContents = raw_contents;

View file

@ -52,8 +52,6 @@ Message RdfParser::extractMessage(const QDomElement& msg_element, const QDateTim
QString raw_contents;
QTextStream str(&raw_contents);
str.setCodec(DEFAULT_FEED_ENCODING);
msg_element.save(str, 0, QDomNode::EncodingPolicy::EncodingFromTextStream);
new_message.m_rawContents = raw_contents;

View file

@ -86,8 +86,6 @@ Message RssParser::extractMessage(const QDomElement& msg_element, const QDateTim
QString raw_contents;
QTextStream str(&raw_contents);
str.setCodec(DEFAULT_FEED_ENCODING);
msg_element.save(str, 0, QDomNode::EncodingPolicy::EncodingFromTextStream);
new_message.m_rawContents = raw_contents;

View file

@ -9,12 +9,13 @@
#include "services/abstract/label.h"
#if defined(Q_OS_WIN)
#if QT_VERSION_MAJOR == 5
#include <QtPlatformHeaders/QWindowsWindowFunctions>
#endif
#endif
#if defined(Q_OS_MACOS)
extern void disableWindowTabbing();
#endif
int main(int argc, char* argv[]) {
@ -73,8 +74,10 @@ int main(int argc, char* argv[]) {
qApp->reactOnForeignNotifications();
#ifdef Q_OS_WIN
#if defined(Q_OS_WIN)
#if QT_VERSION_MAJOR == 5
QWindowsWindowFunctions::setWindowActivationBehavior(QWindowsWindowFunctions::AlwaysActivateWindow);
#endif
#endif
FormMain main_window;