From fd91a2d738fa6f0006651b58e718c849a2b779cd Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 4 Aug 2021 14:58:53 +0200 Subject: [PATCH] new sync algorithm now switchable, by default is off --- .../services/greader/greadernetwork.cpp | 10 ++++++- .../services/greader/greadernetwork.h | 4 +++ .../services/greader/greaderserviceroot.cpp | 14 ++++----- .../greader/gui/formeditgreaderaccount.cpp | 2 ++ .../greader/gui/greaderaccountdetails.cpp | 11 +++++-- .../greader/gui/greaderaccountdetails.ui | 30 +++++++++++++------ 6 files changed, 51 insertions(+), 20 deletions(-) diff --git a/src/librssguard/services/greader/greadernetwork.cpp b/src/librssguard/services/greader/greadernetwork.cpp index 595153e6b..1ffc1892a 100755 --- a/src/librssguard/services/greader/greadernetwork.cpp +++ b/src/librssguard/services/greader/greadernetwork.cpp @@ -20,7 +20,7 @@ GreaderNetwork::GreaderNetwork(QObject* parent) : QObject(parent), m_service(GreaderServiceRoot::Service::FreshRss), m_username(QString()), m_password(QString()), m_baseUrl(QString()), m_batchSize(GREADER_DEFAULT_BATCH_SIZE), m_downloadOnlyUnreadMessages(false), - m_prefetchedMessages({}), m_performGlobalFetching(false) { + m_prefetchedMessages({}), m_performGlobalFetching(false), m_intelligentSynchronization(false) { clearCredentials(); } @@ -1053,6 +1053,14 @@ QString GreaderNetwork::generateFullUrl(GreaderNetwork::Operations operation) co } } +bool GreaderNetwork::intelligentSynchronization() const { + return m_intelligentSynchronization; +} + +void GreaderNetwork::setIntelligentSynchronization(bool intelligent_synchronization) { + m_intelligentSynchronization = intelligent_synchronization; +} + bool GreaderNetwork::downloadOnlyUnreadMessages() const { return m_downloadOnlyUnreadMessages; } diff --git a/src/librssguard/services/greader/greadernetwork.h b/src/librssguard/services/greader/greadernetwork.h index 2c4994ebb..b8125e870 100755 --- a/src/librssguard/services/greader/greadernetwork.h +++ b/src/librssguard/services/greader/greadernetwork.h @@ -92,6 +92,9 @@ class GreaderNetwork : public QObject { bool downloadOnlyUnreadMessages() const; void setDownloadOnlyUnreadMessages(bool download_only_unread); + bool intelligentSynchronization() const; + void setIntelligentSynchronization(bool intelligent_synchronization); + private: QPair authHeader() const; @@ -120,6 +123,7 @@ class GreaderNetwork : public QObject { QString m_authToken; QList m_prefetchedMessages; bool m_performGlobalFetching; + bool m_intelligentSynchronization; }; #endif // GREADERNETWORK_H diff --git a/src/librssguard/services/greader/greaderserviceroot.cpp b/src/librssguard/services/greader/greaderserviceroot.cpp index c7fa913de..33d7c446f 100755 --- a/src/librssguard/services/greader/greaderserviceroot.cpp +++ b/src/librssguard/services/greader/greaderserviceroot.cpp @@ -44,6 +44,7 @@ QVariantHash GreaderServiceRoot::customDatabaseData() const { data["url"] = m_network->baseUrl(); data["batch_size"] = m_network->batchSize(); data["download_only_unread"] = m_network->downloadOnlyUnreadMessages(); + data["intelligent_synchronization"] = m_network->intelligentSynchronization(); return data; } @@ -55,13 +56,13 @@ void GreaderServiceRoot::setCustomDatabaseData(const QVariantHash& data) { m_network->setBaseUrl(data["url"].toString()); m_network->setBatchSize(data["batch_size"].toInt()); m_network->setDownloadOnlyUnreadMessages(data["download_only_unread"].toBool()); + m_network->setIntelligentSynchronization(data["intelligent_synchronization"].toBool()); } void GreaderServiceRoot::aboutToBeginFeedFetching(const QList& feeds, const QHash>& stated_messages, const QHash& tagged_messages) { - // Prefetch starred messages. - if (true /* intelligent downloading */) { + if (m_network->intelligentSynchronization()) { m_network->prepareFeedFetching(this, feeds, stated_messages, tagged_messages, networkProxy()); } else { @@ -72,13 +73,10 @@ void GreaderServiceRoot::aboutToBeginFeedFetching(const QList& feeds, QList GreaderServiceRoot::obtainNewMessages(Feed* feed, const QHash& stated_messages, const QHash& tagged_messages) { - Q_UNUSED(stated_messages) - Q_UNUSED(tagged_messages) - Feed::Status error = Feed::Status::Normal; - if (true /* intelligent downloading */ ) { - return network()->getMessagesIntelligently(this, + if (m_network->intelligentSynchronization()) { + return m_network->getMessagesIntelligently(this, feed->customId(), stated_messages, tagged_messages, @@ -86,7 +84,7 @@ QList GreaderServiceRoot::obtainNewMessages(Feed* feed, networkProxy()); } else { - return network()->streamContents(this, feed->customId(), error, networkProxy()); + return m_network->streamContents(this, feed->customId(), error, networkProxy()); } if (error != Feed::Status::NewMessages && error != Feed::Status::Normal) { diff --git a/src/librssguard/services/greader/gui/formeditgreaderaccount.cpp b/src/librssguard/services/greader/gui/formeditgreaderaccount.cpp index a1141a7c6..4d2ff07f0 100755 --- a/src/librssguard/services/greader/gui/formeditgreaderaccount.cpp +++ b/src/librssguard/services/greader/gui/formeditgreaderaccount.cpp @@ -29,6 +29,7 @@ void FormEditGreaderAccount::apply() { account()->network()->setBatchSize(m_details->m_ui.m_spinLimitMessages->value()); account()->network()->setDownloadOnlyUnreadMessages(m_details->m_ui.m_cbDownloadOnlyUnreadMessages->isChecked()); account()->network()->setService(m_details->service()); + account()->network()->setIntelligentSynchronization(m_details->m_ui.m_cbNewAlgorithm->isChecked()); account()->saveAccountDataToDatabase(); accept(); @@ -50,6 +51,7 @@ void FormEditGreaderAccount::loadAccountData() { m_details->m_ui.m_txtUrl->lineEdit()->setText(existing_root->network()->baseUrl()); m_details->m_ui.m_spinLimitMessages->setValue(existing_root->network()->batchSize()); m_details->m_ui.m_cbDownloadOnlyUnreadMessages->setChecked(existing_root->network()->downloadOnlyUnreadMessages()); + m_details->m_ui.m_cbNewAlgorithm->setChecked(existing_root->network()->intelligentSynchronization()); } void FormEditGreaderAccount::performTest() { diff --git a/src/librssguard/services/greader/gui/greaderaccountdetails.cpp b/src/librssguard/services/greader/gui/greaderaccountdetails.cpp index 8bd835141..c72893460 100755 --- a/src/librssguard/services/greader/gui/greaderaccountdetails.cpp +++ b/src/librssguard/services/greader/gui/greaderaccountdetails.cpp @@ -29,22 +29,29 @@ GreaderAccountDetails::GreaderAccountDetails(QWidget* parent) : QWidget(parent) m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Information, tr("No test done yet."), tr("Here, results of connection test are shown.")); + m_ui.m_lblLimitMessages->setText(tr("Limiting the number of fetched articles per feed makes fetching of " "articles faster, but if your feed contains more articles " "than specified limit, then some older articles might not be " "fetched at all.")); - GuiUtilities::setLabelAsNotice(*m_ui.m_lblLimitMessages, true); + m_ui.m_lblNewAlgorithm->setText(tr("If you select intelligent synchronization, then only not-yet-fetched " + "or updated articles are downloaded. Network usage is greatly reduced and " + "overall synchronization speed is greatly improved.")); + GuiUtilities::setLabelAsNotice(*m_ui.m_lblNewAlgorithm, false); + connect(m_ui.m_checkShowPassword, &QCheckBox::toggled, this, &GreaderAccountDetails::displayPassword); connect(m_ui.m_txtPassword->lineEdit(), &BaseLineEdit::textChanged, this, &GreaderAccountDetails::onPasswordChanged); connect(m_ui.m_txtUsername->lineEdit(), &BaseLineEdit::textChanged, this, &GreaderAccountDetails::onUsernameChanged); connect(m_ui.m_txtUrl->lineEdit(), &BaseLineEdit::textChanged, this, &GreaderAccountDetails::onUrlChanged); connect(m_ui.m_cmbService, QOverload::of(&QComboBox::currentIndexChanged), this, &GreaderAccountDetails::fillPredefinedUrl); + connect(m_ui.m_cbNewAlgorithm, &QCheckBox::toggled, m_ui.m_spinLimitMessages, &MessageCountSpinBox::setDisabled); setTabOrder(m_ui.m_cmbService, m_ui.m_txtUrl->lineEdit()); setTabOrder(m_ui.m_txtUrl->lineEdit(), m_ui.m_cbDownloadOnlyUnreadMessages); - setTabOrder(m_ui.m_cbDownloadOnlyUnreadMessages, m_ui.m_spinLimitMessages); + setTabOrder(m_ui.m_cbDownloadOnlyUnreadMessages, m_ui.m_cbNewAlgorithm); + setTabOrder(m_ui.m_cbNewAlgorithm, m_ui.m_spinLimitMessages); setTabOrder(m_ui.m_spinLimitMessages, m_ui.m_txtUsername->lineEdit()); setTabOrder(m_ui.m_txtUsername->lineEdit(), m_ui.m_txtPassword->lineEdit()); setTabOrder(m_ui.m_txtPassword->lineEdit(), m_ui.m_checkShowPassword); diff --git a/src/librssguard/services/greader/gui/greaderaccountdetails.ui b/src/librssguard/services/greader/gui/greaderaccountdetails.ui index 6232c3c96..d77677c3e 100755 --- a/src/librssguard/services/greader/gui/greaderaccountdetails.ui +++ b/src/librssguard/services/greader/gui/greaderaccountdetails.ui @@ -34,7 +34,7 @@ - + @@ -51,17 +51,14 @@ - + - - - true - + Some feeds require authentication, including GMail feeds. BASIC, NTLM-2 and DIGEST-MD5 authentication schemes are supported. @@ -112,7 +109,7 @@ - + @@ -136,7 +133,7 @@ - + Qt::Vertical @@ -156,6 +153,20 @@ + + + + Intelligent synchronization algorithm + + + + + + + true + + + @@ -178,11 +189,12 @@ + m_cmbService m_cbDownloadOnlyUnreadMessages + m_cbNewAlgorithm m_spinLimitMessages m_checkShowPassword m_btnTestSetup - m_cmbService