This commit is contained in:
Martin Rotter 2022-02-14 15:10:28 +01:00
parent 54700644c1
commit 521d6418fb
7 changed files with 100 additions and 20 deletions

View File

@ -23,7 +23,8 @@
MessagesModel::MessagesModel(QObject* parent)
: QSqlQueryModel(parent), m_view(nullptr), m_cache(new MessagesModelCache(this)), m_messageHighlighter(MessageHighlighter::NoHighlighting),
m_customDateFormat(QString()), m_customTimeFormat(QString()), m_selectedItem(nullptr), m_displayFeedIcons(false),
m_customDateFormat(QString()), m_customTimeFormat(QString()), m_newerArticlesRelativeTime(-1),
m_selectedItem(nullptr), m_displayFeedIcons(false),
m_multilineListItems(qApp->settings()->value(GROUP(Messages), SETTING(Messages::MultilineArticleList)).toBool()) {
setupFonts();
setupIcons();
@ -203,6 +204,9 @@ void MessagesModel::updateDateFormat() {
else {
m_customTimeFormat = QString();
}
m_newerArticlesRelativeTime = qApp->settings()->value(GROUP(Messages),
SETTING(Messages::RelativeTimeForNewerArticles)).toInt();
}
void MessagesModel::updateFeedIconsDisplay() {
@ -305,9 +309,35 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
int index_column = idx.column();
if (index_column == MSG_DB_DCREATED_INDEX) {
QDateTime dt = TextFactory::parseDateTime(QSqlQueryModel::data(idx, role).value<qint64>()).toLocalTime();
QDateTime dt = TextFactory::parseDateTime(QSqlQueryModel::data(idx,
Qt::ItemDataRole::EditRole).value<qint64>()).toLocalTime();
if (dt.date() == QDate::currentDate() && !m_customTimeFormat.isEmpty()) {
if (m_newerArticlesRelativeTime > 0 &&
dt.daysTo(QDateTime::currentDateTime()) <= m_newerArticlesRelativeTime) {
auto secs_difference = dt.secsTo(QDateTime::currentDateTime());
if (secs_difference >= 604800) {
// More than 1 week.
return tr("%1 weeks ago").arg(secs_difference / 604800);
}
else if (secs_difference >= 172800) {
// At least 2 days.
return tr("%1 days ago").arg(secs_difference / 86400);
}
else if (secs_difference >= 86400) {
// 1 day.
return tr("1 day ago");
}
else if (secs_difference >= 3600) {
// Less than a day.
return tr("%1 hours ago").arg(secs_difference / 3600);
}
else {
// Less then 1 hour ago.
return tr("%1 minutes ago").arg(secs_difference / 60);
}
}
else if (dt.date() == QDate::currentDate() && !m_customTimeFormat.isEmpty()) {
return dt.toString(m_customTimeFormat);
}
else if (m_customDateFormat.isEmpty()) {

View File

@ -97,6 +97,7 @@ class MessagesModel : public QSqlQueryModel, public MessagesModelSqlLayer {
MessageHighlighter m_messageHighlighter;
QString m_customDateFormat;
QString m_customTimeFormat;
int m_newerArticlesRelativeTime;
RootItem* m_selectedItem;
QList<QString> m_headerData;
QList<QString> m_tooltipData;

View File

@ -88,6 +88,10 @@ FormMain::FormMain(QWidget* parent, Qt::WindowFlags f)
m_actionToolbarMainMenu->setText(tr("Open &main menu"));
m_actionToolbarMainMenu->setObjectName("m_actionToolbarMainMenu");
connect(m_actionToolbarMainMenu, &QWidgetAction::triggered, this, [this]() {
qobject_cast<QToolButton*>(m_actionToolbarMainMenu->defaultWidget())->menu()->exec();
});
#if defined(USE_WEBENGINE)
m_ui->m_menuWebBrowserTabs->addAction(qApp->web()->adBlock()->adBlockIcon());
m_ui->m_menuWebBrowserTabs->addAction(qApp->web()->engineSettingsAction());

View File

@ -52,6 +52,15 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent
connect(m_ui->m_checkDisplayPlaceholders, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
#endif
connect(m_ui->m_spinRelativeArticleTime, QOverload<int>::of(&QSpinBox::valueChanged), this, [=](int value) {
if (value <= 0) {
m_ui->m_spinRelativeArticleTime->setSuffix(QSL(" ") + tr("days (turned off)"));
}
else {
m_ui->m_spinRelativeArticleTime->setSuffix(QSL(" ") + tr("day(s)", nullptr, value));
}
});
connect(m_ui->m_cbListsRestrictedShortcuts, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cmbIgnoreContentsChanges, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_cbHideCountsIfNoUnread, &QCheckBox::toggled, this, &SettingsFeedsMessages::dirtifySettings);
@ -73,18 +82,27 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinStartupUpdateDelay, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightRowsMessages, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightRowsMessages, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::requireRestart);
connect(m_ui->m_spinHeightRowsFeeds, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinHeightRowsFeeds, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::requireRestart);
connect(m_ui->m_spinPaddingRowsMessages, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinPaddingRowsMessages, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::requireRestart);
connect(m_ui->m_spinRelativeArticleTime, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::dirtifySettings);
connect(m_ui->m_spinRelativeArticleTime, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
this, &SettingsFeedsMessages::requireRestart);
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<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
@ -125,6 +143,8 @@ SettingsFeedsMessages::SettingsFeedsMessages(Settings* settings, QWidget* parent
if (!m_ui->m_spinFeedUpdateTimeout->suffix().startsWith(' ')) {
m_ui->m_spinFeedUpdateTimeout->setSuffix(QSL(" ") + m_ui->m_spinFeedUpdateTimeout->suffix());
}
m_ui->m_spinRelativeArticleTime->setValue(-1);
}
SettingsFeedsMessages::~SettingsFeedsMessages() {
@ -162,6 +182,7 @@ void SettingsFeedsMessages::changeFont(QLabel& lbl) {
void SettingsFeedsMessages::loadSettings() {
onBeginLoadSettings();
m_ui->m_spinRelativeArticleTime->setValue(settings()->value(GROUP(Messages), SETTING(Messages::RelativeTimeForNewerArticles)).toInt());
m_ui->m_spinPaddingRowsMessages->setValue(settings()->value(GROUP(Messages), SETTING(Messages::ArticleListPadding)).toInt());
m_ui->m_spinHeightRowsMessages->setValue(settings()->value(GROUP(GUI), SETTING(GUI::HeightRowMessages)).toInt());
m_ui->m_spinHeightRowsFeeds->setValue(settings()->value(GROUP(GUI), SETTING(GUI::HeightRowFeeds)).toInt());
@ -234,6 +255,7 @@ void SettingsFeedsMessages::loadSettings() {
void SettingsFeedsMessages::saveSettings() {
onBeginSaveSettings();
settings()->setValue(GROUP(Messages), Messages::RelativeTimeForNewerArticles, m_ui->m_spinRelativeArticleTime->value());
settings()->setValue(GROUP(Messages), Messages::ArticleListPadding, m_ui->m_spinPaddingRowsMessages->value());
settings()->setValue(GROUP(GUI), GUI::HeightRowMessages, m_ui->m_spinHeightRowsMessages->value());
settings()->setValue(GROUP(GUI), GUI::HeightRowFeeds, m_ui->m_spinHeightRowsFeeds->value());

View File

@ -418,6 +418,13 @@
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="m_checkMultilineArticleList">
<property name="text">
<string>Enable multiline items</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="HelpSpoiler" name="m_helpMultilineArticleList" native="true">
<property name="minimumSize">
@ -538,20 +545,7 @@
</property>
</widget>
</item>
<item row="9" column="0" colspan="2">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="8" column="0">
<item row="9" column="0">
<widget class="QGroupBox" name="groupBox_5">
<property name="title">
<string>Article list font</string>
@ -577,10 +571,33 @@
</layout>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="m_checkMultilineArticleList">
<item row="10" column="0" colspan="2">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Enable multiline items</string>
<string>Show relative time for articles not older than</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QSpinBox" name="m_spinRelativeArticleTime">
<property name="minimum">
<number>-1</number>
</property>
<property name="maximum">
<number>300</number>
</property>
</widget>
</item>

View File

@ -130,6 +130,9 @@ DVALUE(bool) Messages::UseCustomDateDef = false;
DKEY Messages::CustomDateFormat = "custom_date_format";
DVALUE(char*) Messages::CustomDateFormatDef = "";
DKEY Messages::RelativeTimeForNewerArticles = "relative_time_for_new_articles";
DVALUE(int) Messages::RelativeTimeForNewerArticlesDef = -1;
DKEY Messages::ArticleListPadding = "article_list_padding";
DVALUE(int) Messages::ArticleListPaddingDef = -1;

View File

@ -138,6 +138,9 @@ namespace Messages {
KEY UseCustomTime;
VALUE(bool) UseCustomTimeDef;
KEY RelativeTimeForNewerArticles;
VALUE(int) RelativeTimeForNewerArticlesDef;
KEY ArticleListPadding;
VALUE(int) ArticleListPaddingDef;