// 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)); }