From fb62f6644563a11418d211e24d07349545e05f2e Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 12 Jan 2024 09:13:13 +0100 Subject: [PATCH] work on article amount limitting --- src/librssguard/CMakeLists.txt | 27 +- src/librssguard/gui/dialogs/formsettings.cpp | 9 +- src/librssguard/gui/dialogs/formsettings.h | 6 +- .../gui/reusable/articleamountcontrol.cpp | 124 +++++++ .../gui/reusable/articleamountcontrol.h | 45 +++ .../gui/reusable/articleamountcontrol.ui | 314 ++++++++++++++++++ .../gui/settings/settingsfeedsmessages.cpp | 64 ++-- .../gui/settings/settingsfeedsmessages.ui | 129 +------ src/librssguard/miscellaneous/settings.cpp | 12 + src/librssguard/miscellaneous/settings.h | 12 + 10 files changed, 566 insertions(+), 176 deletions(-) create mode 100644 src/librssguard/gui/reusable/articleamountcontrol.cpp create mode 100644 src/librssguard/gui/reusable/articleamountcontrol.h create mode 100644 src/librssguard/gui/reusable/articleamountcontrol.ui diff --git a/src/librssguard/CMakeLists.txt b/src/librssguard/CMakeLists.txt index 6a9c8ba26..fc27e1afc 100644 --- a/src/librssguard/CMakeLists.txt +++ b/src/librssguard/CMakeLists.txt @@ -109,6 +109,8 @@ set(SOURCES gui/notifications/toastnotification.h gui/notifications/toastnotificationsmanager.cpp gui/notifications/toastnotificationsmanager.h + gui/reusable/articleamountcontrol.cpp + gui/reusable/articleamountcontrol.h gui/reusable/baselineedit.cpp gui/reusable/baselineedit.h gui/reusable/basetreeview.cpp @@ -171,12 +173,12 @@ set(SOURCES gui/settings/settingsfeedsmessages.h gui/settings/settingsgeneral.cpp gui/settings/settingsgeneral.h - gui/settings/settingsmediaplayer.cpp - gui/settings/settingsmediaplayer.h gui/settings/settingsgui.cpp gui/settings/settingsgui.h gui/settings/settingslocalization.cpp gui/settings/settingslocalization.h + gui/settings/settingsmediaplayer.cpp + gui/settings/settingsmediaplayer.h gui/settings/settingsnodejs.cpp gui/settings/settingsnodejs.h gui/settings/settingsnotifications.cpp @@ -251,6 +253,8 @@ set(SOURCES network-web/adblock/adblockmanager.h network-web/adblock/adblockrequestinfo.cpp network-web/adblock/adblockrequestinfo.h + network-web/apiserver.cpp + network-web/apiserver.h network-web/basenetworkaccessmanager.cpp network-web/basenetworkaccessmanager.h network-web/cookiejar.cpp @@ -261,8 +265,6 @@ set(SOURCES network-web/downloadmanager.h network-web/googlesuggest.cpp network-web/googlesuggest.h - network-web/apiserver.cpp - network-web/apiserver.h network-web/httpresponse.cpp network-web/httpresponse.h network-web/httpserver.cpp @@ -355,18 +357,18 @@ set(SOURCES services/greader/definitions.h services/greader/greaderentrypoint.cpp services/greader/greaderentrypoint.h + services/greader/greaderfeed.cpp + services/greader/greaderfeed.h services/greader/greadernetwork.cpp services/greader/greadernetwork.h services/greader/greaderserviceroot.cpp services/greader/greaderserviceroot.h - services/greader/greaderfeed.cpp - services/greader/greaderfeed.h services/greader/gui/formeditgreaderaccount.cpp services/greader/gui/formeditgreaderaccount.h - services/greader/gui/greaderaccountdetails.cpp - services/greader/gui/greaderaccountdetails.h services/greader/gui/formgreaderfeeddetails.cpp services/greader/gui/formgreaderfeeddetails.h + services/greader/gui/greaderaccountdetails.cpp + services/greader/gui/greaderaccountdetails.h services/greader/gui/greaderfeeddetails.cpp services/greader/gui/greaderfeeddetails.h services/owncloud/definitions.h @@ -406,10 +408,10 @@ set(SOURCES services/standard/gui/formstandardfeeddetails.h services/standard/gui/formstandardimportexport.cpp services/standard/gui/formstandardimportexport.h - services/standard/gui/standardfeeddetails.cpp - services/standard/gui/standardfeeddetails.h services/standard/gui/standardaccountdetails.cpp services/standard/gui/standardaccountdetails.h + services/standard/gui/standardfeeddetails.cpp + services/standard/gui/standardfeeddetails.h services/standard/parsers/atomparser.cpp services/standard/parsers/atomparser.h services/standard/parsers/feedparser.cpp @@ -470,6 +472,7 @@ set(UI_FILES gui/notifications/notificationseditor.ui gui/notifications/singlenotificationeditor.ui gui/notifications/toastnotification.ui + gui/reusable/articleamountcontrol.ui gui/reusable/networkproxydetails.ui gui/reusable/searchtextwidget.ui gui/richtexteditor/mrichtextedit.ui @@ -480,10 +483,10 @@ set(UI_FILES gui/settings/settingsgeneral.ui gui/settings/settingsgui.ui gui/settings/settingslocalization.ui + gui/settings/settingsmediaplayer.ui gui/settings/settingsnodejs.ui gui/settings/settingsnotifications.ui gui/settings/settingsshortcuts.ui - gui/settings/settingsmediaplayer.ui gui/toolbars/toolbareditor.ui network-web/adblock/adblockdialog.ui network-web/downloaditem.ui @@ -505,8 +508,8 @@ set(UI_FILES services/reddit/gui/redditaccountdetails.ui services/standard/gui/formdiscoverfeeds.ui services/standard/gui/formstandardimportexport.ui - services/standard/gui/standardfeeddetails.ui services/standard/gui/standardaccountdetails.ui + services/standard/gui/standardfeeddetails.ui services/tt-rss/gui/formttrssnote.ui services/tt-rss/gui/ttrssaccountdetails.ui services/tt-rss/gui/ttrssfeeddetails.ui diff --git a/src/librssguard/gui/dialogs/formsettings.cpp b/src/librssguard/gui/dialogs/formsettings.cpp index eb9408df6..e50dc394b 100644 --- a/src/librssguard/gui/dialogs/formsettings.cpp +++ b/src/librssguard/gui/dialogs/formsettings.cpp @@ -39,6 +39,7 @@ FormSettings::FormSettings(QWidget& parent) : QDialog(&parent), m_settings(*qApp // Establish needed connections. connect(m_ui.m_buttonBox, &QDialogButtonBox::accepted, this, &FormSettings::saveSettings); connect(m_ui.m_buttonBox, &QDialogButtonBox::rejected, this, &FormSettings::cancelSettings); + connect(m_btnApply, &QPushButton::clicked, this, &FormSettings::applySettings); connect(m_ui.m_listSettings, &QListWidget::currentRowChanged, this, &FormSettings::openSettingsCategory); @@ -65,6 +66,10 @@ FormSettings::~FormSettings() { qDebugNN << LOGSEC_GUI << "Destroying FormSettings distance."; } +void FormSettings::reject() { + m_ui.m_buttonBox->button(QDialogButtonBox::StandardButton::Cancel)->click(); +} + void FormSettings::openSettingsCategory(int category) { if (category >= 0 && category < m_panels.size()) { if (!m_panels.at(category)->isLoaded()) { @@ -130,7 +135,7 @@ void FormSettings::cancelSettings() { } if (changed_panels.isEmpty()) { - reject(); + done(QDialog::DialogCode::Rejected); } else { const QStringList changed_settings_description = @@ -144,7 +149,7 @@ void FormSettings::cancelSettings() { tr("Changed categories of settings:\n%1.").arg(changed_settings_description.join(QSL(",\n"))), QMessageBox::StandardButton::Yes | QMessageBox::StandardButton::No, QMessageBox::StandardButton::Yes) == QMessageBox::StandardButton::Yes) { - reject(); + done(QDialog::DialogCode::Rejected); } } } diff --git a/src/librssguard/gui/dialogs/formsettings.h b/src/librssguard/gui/dialogs/formsettings.h index f30324c48..1e1bd856f 100644 --- a/src/librssguard/gui/dialogs/formsettings.h +++ b/src/librssguard/gui/dialogs/formsettings.h @@ -11,14 +11,16 @@ class Settings; class SettingsPanel; class FormSettings : public QDialog { - Q_OBJECT + Q_OBJECT public: - // Constructors and destructors. explicit FormSettings(QWidget& parent); virtual ~FormSettings(); + public slots: + void reject(); + private slots: void openSettingsCategory(int category); diff --git a/src/librssguard/gui/reusable/articleamountcontrol.cpp b/src/librssguard/gui/reusable/articleamountcontrol.cpp new file mode 100644 index 000000000..43034fd5d --- /dev/null +++ b/src/librssguard/gui/reusable/articleamountcontrol.cpp @@ -0,0 +1,124 @@ +// For license of this file, see /LICENSE.md. + +#include "articleamountcontrol.h" + +#include "miscellaneous/application.h" + +ArticleAmountControl::ArticleAmountControl(QWidget* parent) : QWidget(parent) { + m_ui.setupUi(this); + + m_ui.m_helpIgnoring + ->setHelpText(tr("Setting any limitations here will instruct %1 to ignore " + "some incoming articles. The logic runs AFTER any article filters so even if your article filter " + "accepts particular article, it can still subsequently ignored and not added to database.") + .arg(QSL(APP_NAME)), + false); + m_ui.m_helpLimit->setHelpText(tr("All excessive articles are removed automatically by the application, usually when " + "particular feed is fetched. Articles are either completely purged from internal " + "database or are just moved to recycle bin."), + false); + + m_ui.m_spinArticleCount->setSpecialValueText(tr("all articles")); + m_ui.m_cbAddAnyDateArticles->setChecked(true); + m_ui.m_dtDateTimeToAvoid->setEnabled(false); + m_ui.m_spinHoursAvoid->setEnabled(false); + m_ui.m_spinHoursAvoid->setMode(TimeSpinBox::Mode::DaysHours); + m_ui.m_dtDateTimeToAvoid + ->setDisplayFormat(qApp->localization()->loadedLocale().dateTimeFormat(QLocale::FormatType::ShortFormat)); + + // Ignoring articles. + connect(m_ui.m_cbAddAnyDateArticles, &QCheckBox::toggled, this, &ArticleAmountControl::changed); + connect(m_ui.m_gbAvoidOldArticles, &QGroupBox::toggled, this, &ArticleAmountControl::changed); + connect(m_ui.m_dtDateTimeToAvoid, &QDateTimeEdit::dateTimeChanged, this, &ArticleAmountControl::changed); + connect(m_ui.m_spinHoursAvoid, + QOverload::of(&TimeSpinBox::valueChanged), + this, + &ArticleAmountControl::changed); + connect(m_ui.m_rbAvoidAbsolute, &QRadioButton::toggled, this, &ArticleAmountControl::changed); + connect(m_ui.m_rbAvoidRelative, &QRadioButton::toggled, this, &ArticleAmountControl::changed); + + // Limitting articles. + connect(m_ui.m_spinArticleCount, + QOverload::of(&QSpinBox::valueChanged), + this, + &ArticleAmountControl::updateArticleCountSuffix); + connect(m_ui.m_spinArticleCount, &QSpinBox::valueChanged, this, &ArticleAmountControl::changed); + connect(m_ui.m_cbMoveToBinNoPurge, &QCheckBox::toggled, this, &ArticleAmountControl::changed); + connect(m_ui.m_cbNoRemoveImportant, &QCheckBox::toggled, this, &ArticleAmountControl::changed); + connect(m_ui.m_cbNoRemoveUnread, &QCheckBox::toggled, this, &ArticleAmountControl::changed); +} + +void ArticleAmountControl::setForAppWideFeatures(bool app_wide, bool batch_edit) { + if (app_wide) { + m_ui.m_cbAddAnyDateArticles->setVisible(false); + } + else { + connect(m_ui.m_cbAddAnyDateArticles, &QCheckBox::toggled, m_ui.m_gbAvoidOldArticles, &QGroupBox::setEnabled); + } + + if (batch_edit) { + // We hook batch selectors. + /* + m_ui.m_mcbAutoDownloading->addActionWidget(m_ui.m_wdgAutoUpdate); + m_ui.m_mcbAddAnyDateArticles->addActionWidget(m_ui.m_cbAddAnyDateArticles); + m_ui.m_mcbOpenArticlesAutomatically->addActionWidget(m_ui.m_cbOpenArticlesAutomatically); + m_ui.m_mcbAvoidOldArticles->addActionWidget(m_ui.m_gbAvoidOldArticles); + m_ui.m_mcbDisableFeed->addActionWidget(m_ui.m_cbDisableFeed); + m_ui.m_mcbSuppressFeed->addActionWidget(m_ui.m_cbSuppressFeed); + m_ui.m_mcbFeedRtl->addActionWidget(m_ui.m_cbFeedRTL); + */ + } + else { + // We hide batch selectors. + for (auto* cb : findChildren()) { + cb->hide(); + } + } +} + +void ArticleAmountControl::load(const Setup& setup) { + // Ignoring articles. + if (setup.m_dtToAvoid.isValid() && setup.m_dtToAvoid.toMSecsSinceEpoch() > 0) { + m_ui.m_rbAvoidAbsolute->setChecked(true); + m_ui.m_dtDateTimeToAvoid->setDateTime(setup.m_dtToAvoid); + } + else { + m_ui.m_rbAvoidRelative->setChecked(true); + m_ui.m_spinHoursAvoid->setValue(setup.m_hoursToAvoid); + } + + m_ui.m_gbAvoidOldArticles->setChecked(setup.m_avoidOldArticles); + + // Limitting articles. + m_ui.m_spinArticleCount->setValue(setup.m_keepCountOfArticles); + m_ui.m_cbMoveToBinNoPurge->setChecked(setup.m_moveToBinDontPurge); + m_ui.m_cbNoRemoveImportant->setChecked(setup.m_doNotRemoveStarred); + m_ui.m_cbNoRemoveUnread->setChecked(setup.m_doNotRemoveUnread); +} + +ArticleAmountControl::Setup ArticleAmountControl::save() const { + Setup setup; + + // Ignoring articles. + setup.m_addAnyArticlesToDb = m_ui.m_cbAddAnyDateArticles->isChecked(); + setup.m_avoidOldArticles = m_ui.m_gbAvoidOldArticles->isChecked(); + + if (m_ui.m_rbAvoidAbsolute->isChecked()) { + setup.m_dtToAvoid = m_ui.m_dtDateTimeToAvoid->dateTime(); + } + else if (m_ui.m_rbAvoidRelative->isChecked()) { + setup.m_hoursToAvoid = int(m_ui.m_spinHoursAvoid->value()); + } + + // Limitting articles. + setup.m_keepCountOfArticles = m_ui.m_spinArticleCount->value(); + setup.m_moveToBinDontPurge = m_ui.m_cbMoveToBinNoPurge->isChecked(); + setup.m_doNotRemoveStarred = m_ui.m_cbNoRemoveImportant->isChecked(); + setup.m_doNotRemoveUnread = m_ui.m_cbNoRemoveUnread->isChecked(); + + return setup; +} + +void ArticleAmountControl::updateArticleCountSuffix(int count) { + m_ui.m_spinArticleCount->setSuffix(QSL(" ") + tr("newest article(s)", nullptr, count)); +} diff --git a/src/librssguard/gui/reusable/articleamountcontrol.h b/src/librssguard/gui/reusable/articleamountcontrol.h new file mode 100644 index 000000000..047b9150d --- /dev/null +++ b/src/librssguard/gui/reusable/articleamountcontrol.h @@ -0,0 +1,45 @@ +// For license of this file, see /LICENSE.md. + +#ifndef ARTICLEAMOUNTCONTROL_H +#define ARTICLEAMOUNTCONTROL_H + +#include + +#include "ui_articleamountcontrol.h" + +class ArticleAmountControl : public QWidget { + Q_OBJECT + + public: + struct Setup { + // Ignoring articles. + bool m_avoidOldArticles = false; + bool m_addAnyArticlesToDb = false; + QDateTime m_dtToAvoid = QDateTime(); + int m_hoursToAvoid = 0; + + // Limitting articles. + int m_keepCountOfArticles = 0; + bool m_doNotRemoveStarred = true; + bool m_doNotRemoveUnread = true; + bool m_moveToBinDontPurge = false; + }; + + explicit ArticleAmountControl(QWidget* parent = nullptr); + + void setForAppWideFeatures(bool app_wide, bool batch_edit); + + void load(const Setup& setup); + Setup save() const; + + private slots: + void updateArticleCountSuffix(int count); + + private: + Ui::ArticleAmountControl m_ui; + + signals: + void changed(); +}; + +#endif // ARTICLEAMOUNTCONTROL_H diff --git a/src/librssguard/gui/reusable/articleamountcontrol.ui b/src/librssguard/gui/reusable/articleamountcontrol.ui new file mode 100644 index 000000000..334c4fa6a --- /dev/null +++ b/src/librssguard/gui/reusable/articleamountcontrol.ui @@ -0,0 +1,314 @@ + + + ArticleAmountControl + + + + 0 + 0 + 402 + 300 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + Ignoring old articles + + + + + + + + + + + Add articles with any date into the database + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + Avoid adding articles before this date/time into the database + + + true + + + + + + Absolute date/time + + + + + + + Relative time + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 1 + 0 + + + + + 1971 + 1 + 1 + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 1 + 0 + + + + 10000.000000000000000 + + + + + + + + + + + + + + + + + + + Limiting amount of article in feeds + + + + + + + + + + + In database, keep + + + + + + + 100000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + Do not remove important articles + + + + + + + + + + + + + + Do not remove unread articles + + + + + + + + + + + + + + Just move articles to recycle bin, do not purge them + + + + + + + + + + + + + + + + + TimeSpinBox + QDoubleSpinBox +
timespinbox.h
+
+ + MultiFeedEditCheckBox + QCheckBox +
multifeededitcheckbox.h
+
+ + HelpSpoiler + QWidget +
helpspoiler.h
+ 1 +
+
+ + + + m_rbAvoidAbsolute + toggled(bool) + m_dtDateTimeToAvoid + setEnabled(bool) + + + 83 + 117 + + + 231 + 117 + + + + + m_rbAvoidRelative + toggled(bool) + m_spinHoursAvoid + setEnabled(bool) + + + 83 + 166 + + + 231 + 166 + + + + +
diff --git a/src/librssguard/gui/settings/settingsfeedsmessages.cpp b/src/librssguard/gui/settings/settingsfeedsmessages.cpp index aeee0aff4..5141a003a 100644 --- a/src/librssguard/gui/settings/settingsfeedsmessages.cpp +++ b/src/librssguard/gui/settings/settingsfeedsmessages.cpp @@ -22,10 +22,11 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent : SettingsPanel(settings, parent), m_ui(new Ui::SettingsFeedsMessages) { m_ui->setupUi(this); - m_ui->m_spinHoursAvoid->setMode(TimeSpinBox::Mode::DaysHours); m_ui->m_spinAutoUpdateInterval->setMode(TimeSpinBox::Mode::MinutesSeconds); m_ui->m_spinStartupUpdateDelay->setMode(TimeSpinBox::Mode::MinutesSeconds); + m_ui->m_wdgArticleLimiting->setForAppWideFeatures(true, false); + initializeMessageDateFormats(); m_ui->m_helpCountsFeedsFormat @@ -201,17 +202,7 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent m_ui->m_spinFeedUpdateTimeout->setSuffix(QSL(" ") + m_ui->m_spinFeedUpdateTimeout->suffix()); } - m_ui->m_dtDateTimeToAvoid - ->setDisplayFormat(qApp->localization()->loadedLocale().dateTimeFormat(QLocale::FormatType::ShortFormat)); - - connect(m_ui->m_gbAvoidOldArticles, &QGroupBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); - connect(m_ui->m_dtDateTimeToAvoid, &QDateTimeEdit::dateTimeChanged, this, &SettingsFeedsMessages::dirtifySettings); - connect(m_ui->m_spinHoursAvoid, - QOverload::of(&TimeSpinBox::valueChanged), - this, - &SettingsFeedsMessages::dirtifySettings); - connect(m_ui->m_rbAvoidAbsolute, &QRadioButton::toggled, this, &SettingsFeedsMessages::dirtifySettings); - connect(m_ui->m_rbAvoidAbsolute, &QRadioButton::toggled, this, &SettingsFeedsMessages::dirtifySettings); + connect(m_ui->m_wdgArticleLimiting, &ArticleAmountControl::changed, this, &SettingsFeedsMessages::dirtifySettings); m_ui->m_spinRelativeArticleTime->setValue(-1); } @@ -292,25 +283,20 @@ void SettingsFeedsMessages::loadSettings() { ->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseLegacyArticleFormat)).toBool()); } - m_ui->m_dtDateTimeToAvoid->setEnabled(false); - m_ui->m_spinHoursAvoid->setEnabled(false); + ArticleAmountControl::Setup art_limit; + art_limit.m_avoidOldArticles = settings()->value(GROUP(Messages), SETTING(Messages::AvoidOldArticles)).toBool(); + art_limit.m_dtToAvoid = settings()->value(GROUP(Messages), SETTING(Messages::DateTimeToAvoidArticle)).toDateTime(); + art_limit.m_hoursToAvoid = settings()->value(GROUP(Messages), SETTING(Messages::HoursToAvoidArticle)).toInt(); - QDateTime avoid_dt_barrier = - settings()->value(GROUP(Messages), SETTING(Messages::DateTimeToAvoidArticle)).toDateTime(); - int avoid_hour_barrier = settings()->value(GROUP(Messages), SETTING(Messages::HoursToAvoidArticle)).toInt(); + art_limit.m_doNotRemoveStarred = + settings()->value(GROUP(Messages), SETTING(Messages::LimitDoNotRemoveStarred)).toBool(); + art_limit.m_doNotRemoveUnread = + settings()->value(GROUP(Messages), SETTING(Messages::LimitDoNotRemoveUnread)).toBool(); + art_limit.m_keepCountOfArticles = settings()->value(GROUP(Messages), SETTING(Messages::LimitCountOfArticles)).toInt(); + art_limit.m_moveToBinDontPurge = + settings()->value(GROUP(Messages), SETTING(Messages::LimitRecycleInsteadOfPurging)).toBool(); - if (avoid_dt_barrier.isValid() && avoid_dt_barrier.toMSecsSinceEpoch() > 0) { - m_ui->m_rbAvoidAbsolute->setChecked(true); - m_ui->m_dtDateTimeToAvoid - ->setDateTime(settings()->value(GROUP(Messages), SETTING(Messages::DateTimeToAvoidArticle)).toDateTime()); - } - else { - m_ui->m_rbAvoidRelative->setChecked(true); - m_ui->m_spinHoursAvoid->setValue(avoid_hour_barrier); - } - - m_ui->m_gbAvoidOldArticles - ->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::AvoidOldArticles)).toBool()); + m_ui->m_wdgArticleLimiting->load(art_limit); m_ui->m_cmbFastAutoUpdate->setChecked(settings()->value(GROUP(Feeds), SETTING(Feeds::FastAutoUpdate)).toBool()); m_ui->m_checkUpdateAllFeedsOnStartup @@ -421,22 +407,22 @@ 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(Messages), Messages::AvoidOldArticles, m_ui->m_gbAvoidOldArticles->isChecked()); - if (qApp->usingLite()) { settings()->setValue(GROUP(Messages), Messages::UseLegacyArticleFormat, m_ui->m_cbLegacyArticleFormatting->isChecked()); } - if (m_ui->m_rbAvoidAbsolute->isChecked()) { - settings()->setValue(GROUP(Messages), Messages::DateTimeToAvoidArticle, m_ui->m_dtDateTimeToAvoid->dateTime()); - settings()->setValue(GROUP(Messages), Messages::HoursToAvoidArticle, 0); - } - else if (m_ui->m_rbAvoidRelative->isChecked()) { - settings()->setValue(GROUP(Messages), Messages::DateTimeToAvoidArticle, QDateTime()); - settings()->setValue(GROUP(Messages), Messages::HoursToAvoidArticle, m_ui->m_spinHoursAvoid->value()); - } + ArticleAmountControl::Setup art_limit = m_ui->m_wdgArticleLimiting->save(); + + settings()->setValue(GROUP(Messages), Messages::AvoidOldArticles, art_limit.m_avoidOldArticles); + settings()->setValue(GROUP(Messages), Messages::DateTimeToAvoidArticle, art_limit.m_dtToAvoid); + settings()->setValue(GROUP(Messages), Messages::HoursToAvoidArticle, art_limit.m_hoursToAvoid); + + settings()->setValue(GROUP(Messages), Messages::LimitDoNotRemoveStarred, art_limit.m_doNotRemoveStarred); + settings()->setValue(GROUP(Messages), Messages::LimitDoNotRemoveUnread, art_limit.m_doNotRemoveUnread); + settings()->setValue(GROUP(Messages), Messages::LimitCountOfArticles, art_limit.m_keepCountOfArticles); + settings()->setValue(GROUP(Messages), Messages::LimitRecycleInsteadOfPurging, art_limit.m_moveToBinDontPurge); settings()->setValue(GROUP(Feeds), Feeds::FastAutoUpdate, m_ui->m_cmbFastAutoUpdate->isChecked()); settings()->setValue(GROUP(Feeds), Feeds::FeedsUpdateOnStartup, m_ui->m_checkUpdateAllFeedsOnStartup->isChecked()); diff --git a/src/librssguard/gui/settings/settingsfeedsmessages.ui b/src/librssguard/gui/settings/settingsfeedsmessages.ui index bd570aa6b..8f364d5b1 100644 --- a/src/librssguard/gui/settings/settingsfeedsmessages.ui +++ b/src/librssguard/gui/settings/settingsfeedsmessages.ui @@ -123,92 +123,7 @@ - - - Avoid adding articles before this date into the database - - - true - - - true - - - - - - - 1 - 0 - - - - - 1971 - 1 - 1 - - - - true - - - - - - - - 1 - 0 - - - - 10000.000000000000000 - - - - - - - Absolute date/time - - - - - - - Relative time - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - + @@ -727,6 +642,12 @@
helpspoiler.h
1 + + ArticleAmountControl + QWidget +
articleamountcontrol.h
+ 1 +
m_checkUpdateAllFeedsOnStartup @@ -765,41 +686,7 @@ m_tabFeedsMessages m_gbFeedListFont m_gbArticleListFont - m_gbAvoidOldArticles - - - m_rbAvoidAbsolute - toggled(bool) - m_dtDateTimeToAvoid - setEnabled(bool) - - - 92 - 215 - - - 326 - 215 - - - - - m_rbAvoidRelative - toggled(bool) - m_spinHoursAvoid - setEnabled(bool) - - - 92 - 243 - - - 326 - 243 - - - - + diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index 7a21ef89a..375a535c2 100644 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -158,6 +158,18 @@ DVALUE(QDateTime) Messages::DateTimeToAvoidArticleDef = QDateTime::currentDateTi DKEY Messages::HoursToAvoidArticle = "hours_to_avoid_article"; DVALUE(int) Messages::HoursToAvoidArticleDef = 0; +DKEY Messages::LimitDoNotRemoveUnread = "limit_dont_remove_unread"; +DVALUE(bool) Messages::LimitDoNotRemoveUnreadDef = true; + +DKEY Messages::LimitDoNotRemoveStarred = "limit_dont_remove_starred"; +DVALUE(bool) Messages::LimitDoNotRemoveStarredDef = true; + +DKEY Messages::LimitRecycleInsteadOfPurging = "limit_recycle_dont_purge"; +DVALUE(bool) Messages::LimitRecycleInsteadOfPurgingDef = false; + +DKEY Messages::LimitCountOfArticles = "limit_count_of_articles"; +DVALUE(int) Messages::LimitCountOfArticlesDef = 0; + DKEY Messages::AlwaysDisplayItemPreview = "always_display_preview"; DVALUE(bool) Messages::AlwaysDisplayItemPreviewDef = true; diff --git a/src/librssguard/miscellaneous/settings.h b/src/librssguard/miscellaneous/settings.h index 424388e28..7e81081bb 100644 --- a/src/librssguard/miscellaneous/settings.h +++ b/src/librssguard/miscellaneous/settings.h @@ -155,6 +155,18 @@ namespace Messages { KEY HoursToAvoidArticle; VALUE(int) HoursToAvoidArticleDef; + KEY LimitDoNotRemoveUnread; + VALUE(bool) LimitDoNotRemoveUnreadDef; + + KEY LimitDoNotRemoveStarred; + VALUE(bool) LimitDoNotRemoveStarredDef; + + KEY LimitRecycleInsteadOfPurging; + VALUE(bool) LimitRecycleInsteadOfPurgingDef; + + KEY LimitCountOfArticles; + VALUE(int) LimitCountOfArticlesDef; + KEY AlwaysDisplayItemPreview; VALUE(bool) AlwaysDisplayItemPreviewDef;