From 35f893629251dc0aef005cbaccf81ac00605ca1e Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 3 Jun 2020 14:13:51 +0200 Subject: [PATCH] Configurable delay for feeds update after app start - fixes #193. --- src/librssguard/definitions/definitions.h | 2 +- .../gui/settings/settingsfeedsmessages.cpp | 10 ++ .../gui/settings/settingsfeedsmessages.ui | 108 ++++++++++++++---- src/librssguard/gui/timespinbox.cpp | 39 +++++-- src/librssguard/gui/timespinbox.h | 11 ++ src/librssguard/miscellaneous/feedreader.cpp | 4 +- src/librssguard/miscellaneous/feedreader.h | 4 - src/librssguard/miscellaneous/settings.cpp | 5 +- src/librssguard/miscellaneous/settings.h | 4 + 9 files changed, 148 insertions(+), 39 deletions(-) diff --git a/src/librssguard/definitions/definitions.h b/src/librssguard/definitions/definitions.h index dd3d8bcb8..541bf9d4d 100755 --- a/src/librssguard/definitions/definitions.h +++ b/src/librssguard/definitions/definitions.h @@ -52,7 +52,7 @@ #define MIN_CATEGORY_NAME_LENGTH 1 #define DEFAULT_AUTO_UPDATE_INTERVAL 15 #define AUTO_UPDATE_INTERVAL 60000 -#define STARTUP_UPDATE_DELAY 30000 +#define STARTUP_UPDATE_DELAY 3.0 // In seconds. #define TIMEZONE_OFFSET_LIMIT 6 #define CHANGE_EVENT_DELAY 250 #define FLAG_ICON_SUBFOLDER "flags" diff --git a/src/librssguard/gui/settings/settingsfeedsmessages.cpp b/src/librssguard/gui/settings/settingsfeedsmessages.cpp index f5d55bb34..34ba1f5d3 100644 --- a/src/librssguard/gui/settings/settingsfeedsmessages.cpp +++ b/src/librssguard/gui/settings/settingsfeedsmessages.cpp @@ -20,6 +20,8 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent : SettingsPanel(settings, parent), m_ui(new Ui::SettingsFeedsMessages) { m_ui->setupUi(this); + m_ui->m_spinStartupUpdateDelay->setMode(TimeSpinBox::Mode::MinutesSeconds); + initializeMessageDateFormats(); GuiUtilities::setLabelAsNotice(*m_ui->label_9, false); @@ -44,6 +46,8 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent connect(m_ui->m_checkUpdateAllFeedsOnStartup, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_spinAutoUpdateInterval, static_cast(&QDoubleSpinBox::valueChanged), this, &SettingsFeedsMessages::dirtifySettings); + connect(m_ui->m_spinStartupUpdateDelay, static_cast(&QDoubleSpinBox::valueChanged), + this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_spinHeightImageAttachments, static_cast(&QSpinBox::valueChanged), this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_spinHeightRowsMessages, static_cast(&QSpinBox::valueChanged), @@ -51,6 +55,7 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent connect(m_ui->m_spinHeightRowsFeeds, static_cast(&QSpinBox::valueChanged), this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkAutoUpdate, &QCheckBox::toggled, m_ui->m_spinAutoUpdateInterval, &TimeSpinBox::setEnabled); + connect(m_ui->m_checkUpdateAllFeedsOnStartup, &QCheckBox::toggled, m_ui->m_spinStartupUpdateDelay, &TimeSpinBox::setEnabled); connect(m_ui->m_spinFeedUpdateTimeout, static_cast(&QSpinBox::valueChanged), this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_cmbMessagesDateTimeFormat, static_cast(&QComboBox::currentIndexChanged), this, @@ -126,6 +131,10 @@ void SettingsFeedsMessages::loadSettings() { m_ui->m_spinAutoUpdateInterval->setValue(settings()->value(GROUP(Feeds), SETTING(Feeds::AutoUpdateInterval)).toInt()); m_ui->m_spinFeedUpdateTimeout->setValue(settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt()); m_ui->m_checkUpdateAllFeedsOnStartup->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateOnStartup)).toBool()); + + auto aa = settings()->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateStartupDelay)).toDouble(); + + m_ui->m_spinStartupUpdateDelay->setValue(settings()->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateStartupDelay)).toDouble()); m_ui->m_cmbCountsFeedList->addItems(QStringList() << "(%unread)" << "[%unread]" << "%unread/%all" << "%unread-%all" << "[%unread|%all]"); m_ui->m_cmbCountsFeedList->setEditText(settings()->value(GROUP(Feeds), SETTING(Feeds::CountFormat)).toString()); m_ui->m_spinHeightImageAttachments->setValue(settings()->value(GROUP(Messages), SETTING(Messages::MessageHeadImageHeight)).toInt()); @@ -181,6 +190,7 @@ void SettingsFeedsMessages::saveSettings() { settings()->setValue(GROUP(Feeds), Feeds::AutoUpdateInterval, m_ui->m_spinAutoUpdateInterval->value()); settings()->setValue(GROUP(Feeds), Feeds::UpdateTimeout, m_ui->m_spinFeedUpdateTimeout->value()); settings()->setValue(GROUP(Feeds), Feeds::FeedsUpdateOnStartup, m_ui->m_checkUpdateAllFeedsOnStartup->isChecked()); + settings()->setValue(GROUP(Feeds), Feeds::FeedsUpdateStartupDelay, m_ui->m_spinStartupUpdateDelay->value()); settings()->setValue(GROUP(Feeds), Feeds::CountFormat, m_ui->m_cmbCountsFeedList->currentText()); settings()->setValue(GROUP(Messages), Messages::UseCustomDate, m_ui->m_checkMessagesDateTimeFormat->isChecked()); settings()->setValue(GROUP(Messages), Messages::MessageHeadImageHeight, m_ui->m_spinHeightImageAttachments->value()); diff --git a/src/librssguard/gui/settings/settingsfeedsmessages.ui b/src/librssguard/gui/settings/settingsfeedsmessages.ui index 9488a540c..f6f0546bb 100644 --- a/src/librssguard/gui/settings/settingsfeedsmessages.ui +++ b/src/librssguard/gui/settings/settingsfeedsmessages.ui @@ -7,7 +7,7 @@ 0 0 651 - 478 + 497 @@ -34,30 +34,16 @@ - - - Update all feed on application startup - - - - - - - Enable "auto-update started" notification - - - - - + - + - Auto-update all feeds every + Update all feed on application startup with initial delay of - + false @@ -77,6 +63,20 @@ + + + + Enable "auto-update started" notification + + + + + + + Only auto-update when application is unfocused + + + @@ -88,6 +88,9 @@ Font preview + + m_btnChangeFeedListFont + @@ -181,6 +184,36 @@ + + + + + + Auto-update all feeds every + + + + + + + false + + + + 250 + 0 + + + + false + + + true + + + + + @@ -199,12 +232,18 @@ - - - - Only auto-update when application is unfocused + + + + Qt::Vertical - + + + 20 + 40 + + + @@ -311,6 +350,9 @@ Font preview + + m_btnChangeMessageListFont + @@ -334,6 +376,9 @@ Font preview + + m_btnChangeMessagesFont + @@ -348,6 +393,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -364,9 +422,11 @@ m_tabFeedsMessages m_checkUpdateAllFeedsOnStartup + m_spinStartupUpdateDelay m_checkAutoUpdateNotification m_checkAutoUpdate m_spinAutoUpdateInterval + m_checkAutoUpdateOnlyUnfocused m_btnChangeFeedListFont m_spinFeedUpdateTimeout m_spinHeightRowsFeeds diff --git a/src/librssguard/gui/timespinbox.cpp b/src/librssguard/gui/timespinbox.cpp index e5afcfd8e..0fcaca078 100644 --- a/src/librssguard/gui/timespinbox.cpp +++ b/src/librssguard/gui/timespinbox.cpp @@ -5,10 +5,10 @@ #include TimeSpinBox::TimeSpinBox(QWidget* parent) : QDoubleSpinBox(parent) { - setMinimum(3.0); setAccelerated(true); - setDecimals(0); + setMinimum(3.0); setMaximum(10000000.0); + setMode(TimeSpinBox::Mode::HoursMinutes); } double TimeSpinBox::valueFromText(const QString& text) const { @@ -44,13 +44,26 @@ double TimeSpinBox::valueFromText(const QString& text) const { } QString TimeSpinBox::textFromValue(double val) const { - int minutes_total = int(val); - int minutes_val = minutes_total % 60; - int hours_val = (minutes_total - minutes_val) / 60; - QString hours = tr("%n hour(s)", "", hours_val); - QString minutes = tr("%n minute(s)", "", minutes_val); + if (mode() == TimeSpinBox::Mode::HoursMinutes) { + // "val" is number of minutes. + int minutes_total = int(val); + int minutes_val = minutes_total % 60; + int hours_val = (minutes_total - minutes_val) / 60; + QString hours = tr("%n hour(s)", "", hours_val); + QString minutes = tr("%n minute(s)", "", minutes_val); - return hours + tr(" and ") + minutes; + return hours + tr(" and ") + minutes; + } + else { + // "val" is number of seconds. + int seconds_val = int(val); + int minutes_total = seconds_val / 60; + int seconds_total = seconds_val - (minutes_total * 60); + QString seconds = tr("%n seconds(s)", "", seconds_total); + QString minutes = tr("%n minute(s)", "", minutes_total); + + return minutes + tr(" and ") + seconds; + } } void TimeSpinBox::fixup(QString& input) const { @@ -66,3 +79,13 @@ QValidator::State TimeSpinBox::validate(QString& input, int& pos) const { Q_UNUSED(pos) return (valueFromText(input) != -1.0) ? QValidator::Acceptable : QValidator::Intermediate; } + +TimeSpinBox::Mode TimeSpinBox::mode() const { + return m_mode; +} + +void TimeSpinBox::setMode(const TimeSpinBox::Mode& mode) { + m_mode = mode; + + setValue(value()); +} diff --git a/src/librssguard/gui/timespinbox.h b/src/librssguard/gui/timespinbox.h index 83a766e37..4caf6dad1 100644 --- a/src/librssguard/gui/timespinbox.h +++ b/src/librssguard/gui/timespinbox.h @@ -9,12 +9,23 @@ class TimeSpinBox : public QDoubleSpinBox { Q_OBJECT public: + enum class Mode { + HoursMinutes, + MinutesSeconds + }; + explicit TimeSpinBox(QWidget* parent = nullptr); double valueFromText(const QString& text) const; QString textFromValue(double val) const; void fixup(QString& input) const; QValidator::State validate(QString& input, int& pos) const; + + Mode mode() const; + void setMode(const TimeSpinBox::Mode& mode); + + private: + Mode m_mode; }; #endif // TIMESPINBOX_H diff --git a/src/librssguard/miscellaneous/feedreader.cpp b/src/librssguard/miscellaneous/feedreader.cpp index 07fbd0a4b..d73e84e6f 100644 --- a/src/librssguard/miscellaneous/feedreader.cpp +++ b/src/librssguard/miscellaneous/feedreader.cpp @@ -35,7 +35,9 @@ FeedReader::FeedReader(QObject* parent) if (qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateOnStartup)).toBool()) { qDebug("Requesting update for all feeds on application startup."); - QTimer::singleShot(STARTUP_UPDATE_DELAY, this, SLOT(updateAllFeeds())); + QTimer::singleShot(qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateStartupDelay)).toDouble() * 1000, + this, + &FeedReader::updateAllFeeds); } } diff --git a/src/librssguard/miscellaneous/feedreader.h b/src/librssguard/miscellaneous/feedreader.h index 098a9983d..94cd49224 100644 --- a/src/librssguard/miscellaneous/feedreader.h +++ b/src/librssguard/miscellaneous/feedreader.h @@ -57,15 +57,11 @@ class RSSGUARD_DLLSPEC FeedReader : public QObject { int autoUpdateInitialInterval() const; public slots: - - // Schedules all feeds from all accounts for update. void updateAllFeeds(); void stopRunningFeedUpdate(); void quit(); private slots: - - // Is executed when next auto-update round could be done. void executeNextAutoUpdate(); void checkServicesForAsyncOperations(); void asyncCacheSaveFinished(); diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index dd72066b1..a7162cbdf 100755 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -55,6 +55,10 @@ DKEY Feeds::FeedsUpdateOnStartup = "feeds_update_on_startup"; DVALUE(bool) Feeds::FeedsUpdateOnStartupDef = false; +DKEY Feeds::FeedsUpdateStartupDelay = "feeds_update_on_startup_delay"; + +DVALUE(double) Feeds::FeedsUpdateStartupDelayDef = STARTUP_UPDATE_DELAY; + DKEY Feeds::ShowOnlyUnreadFeeds = "show_only_unread_feeds"; DVALUE(bool) Feeds::ShowOnlyUnreadFeedsDef = false; @@ -446,7 +450,6 @@ SettingsProperties Settings::determineProperties() { // We will use PORTABLE settings only and only if it is available and NON-PORTABLE // settings was not initialized before. #if defined (Q_OS_LINUX) || defined (Q_OS_ANDROID) || defined (Q_OS_MACOS) - // DO NOT use portable settings for Linux, it is really not used on that platform. const bool will_we_use_portable_settings = false; #else diff --git a/src/librssguard/miscellaneous/settings.h b/src/librssguard/miscellaneous/settings.h index 34ba36f5c..818ffe9ac 100644 --- a/src/librssguard/miscellaneous/settings.h +++ b/src/librssguard/miscellaneous/settings.h @@ -76,6 +76,10 @@ namespace Feeds { VALUE(bool) FeedsUpdateOnStartupDef; + KEY FeedsUpdateStartupDelay; + + VALUE(double) FeedsUpdateStartupDelayDef; + KEY ShowOnlyUnreadFeeds; VALUE(bool) ShowOnlyUnreadFeedsDef;