diff --git a/src/librssguard/core/messagesmodel.cpp b/src/librssguard/core/messagesmodel.cpp index 424a5e957..75a7005e3 100644 --- a/src/librssguard/core/messagesmodel.cpp +++ b/src/librssguard/core/messagesmodel.cpp @@ -22,7 +22,7 @@ MessagesModel::MessagesModel(QObject* parent) : QSqlQueryModel(parent), m_cache(new MessagesModelCache(this)), m_messageHighlighter(MessageHighlighter::NoHighlighting), - m_customDateFormat(QString()), m_selectedItem(nullptr), m_displayFeedIcons(false) { + m_customDateFormat(QString()), m_customTimeFormat(QString()), m_selectedItem(nullptr), m_displayFeedIcons(false) { setupFonts(); setupIcons(); setupHeaderData(); @@ -186,6 +186,13 @@ void MessagesModel::updateDateFormat() { else { m_customDateFormat = QString(); } + + if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::UseCustomTime)).toBool()) { + m_customTimeFormat = qApp->settings()->value(GROUP(Messages), SETTING(Messages::CustomTimeFormat)).toString(); + } + else { + m_customTimeFormat = QString(); + } } void MessagesModel::updateFeedIconsDisplay() { @@ -290,7 +297,10 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const { if (index_column == MSG_DB_DCREATED_INDEX) { QDateTime dt = TextFactory::parseDateTime(QSqlQueryModel::data(idx, role).value()).toLocalTime(); - if (m_customDateFormat.isEmpty()) { + if (dt.date() == QDate::currentDate() && !m_customTimeFormat.isEmpty()) { + return dt.toString(m_customTimeFormat); + } + else if (m_customDateFormat.isEmpty()) { return QLocale().toString(dt, QLocale::FormatType::ShortFormat); } else { diff --git a/src/librssguard/core/messagesmodel.h b/src/librssguard/core/messagesmodel.h index 6653b795f..a3b077078 100644 --- a/src/librssguard/core/messagesmodel.h +++ b/src/librssguard/core/messagesmodel.h @@ -91,6 +91,7 @@ class MessagesModel : public QSqlQueryModel, public MessagesModelSqlLayer { MessagesModelCache* m_cache; MessageHighlighter m_messageHighlighter; QString m_customDateFormat; + QString m_customTimeFormat; RootItem* m_selectedItem; QList m_headerData; QList m_tooltipData; diff --git a/src/librssguard/gui/settings/settingsfeedsmessages.cpp b/src/librssguard/gui/settings/settingsfeedsmessages.cpp index fce8e5625..ff9b76111 100644 --- a/src/librssguard/gui/settings/settingsfeedsmessages.cpp +++ b/src/librssguard/gui/settings/settingsfeedsmessages.cpp @@ -49,8 +49,13 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent connect(m_ui->m_checkAutoUpdateOnlyUnfocused, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkDisplayFeedIcons, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkKeppMessagesInTheMiddle, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); + connect(m_ui->m_checkMessagesDateTimeFormat, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkMessagesDateTimeFormat, &QCheckBox::toggled, m_ui->m_cmbMessagesDateTimeFormat, &QComboBox::setEnabled); + + connect(m_ui->m_checkMessagesTimeFormat, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); + connect(m_ui->m_checkMessagesTimeFormat, &QCheckBox::toggled, m_ui->m_cmbMessagesTimeFormat, &QComboBox::setEnabled); + connect(m_ui->m_checkRemoveReadMessagesOnExit, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkBringToForegroundAfterMsgOpened, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_checkUpdateAllFeedsOnStartup, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings); @@ -68,6 +73,8 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_cmbMessagesDateTimeFormat, static_cast(&QComboBox::currentIndexChanged), this, &SettingsFeedsMessages::dirtifySettings); + connect(m_ui->m_cmbMessagesTimeFormat, static_cast(&QComboBox::currentIndexChanged), this, + &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_cmbCountsFeedList, &QComboBox::currentTextChanged, this, &SettingsFeedsMessages::dirtifySettings); connect(m_ui->m_cmbCountsFeedList, static_cast(&QComboBox::currentIndexChanged), this, &SettingsFeedsMessages::dirtifySettings); @@ -95,7 +102,7 @@ SettingsFeedsMessages::~SettingsFeedsMessages() { } void SettingsFeedsMessages::initializeMessageDateFormats() { - QStringList best_formats; + QStringList datetime_formats, time_formats; const QDateTime current_dt = QDateTime::currentDateTime(); const QLocale current_locale = qApp->localization()->loadedLocale(); auto installed_languages = qApp->localization()->installedLanguages(); @@ -103,16 +110,24 @@ void SettingsFeedsMessages::initializeMessageDateFormats() { for (const Language& lang : qAsConst(installed_languages)) { QLocale locale(lang.m_code); - best_formats << locale.dateTimeFormat(QLocale::FormatType::LongFormat) - << locale.dateTimeFormat(QLocale::FormatType::ShortFormat) - << locale.dateTimeFormat(QLocale::FormatType::NarrowFormat); + datetime_formats << locale.dateTimeFormat(QLocale::FormatType::LongFormat) + << locale.dateTimeFormat(QLocale::FormatType::ShortFormat) + << locale.dateTimeFormat(QLocale::FormatType::NarrowFormat); + time_formats << locale.timeFormat(QLocale::FormatType::LongFormat) + << locale.timeFormat(QLocale::FormatType::ShortFormat) + << locale.timeFormat(QLocale::FormatType::NarrowFormat); } - best_formats.removeDuplicates(); + datetime_formats.removeDuplicates(); + time_formats.removeDuplicates(); - for (const QString& format : qAsConst(best_formats)) { + for (const QString& format : qAsConst(datetime_formats)) { m_ui->m_cmbMessagesDateTimeFormat->addItem(current_locale.toString(current_dt, format), format); } + + for (const QString& format : qAsConst(time_formats)) { + m_ui->m_cmbMessagesTimeFormat->addItem(current_locale.toString(current_dt, format), format); + } } void SettingsFeedsMessages::changeFont(QLabel& lbl) { @@ -164,13 +179,23 @@ void SettingsFeedsMessages::loadSettings() { #endif m_ui->m_checkMessagesDateTimeFormat->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseCustomDate)).toBool()); - const int index_format = m_ui->m_cmbMessagesDateTimeFormat->findData(settings()->value(GROUP(Messages), - SETTING(Messages::CustomDateFormat)).toString()); + + int index_format = m_ui->m_cmbMessagesDateTimeFormat->findData(settings()->value(GROUP(Messages), + SETTING(Messages::CustomDateFormat)).toString()); if (index_format >= 0) { m_ui->m_cmbMessagesDateTimeFormat->setCurrentIndex(index_format); } + m_ui->m_checkMessagesTimeFormat->setChecked(settings()->value(GROUP(Messages), SETTING(Messages::UseCustomTime)).toBool()); + + index_format = m_ui->m_cmbMessagesTimeFormat->findData(settings()->value(GROUP(Messages), + SETTING(Messages::CustomTimeFormat)).toString()); + + if (index_format >= 0) { + m_ui->m_cmbMessagesTimeFormat->setCurrentIndex(index_format); + } + QFont fon; fon.fromString(settings()->value(GROUP(Messages), @@ -218,7 +243,6 @@ void SettingsFeedsMessages::saveSettings() { 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(Feeds), Feeds::EnableTooltipsFeedsMessages, m_ui->m_checkShowTooltips->isChecked()); settings()->setValue(GROUP(Messages), Messages::IgnoreContentsChanges, m_ui->m_cmbIgnoreContentsChanges->isChecked()); @@ -231,9 +255,15 @@ void SettingsFeedsMessages::saveSettings() { m_ui->m_cbShowEnclosuresDirectly->isChecked()); #endif + settings()->setValue(GROUP(Messages), Messages::UseCustomDate, m_ui->m_checkMessagesDateTimeFormat->isChecked()); + settings()->setValue(GROUP(Messages), Messages::UseCustomTime, m_ui->m_checkMessagesTimeFormat->isChecked()); + settings()->setValue(GROUP(Messages), Messages::CustomDateFormat, m_ui->m_cmbMessagesDateTimeFormat->itemData(m_ui->m_cmbMessagesDateTimeFormat->currentIndex()).toString()); + settings()->setValue(GROUP(Messages), Messages::CustomTimeFormat, + m_ui->m_cmbMessagesTimeFormat->itemData(m_ui->m_cmbMessagesTimeFormat->currentIndex()).toString()); + // Save fonts. settings()->setValue(GROUP(Messages), Messages::PreviewerFontStandard, m_ui->m_lblMessagesFont->font().toString()); settings()->setValue(GROUP(Messages), Messages::ListFont, m_ui->m_lblMessageListFont->font().toString()); diff --git a/src/librssguard/gui/settings/settingsfeedsmessages.ui b/src/librssguard/gui/settings/settingsfeedsmessages.ui index 709383d7c..5e72c1bab 100644 --- a/src/librssguard/gui/settings/settingsfeedsmessages.ui +++ b/src/librssguard/gui/settings/settingsfeedsmessages.ui @@ -80,38 +80,6 @@ - - - - - 0 - 0 - - - - Feed list font - - - - - - Font preview - - - m_btnChangeFeedListFont - - - - - - - &Change font - - - - - - @@ -173,7 +141,7 @@ - + Article count format in feed list @@ -183,7 +151,7 @@ - + @@ -199,7 +167,7 @@ - + @@ -217,21 +185,21 @@ - + Hide article counts if there are no unread articles - + Display tooltips for feeds and articles - + Qt::Vertical @@ -244,13 +212,45 @@ - + Allow only basic keyboard shortcuts for feed/article list + + + + + 0 + 0 + + + + Feed list font + + + + + + Font preview + + + m_btnChangeFeedListFont + + + + + + + &Change font + + + + + + @@ -375,7 +375,7 @@ - + @@ -444,7 +444,7 @@ - + Qt::Vertical @@ -464,6 +464,29 @@ + + + + + 150 + 0 + + + + + + + + Show only time for today articles + + + true + + + true + + + @@ -484,9 +507,9 @@ m_checkAutoUpdate m_spinAutoUpdateInterval m_checkAutoUpdateOnlyUnfocused - m_btnChangeFeedListFont m_spinFeedUpdateTimeout m_spinHeightRowsFeeds + m_btnChangeFeedListFont m_cmbCountsFeedList m_cbHideCountsIfNoUnread m_cbListsRestrictedShortcuts @@ -502,6 +525,8 @@ m_spinHeightImageAttachments m_checkMessagesDateTimeFormat m_cmbMessagesDateTimeFormat + m_checkMessagesTimeFormat + m_cmbMessagesTimeFormat m_btnChangeMessageListFont m_btnChangeMessagesFont diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index 798beb93d..d0deac57e 100644 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -105,6 +105,12 @@ DVALUE(bool) Messages::UseCustomDateDef = false; DKEY Messages::CustomDateFormat = "custom_date_format"; DVALUE(char*) Messages::CustomDateFormatDef = ""; +DKEY Messages::UseCustomTime = "use_custom_time"; +DVALUE(bool) Messages::UseCustomTimeDef = false; + +DKEY Messages::CustomTimeFormat = "custom_time_format"; +DVALUE(QString) Messages::CustomTimeFormatDef = {}; + DKEY Messages::ClearReadOnExit = "clear_read_on_exit"; DVALUE(bool) Messages::ClearReadOnExitDef = false; diff --git a/src/librssguard/miscellaneous/settings.h b/src/librssguard/miscellaneous/settings.h index 30bf883db..d0eb7411d 100644 --- a/src/librssguard/miscellaneous/settings.h +++ b/src/librssguard/miscellaneous/settings.h @@ -122,6 +122,12 @@ namespace Messages { KEY CustomDateFormat; VALUE(char*) CustomDateFormatDef; + KEY UseCustomTime; + VALUE(bool) UseCustomTimeDef; + + KEY CustomTimeFormat; + VALUE(QString) CustomTimeFormatDef; + KEY ClearReadOnExit; VALUE(bool) ClearReadOnExitDef;