fix warning
This commit is contained in:
parent
62bda35fc8
commit
a38d3fb9af
@ -22,10 +22,10 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
MessagesModel::MessagesModel(QObject* parent)
|
MessagesModel::MessagesModel(QObject* parent)
|
||||||
: QSqlQueryModel(parent), m_view(nullptr), m_cache(new MessagesModelCache(this)), m_messageHighlighter(MessageHighlighter::NoHighlighting),
|
: QSqlQueryModel(parent), m_view(nullptr), m_cache(new MessagesModelCache(this)),
|
||||||
m_customDateFormat(QString()), m_customTimeFormat(QString()), m_newerArticlesRelativeTime(-1),
|
m_messageHighlighter(MessageHighlighter::NoHighlighting), m_customDateFormat(QString()),
|
||||||
m_selectedItem(nullptr), m_displayFeedIcons(false),
|
m_customTimeFormat(QString()), m_newerArticlesRelativeTime(-1), m_selectedItem(nullptr), m_displayFeedIcons(false),
|
||||||
m_multilineListItems(qApp->settings()->value(GROUP(Messages), SETTING(Messages::MultilineArticleList)).toBool()) {
|
m_multilineListItems(qApp->settings()->value(GROUP(Messages), SETTING(Messages::MultilineArticleList)).toBool()) {
|
||||||
setupFonts();
|
setupFonts();
|
||||||
setupIcons();
|
setupIcons();
|
||||||
setupHeaderData();
|
setupHeaderData();
|
||||||
@ -107,8 +107,7 @@ void MessagesModel::repopulate() {
|
|||||||
fetchMore();
|
fetchMore();
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebugNN << LOGSEC_MESSAGEMODEL
|
qDebugNN << LOGSEC_MESSAGEMODEL << "Repopulated model, SQL statement is now:\n"
|
||||||
<< "Repopulated model, SQL statement is now:\n"
|
|
||||||
<< QUOTE_W_SPACE_DOT(selectStatement());
|
<< QUOTE_W_SPACE_DOT(selectStatement());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,7 +120,9 @@ bool MessagesModel::setData(const QModelIndex& index, const QVariant& value, int
|
|||||||
void MessagesModel::setupFonts() {
|
void MessagesModel::setupFonts() {
|
||||||
QFont fon;
|
QFont fon;
|
||||||
|
|
||||||
fon.fromString(qApp->settings()->value(GROUP(Messages), Messages::ListFont, Application::font("MessagesView").toString()).toString());
|
fon.fromString(qApp->settings()
|
||||||
|
->value(GROUP(Messages), Messages::ListFont, Application::font("MessagesView").toString())
|
||||||
|
.toString());
|
||||||
|
|
||||||
m_normalFont = fon;
|
m_normalFont = fon;
|
||||||
m_boldFont = m_normalFont;
|
m_boldFont = m_normalFont;
|
||||||
@ -141,13 +142,11 @@ void MessagesModel::loadMessages(RootItem* item) {
|
|||||||
else {
|
else {
|
||||||
if (!item->getParentServiceRoot()->loadMessagesForItem(item, this)) {
|
if (!item->getParentServiceRoot()->loadMessagesForItem(item, this)) {
|
||||||
setFilter(QSL(DEFAULT_SQL_MESSAGES_FILTER));
|
setFilter(QSL(DEFAULT_SQL_MESSAGES_FILTER));
|
||||||
qCriticalNN << LOGSEC_MESSAGEMODEL
|
qCriticalNN << LOGSEC_MESSAGEMODEL << "Loading of messages from item '" << item->title() << "' failed.";
|
||||||
<< "Loading of messages from item '"
|
qApp->showGuiMessage(Notification::Event::GeneralEvent,
|
||||||
<< item->title() << "' failed.";
|
{tr("Loading of articles from item '%1' failed").arg(item->title()),
|
||||||
qApp->showGuiMessage(Notification::Event::GeneralEvent, {
|
tr("Loading of articles failed, maybe messages could not be downloaded."),
|
||||||
tr("Loading of articles from item '%1' failed").arg(item->title()),
|
QSystemTrayIcon::MessageIcon::Critical});
|
||||||
tr("Loading of articles failed, maybe messages could not be downloaded."),
|
|
||||||
QSystemTrayIcon::MessageIcon::Critical });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,8 +204,8 @@ void MessagesModel::updateDateFormat() {
|
|||||||
m_customTimeFormat = QString();
|
m_customTimeFormat = QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_newerArticlesRelativeTime = qApp->settings()->value(GROUP(Messages),
|
m_newerArticlesRelativeTime =
|
||||||
SETTING(Messages::RelativeTimeForNewerArticles)).toInt();
|
qApp->settings()->value(GROUP(Messages), SETTING(Messages::RelativeTimeForNewerArticles)).toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesModel::updateFeedIconsDisplay() {
|
void MessagesModel::updateFeedIconsDisplay() {
|
||||||
@ -261,25 +260,14 @@ void MessagesModel::setupHeaderData() {
|
|||||||
|
|
||||||
/*: Tooltip for indication of presence of enclosures.*/ tr("Has enclosures");
|
/*: Tooltip for indication of presence of enclosures.*/ tr("Has enclosures");
|
||||||
|
|
||||||
m_tooltipData
|
m_tooltipData << tr("ID of the article.") << tr("Is article read?") << tr("Is article important?")
|
||||||
<< tr("ID of the article.")
|
<< tr("Is article deleted?") << tr("Is article permanently deleted from recycle bin?")
|
||||||
<< tr("Is article read?")
|
<< tr("ID of feed which this article belongs to.") << tr("Title of the article.")
|
||||||
<< tr("Is article important?")
|
<< tr("Url of the article.") << tr("Author of the article.") << tr("Creation date of the article.")
|
||||||
<< tr("Is article deleted?")
|
<< tr("Contents of the article.") << tr("List of attachments.") << tr("Score of the article.")
|
||||||
<< tr("Is article permanently deleted from recycle bin?")
|
<< tr("Account ID of the article.") << tr("Custom ID of the article.")
|
||||||
<< tr("ID of feed which this article belongs to.")
|
<< tr("Custom hash of the article.") << tr("Custom ID of feed of the article.")
|
||||||
<< tr("Title of the article.")
|
<< tr("Indication of enclosures presence within the article.");
|
||||||
<< tr("Url of the article.")
|
|
||||||
<< tr("Author of the article.")
|
|
||||||
<< tr("Creation date of the article.")
|
|
||||||
<< tr("Contents of the article.")
|
|
||||||
<< tr("List of attachments.")
|
|
||||||
<< tr("Score of the article.")
|
|
||||||
<< tr("Account ID of the article.")
|
|
||||||
<< tr("Custom ID of the article.")
|
|
||||||
<< tr("Custom hash of the article.")
|
|
||||||
<< tr("Custom ID of feed of the article.")
|
|
||||||
<< tr("Indication of enclosures presence within the article.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Qt::ItemFlags MessagesModel::flags(const QModelIndex& index) const {
|
Qt::ItemFlags MessagesModel::flags(const QModelIndex& index) const {
|
||||||
@ -288,7 +276,8 @@ Qt::ItemFlags MessagesModel::flags(const QModelIndex& index) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QList<Message> MessagesModel::messagesAt(const QList<int>& row_indices) const {
|
QList<Message> MessagesModel::messagesAt(const QList<int>& row_indices) const {
|
||||||
QList<Message> msgs; msgs.reserve(row_indices.size());
|
QList<Message> msgs;
|
||||||
|
msgs.reserve(row_indices.size());
|
||||||
|
|
||||||
for (int idx : row_indices) {
|
for (int idx : row_indices) {
|
||||||
msgs << messageAt(idx);
|
msgs << messageAt(idx);
|
||||||
@ -309,8 +298,8 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
int index_column = idx.column();
|
int index_column = idx.column();
|
||||||
|
|
||||||
if (index_column == MSG_DB_DCREATED_INDEX) {
|
if (index_column == MSG_DB_DCREATED_INDEX) {
|
||||||
QDateTime dt = TextFactory::parseDateTime(QSqlQueryModel::data(idx,
|
QDateTime dt = TextFactory::parseDateTime(QSqlQueryModel::data(idx, Qt::ItemDataRole::EditRole).value<qint64>())
|
||||||
Qt::ItemDataRole::EditRole).value<qint64>()).toLocalTime();
|
.toLocalTime();
|
||||||
|
|
||||||
if (dt.date() == QDate::currentDate() && !m_customTimeFormat.isEmpty()) {
|
if (dt.date() == QDate::currentDate() && !m_customTimeFormat.isEmpty()) {
|
||||||
return dt.toString(m_customTimeFormat);
|
return dt.toString(m_customTimeFormat);
|
||||||
@ -369,10 +358,8 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
|
|
||||||
return author_name.isEmpty() ? QSL("-") : author_name;
|
return author_name.isEmpty() ? QSL("-") : author_name;
|
||||||
}
|
}
|
||||||
else if (index_column != MSG_DB_IMPORTANT_INDEX &&
|
else if (index_column != MSG_DB_IMPORTANT_INDEX && index_column != MSG_DB_READ_INDEX &&
|
||||||
index_column != MSG_DB_READ_INDEX &&
|
index_column != MSG_DB_HAS_ENCLOSURES && index_column != MSG_DB_SCORE_INDEX) {
|
||||||
index_column != MSG_DB_HAS_ENCLOSURES &&
|
|
||||||
index_column != MSG_DB_SCORE_INDEX) {
|
|
||||||
return QSqlQueryModel::data(idx, role);
|
return QSqlQueryModel::data(idx, role);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -382,13 +369,11 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
|
|
||||||
case LOWER_TITLE_ROLE:
|
case LOWER_TITLE_ROLE:
|
||||||
return m_cache->containsData(idx.row())
|
return m_cache->containsData(idx.row())
|
||||||
? m_cache->data(idx).toString().toLower()
|
? m_cache->data(idx).toString().toLower()
|
||||||
: QSqlQueryModel::data(idx, Qt::ItemDataRole::EditRole).toString().toLower();
|
: QSqlQueryModel::data(idx, Qt::ItemDataRole::EditRole).toString().toLower();
|
||||||
|
|
||||||
case Qt::ItemDataRole::EditRole:
|
case Qt::ItemDataRole::EditRole:
|
||||||
return m_cache->containsData(idx.row())
|
return m_cache->containsData(idx.row()) ? m_cache->data(idx) : QSqlQueryModel::data(idx, role);
|
||||||
? m_cache->data(idx)
|
|
||||||
: QSqlQueryModel::data(idx, role);
|
|
||||||
|
|
||||||
case Qt::ItemDataRole::ToolTipRole: {
|
case Qt::ItemDataRole::ToolTipRole: {
|
||||||
if (!qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::EnableTooltipsFeedsMessages)).toBool()) {
|
if (!qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::EnableTooltipsFeedsMessages)).toBool()) {
|
||||||
@ -399,14 +384,14 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
return data(idx, Qt::ItemDataRole::EditRole);
|
return data(idx, Qt::ItemDataRole::EditRole);
|
||||||
}
|
}
|
||||||
else if (idx.column() == MSG_DB_URL_INDEX) {
|
else if (idx.column() == MSG_DB_URL_INDEX) {
|
||||||
return TextFactory::shorten(data(idx, Qt::ItemDataRole::DisplayRole).toString(),
|
return TextFactory::shorten(data(idx, Qt::ItemDataRole::DisplayRole).toString(), TEXT_TOOLTIP_LIMIT);
|
||||||
TEXT_TOOLTIP_LIMIT);
|
|
||||||
}
|
}
|
||||||
else if (idx.column() == MSG_DB_DCREATED_INDEX) {
|
else if (idx.column() == MSG_DB_DCREATED_INDEX) {
|
||||||
return qApp->localization()->loadedLocale().toString(
|
return qApp->localization()
|
||||||
QDateTime::fromMSecsSinceEpoch(data(idx,
|
->loadedLocale()
|
||||||
Qt::ItemDataRole::EditRole).value<qint64>()).toLocalTime(),
|
.toString(QDateTime::fromMSecsSinceEpoch(data(idx, Qt::ItemDataRole::EditRole).value<qint64>())
|
||||||
QLocale::FormatType::LongFormat);
|
.toLocalTime(),
|
||||||
|
QLocale::FormatType::LongFormat);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return data(idx, Qt::ItemDataRole::DisplayRole);
|
return data(idx, Qt::ItemDataRole::DisplayRole);
|
||||||
@ -446,24 +431,26 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
switch (m_messageHighlighter) {
|
switch (m_messageHighlighter) {
|
||||||
case MessageHighlighter::HighlightImportant: {
|
case MessageHighlighter::HighlightImportant: {
|
||||||
QModelIndex idx_important = index(idx.row(), MSG_DB_IMPORTANT_INDEX);
|
QModelIndex idx_important = index(idx.row(), MSG_DB_IMPORTANT_INDEX);
|
||||||
QVariant dta = m_cache->containsData(idx_important.row()) ? m_cache->data(idx_important) : QSqlQueryModel::data(idx_important);
|
QVariant dta = m_cache->containsData(idx_important.row()) ? m_cache->data(idx_important)
|
||||||
|
: QSqlQueryModel::data(idx_important);
|
||||||
|
|
||||||
return dta.toInt() == 1
|
return dta.toInt() == 1
|
||||||
? qApp->skins()->currentSkin().colorForModel(role == Qt::ItemDataRole::ForegroundRole
|
? qApp->skins()->currentSkin().colorForModel(role == Qt::ItemDataRole::ForegroundRole
|
||||||
? SkinEnums::PaletteColors::FgInteresting
|
? SkinEnums::PaletteColors::FgInteresting
|
||||||
: SkinEnums::PaletteColors::FgSelectedInteresting)
|
: SkinEnums::PaletteColors::FgSelectedInteresting)
|
||||||
: QVariant();
|
: QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
case MessageHighlighter::HighlightUnread: {
|
case MessageHighlighter::HighlightUnread: {
|
||||||
QModelIndex idx_read = index(idx.row(), MSG_DB_READ_INDEX);
|
QModelIndex idx_read = index(idx.row(), MSG_DB_READ_INDEX);
|
||||||
QVariant dta = m_cache->containsData(idx_read.row()) ? m_cache->data(idx_read) : QSqlQueryModel::data(idx_read);
|
QVariant dta =
|
||||||
|
m_cache->containsData(idx_read.row()) ? m_cache->data(idx_read) : QSqlQueryModel::data(idx_read);
|
||||||
|
|
||||||
return dta.toInt() == 0
|
return dta.toInt() == 0
|
||||||
? qApp->skins()->currentSkin().colorForModel(role == Qt::ItemDataRole::ForegroundRole
|
? qApp->skins()->currentSkin().colorForModel(role == Qt::ItemDataRole::ForegroundRole
|
||||||
? SkinEnums::PaletteColors::FgInteresting
|
? SkinEnums::PaletteColors::FgInteresting
|
||||||
: SkinEnums::PaletteColors::FgSelectedInteresting)
|
: SkinEnums::PaletteColors::FgSelectedInteresting)
|
||||||
: QVariant();
|
: QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
case MessageHighlighter::NoHighlighting:
|
case MessageHighlighter::NoHighlighting:
|
||||||
@ -472,9 +459,7 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case Qt::ItemDataRole::SizeHintRole: {
|
case Qt::ItemDataRole::SizeHintRole: {
|
||||||
if (!m_multilineListItems ||
|
if (!m_multilineListItems || m_view == nullptr || m_view->isColumnHidden(idx.column()) ||
|
||||||
m_view == nullptr ||
|
|
||||||
m_view->isColumnHidden(idx.column()) ||
|
|
||||||
idx.column() != MSG_DB_TITLE_INDEX) {
|
idx.column() != MSG_DB_TITLE_INDEX) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
@ -487,11 +472,11 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QFontMetrics fm(data(idx, Qt::ItemDataRole::FontRole).value<QFont>());
|
QFontMetrics fm(data(idx, Qt::ItemDataRole::FontRole).value<QFont>());
|
||||||
auto rct = fm.boundingRect(QRect(QPoint(0, 0), QPoint(wd - 5, 100000)),
|
auto rct =
|
||||||
Qt::TextFlag::TextWordWrap |
|
fm.boundingRect(QRect(QPoint(0, 0), QPoint(wd - 5, 100000)),
|
||||||
Qt::AlignmentFlag::AlignLeft |
|
Qt::TextFlag::TextWordWrap | Qt::AlignmentFlag::AlignLeft | Qt::AlignmentFlag::AlignVCenter,
|
||||||
Qt::AlignmentFlag::AlignVCenter,
|
str)
|
||||||
str).size();
|
.size();
|
||||||
|
|
||||||
return rct;
|
return rct;
|
||||||
}
|
}
|
||||||
@ -503,9 +488,8 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
if (index_column == MSG_DB_READ_INDEX) {
|
if (index_column == MSG_DB_READ_INDEX) {
|
||||||
if (m_displayFeedIcons && m_selectedItem != nullptr) {
|
if (m_displayFeedIcons && m_selectedItem != nullptr) {
|
||||||
QModelIndex idx_feedid = index(idx.row(), MSG_DB_FEED_CUSTOM_ID_INDEX);
|
QModelIndex idx_feedid = index(idx.row(), MSG_DB_FEED_CUSTOM_ID_INDEX);
|
||||||
QVariant dta = m_cache->containsData(idx_feedid.row())
|
QVariant dta =
|
||||||
? m_cache->data(idx_feedid)
|
m_cache->containsData(idx_feedid.row()) ? m_cache->data(idx_feedid) : QSqlQueryModel::data(idx_feedid);
|
||||||
: QSqlQueryModel::data(idx_feedid);
|
|
||||||
QString feed_custom_id = dta.toString();
|
QString feed_custom_id = dta.toString();
|
||||||
auto acc = m_selectedItem->getParentServiceRoot()->feedIconForMessage(feed_custom_id);
|
auto acc = m_selectedItem->getParentServiceRoot()->feedIconForMessage(feed_custom_id);
|
||||||
|
|
||||||
@ -518,14 +502,16 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
QModelIndex idx_read = index(idx.row(), MSG_DB_READ_INDEX);
|
QModelIndex idx_read = index(idx.row(), MSG_DB_READ_INDEX);
|
||||||
QVariant dta = m_cache->containsData(idx_read.row()) ? m_cache->data(idx_read) : QSqlQueryModel::data(idx_read);
|
QVariant dta =
|
||||||
|
m_cache->containsData(idx_read.row()) ? m_cache->data(idx_read) : QSqlQueryModel::data(idx_read);
|
||||||
|
|
||||||
return dta.toInt() == 1 ? m_readIcon : m_unreadIcon;
|
return dta.toInt() == 1 ? m_readIcon : m_unreadIcon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (index_column == MSG_DB_IMPORTANT_INDEX) {
|
else if (index_column == MSG_DB_IMPORTANT_INDEX) {
|
||||||
QModelIndex idx_important = index(idx.row(), MSG_DB_IMPORTANT_INDEX);
|
QModelIndex idx_important = index(idx.row(), MSG_DB_IMPORTANT_INDEX);
|
||||||
QVariant dta = m_cache->containsData(idx_important.row()) ? m_cache->data(idx_important) : QSqlQueryModel::data(idx_important);
|
QVariant dta = m_cache->containsData(idx_important.row()) ? m_cache->data(idx_important)
|
||||||
|
: QSqlQueryModel::data(idx_important);
|
||||||
|
|
||||||
return dta.toInt() == 1 ? m_favoriteIcon : QVariant();
|
return dta.toInt() == 1 ? m_favoriteIcon : QVariant();
|
||||||
}
|
}
|
||||||
@ -560,7 +546,9 @@ bool MessagesModel::setMessageRead(int row_index, RootItem::ReadStatus read) {
|
|||||||
|
|
||||||
Message message = messageAt(row_index);
|
Message message = messageAt(row_index);
|
||||||
|
|
||||||
if (!m_selectedItem->getParentServiceRoot()->onBeforeSetMessagesRead(m_selectedItem, QList<Message>() << message, read)) {
|
if (!m_selectedItem->getParentServiceRoot()->onBeforeSetMessagesRead(m_selectedItem,
|
||||||
|
QList<Message>() << message,
|
||||||
|
read)) {
|
||||||
// Cannot change read status of the item. Abort.
|
// Cannot change read status of the item. Abort.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -575,7 +563,9 @@ bool MessagesModel::setMessageRead(int row_index, RootItem::ReadStatus read) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (DatabaseQueries::markMessagesReadUnread(m_db, QStringList() << QString::number(message.m_id), read)) {
|
if (DatabaseQueries::markMessagesReadUnread(m_db, QStringList() << QString::number(message.m_id), read)) {
|
||||||
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem, QList<Message>() << message, read);
|
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem,
|
||||||
|
QList<Message>() << message,
|
||||||
|
read);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
@ -602,15 +592,15 @@ bool MessagesModel::setMessageReadById(int id, RootItem::ReadStatus read) {
|
|||||||
|
|
||||||
bool MessagesModel::switchMessageImportance(int row_index) {
|
bool MessagesModel::switchMessageImportance(int row_index) {
|
||||||
const QModelIndex target_index = index(row_index, MSG_DB_IMPORTANT_INDEX);
|
const QModelIndex target_index = index(row_index, MSG_DB_IMPORTANT_INDEX);
|
||||||
const RootItem::Importance current_importance = (RootItem::Importance) data(target_index, Qt::EditRole).toInt();
|
const RootItem::Importance current_importance = (RootItem::Importance)data(target_index, Qt::EditRole).toInt();
|
||||||
const RootItem::Importance next_importance = current_importance == RootItem::Importance::Important
|
const RootItem::Importance next_importance = current_importance == RootItem::Importance::Important
|
||||||
? RootItem::Importance::NotImportant
|
? RootItem::Importance::NotImportant
|
||||||
: RootItem::Importance::Important;
|
: RootItem::Importance::Important;
|
||||||
const Message message = messageAt(row_index);
|
const Message message = messageAt(row_index);
|
||||||
const QPair<Message, RootItem::Importance> pair(message, next_importance);
|
const QPair<Message, RootItem::Importance> pair(message, next_importance);
|
||||||
|
|
||||||
if (!m_selectedItem->getParentServiceRoot()->onBeforeSwitchMessageImportance(m_selectedItem,
|
if (!m_selectedItem->getParentServiceRoot()
|
||||||
QList<QPair<Message, RootItem::Importance>>() << pair)) {
|
->onBeforeSwitchMessageImportance(m_selectedItem, QList<QPair<Message, RootItem::Importance>>() << pair)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -625,10 +615,12 @@ bool MessagesModel::switchMessageImportance(int row_index) {
|
|||||||
|
|
||||||
// Commit changes.
|
// Commit changes.
|
||||||
if (DatabaseQueries::markMessageImportant(m_db, message.m_id, next_importance)) {
|
if (DatabaseQueries::markMessageImportant(m_db, message.m_id, next_importance)) {
|
||||||
emit dataChanged(index(row_index, 0), index(row_index, MSG_DB_FEED_CUSTOM_ID_INDEX), QVector<int>() << Qt::FontRole);
|
emit dataChanged(index(row_index, 0),
|
||||||
|
index(row_index, MSG_DB_FEED_CUSTOM_ID_INDEX),
|
||||||
|
QVector<int>() << Qt::FontRole);
|
||||||
|
|
||||||
return m_selectedItem->getParentServiceRoot()->onAfterSwitchMessageImportance(m_selectedItem,
|
return m_selectedItem->getParentServiceRoot()
|
||||||
QList<QPair<Message, RootItem::Importance>>() << pair);
|
->onAfterSwitchMessageImportance(m_selectedItem, QList<QPair<Message, RootItem::Importance>>() << pair);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
@ -636,8 +628,10 @@ bool MessagesModel::switchMessageImportance(int row_index) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::switchBatchMessageImportance(const QModelIndexList& messages) {
|
bool MessagesModel::switchBatchMessageImportance(const QModelIndexList& messages) {
|
||||||
QStringList message_ids; message_ids.reserve(messages.size());
|
QStringList message_ids;
|
||||||
QList<QPair<Message, RootItem::Importance>> message_states; message_states.reserve(messages.size());
|
message_ids.reserve(messages.size());
|
||||||
|
QList<QPair<Message, RootItem::Importance>> message_states;
|
||||||
|
message_states.reserve(messages.size());
|
||||||
|
|
||||||
// Obtain IDs of all desired messages.
|
// Obtain IDs of all desired messages.
|
||||||
for (const QModelIndex& message : messages) {
|
for (const QModelIndex& message : messages) {
|
||||||
@ -645,15 +639,16 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList& messages
|
|||||||
|
|
||||||
RootItem::Importance message_importance = messageImportance((message.row()));
|
RootItem::Importance message_importance = messageImportance((message.row()));
|
||||||
|
|
||||||
message_states.append(QPair<Message, RootItem::Importance>(msg, message_importance == RootItem::Importance::Important
|
message_states.append(QPair<Message, RootItem::Importance>(msg,
|
||||||
? RootItem::Importance::NotImportant
|
message_importance == RootItem::Importance::Important
|
||||||
: RootItem::Importance::Important));
|
? RootItem::Importance::NotImportant
|
||||||
|
: RootItem::Importance::Important));
|
||||||
message_ids.append(QString::number(msg.m_id));
|
message_ids.append(QString::number(msg.m_id));
|
||||||
QModelIndex idx_msg_imp = index(message.row(), MSG_DB_IMPORTANT_INDEX);
|
QModelIndex idx_msg_imp = index(message.row(), MSG_DB_IMPORTANT_INDEX);
|
||||||
|
|
||||||
setData(idx_msg_imp, message_importance == RootItem::Importance::Important
|
setData(idx_msg_imp,
|
||||||
? int(RootItem::Importance::NotImportant)
|
message_importance == RootItem::Importance::Important ? int(RootItem::Importance::NotImportant)
|
||||||
: int(RootItem::Importance::Important));
|
: int(RootItem::Importance::Important));
|
||||||
}
|
}
|
||||||
|
|
||||||
reloadWholeLayout();
|
reloadWholeLayout();
|
||||||
@ -671,8 +666,10 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList& messages
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList& messages) {
|
bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList& messages) {
|
||||||
QStringList message_ids; message_ids.reserve(messages.size());
|
QStringList message_ids;
|
||||||
QList<Message> msgs; msgs.reserve(messages.size());
|
message_ids.reserve(messages.size());
|
||||||
|
QList<Message> msgs;
|
||||||
|
msgs.reserve(messages.size());
|
||||||
|
|
||||||
// Obtain IDs of all desired messages.
|
// Obtain IDs of all desired messages.
|
||||||
for (const QModelIndex& message : messages) {
|
for (const QModelIndex& message : messages) {
|
||||||
@ -713,8 +710,10 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList& messages) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::setBatchMessagesRead(const QModelIndexList& messages, RootItem::ReadStatus read) {
|
bool MessagesModel::setBatchMessagesRead(const QModelIndexList& messages, RootItem::ReadStatus read) {
|
||||||
QStringList message_ids; message_ids.reserve(messages.size());
|
QStringList message_ids;
|
||||||
QList<Message> msgs; msgs.reserve(messages.size());
|
message_ids.reserve(messages.size());
|
||||||
|
QList<Message> msgs;
|
||||||
|
msgs.reserve(messages.size());
|
||||||
|
|
||||||
// Obtain IDs of all desired messages.
|
// Obtain IDs of all desired messages.
|
||||||
for (const QModelIndex& message : messages) {
|
for (const QModelIndex& message : messages) {
|
||||||
@ -740,8 +739,10 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList& messages, RootIt
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::setBatchMessagesRestored(const QModelIndexList& messages) {
|
bool MessagesModel::setBatchMessagesRestored(const QModelIndexList& messages) {
|
||||||
QStringList message_ids; message_ids.reserve(messages.size());
|
QStringList message_ids;
|
||||||
QList<Message> msgs; msgs.reserve(messages.size());
|
message_ids.reserve(messages.size());
|
||||||
|
QList<Message> msgs;
|
||||||
|
msgs.reserve(messages.size());
|
||||||
|
|
||||||
// Obtain IDs of all desired messages.
|
// Obtain IDs of all desired messages.
|
||||||
for (const QModelIndex& message : messages) {
|
for (const QModelIndex& message : messages) {
|
||||||
@ -775,9 +776,7 @@ QVariant MessagesModel::headerData(int section, Qt::Orientation orientation, int
|
|||||||
|
|
||||||
// Display textual headers for all columns except "read" and
|
// Display textual headers for all columns except "read" and
|
||||||
// "important" and "has enclosures" columns.
|
// "important" and "has enclosures" columns.
|
||||||
if (section != MSG_DB_READ_INDEX &&
|
if (section != MSG_DB_READ_INDEX && section != MSG_DB_IMPORTANT_INDEX && section != MSG_DB_SCORE_INDEX &&
|
||||||
section != MSG_DB_IMPORTANT_INDEX &&
|
|
||||||
section != MSG_DB_SCORE_INDEX &&
|
|
||||||
section != MSG_DB_HAS_ENCLOSURES) {
|
section != MSG_DB_HAS_ENCLOSURES) {
|
||||||
return m_headerData.at(section);
|
return m_headerData.at(section);
|
||||||
}
|
}
|
||||||
|
@ -28,24 +28,27 @@
|
|||||||
void MessagePreviewer::createConnections() {
|
void MessagePreviewer::createConnections() {
|
||||||
installEventFilter(this);
|
installEventFilter(this);
|
||||||
|
|
||||||
connect(m_actionMarkRead = m_toolBar->addAction(qApp->icons()->fromTheme(QSL("mail-mark-read")), tr("Mark article read")),
|
connect(m_actionMarkRead =
|
||||||
|
m_toolBar->addAction(qApp->icons()->fromTheme(QSL("mail-mark-read")), tr("Mark article read")),
|
||||||
&QAction::triggered,
|
&QAction::triggered,
|
||||||
this,
|
this,
|
||||||
&MessagePreviewer::markMessageAsRead);
|
&MessagePreviewer::markMessageAsRead);
|
||||||
connect(m_actionMarkUnread = m_toolBar->addAction(qApp->icons()->fromTheme(QSL("mail-mark-unread")), tr("Mark article unread")),
|
connect(m_actionMarkUnread =
|
||||||
|
m_toolBar->addAction(qApp->icons()->fromTheme(QSL("mail-mark-unread")), tr("Mark article unread")),
|
||||||
&QAction::triggered,
|
&QAction::triggered,
|
||||||
this,
|
this,
|
||||||
&MessagePreviewer::markMessageAsUnread);
|
&MessagePreviewer::markMessageAsUnread);
|
||||||
connect(m_actionSwitchImportance = m_toolBar->addAction(qApp->icons()->fromTheme(QSL("mail-mark-important")), tr("Switch article importance")),
|
connect(m_actionSwitchImportance =
|
||||||
|
m_toolBar->addAction(qApp->icons()->fromTheme(QSL("mail-mark-important")), tr("Switch article importance")),
|
||||||
&QAction::triggered,
|
&QAction::triggered,
|
||||||
this,
|
this,
|
||||||
&MessagePreviewer::switchMessageImportance);
|
&MessagePreviewer::switchMessageImportance);
|
||||||
}
|
}
|
||||||
|
|
||||||
MessagePreviewer::MessagePreviewer(QWidget* parent)
|
MessagePreviewer::MessagePreviewer(QWidget* parent)
|
||||||
: QWidget(parent), m_mainLayout(new QGridLayout(this)), m_viewerLayout(new QStackedLayout(this)),
|
: QWidget(parent), m_mainLayout(new QGridLayout(this)), m_viewerLayout(new QStackedLayout()),
|
||||||
m_toolBar(new QToolBar(this)), m_msgBrowser(new WebBrowser(nullptr, this)), m_separator(nullptr),
|
m_toolBar(new QToolBar(this)), m_msgBrowser(new WebBrowser(nullptr, this)), m_separator(nullptr),
|
||||||
m_btnLabels(QList<QPair<LabelButton*, QAction*>>()) {
|
m_btnLabels(QList<QPair<LabelButton*, QAction*>>()) {
|
||||||
|
|
||||||
m_toolBar->setOrientation(Qt::Orientation::Vertical);
|
m_toolBar->setOrientation(Qt::Orientation::Vertical);
|
||||||
|
|
||||||
@ -126,10 +129,11 @@ void MessagePreviewer::loadMessage(const Message& message, RootItem* root) {
|
|||||||
|
|
||||||
if (!same_message) {
|
if (!same_message) {
|
||||||
const QString msg_feed_id = message.m_feedId;
|
const QString msg_feed_id = message.m_feedId;
|
||||||
const auto* feed = root->getParentServiceRoot()->getItemFromSubTree(
|
const auto* feed = root->getParentServiceRoot()
|
||||||
[msg_feed_id](const RootItem* it) {
|
->getItemFromSubTree([msg_feed_id](const RootItem* it) {
|
||||||
return it->kind() == RootItem::Kind::Feed && it->customId() == msg_feed_id;
|
return it->kind() == RootItem::Kind::Feed && it->customId() == msg_feed_id;
|
||||||
})->toFeed();
|
})
|
||||||
|
->toFeed();
|
||||||
|
|
||||||
if (feed != nullptr && feed->openArticlesDirectly() && !m_message.m_url.isEmpty()) {
|
if (feed != nullptr && feed->openArticlesDirectly() && !m_message.m_url.isEmpty()) {
|
||||||
ensureDefaultBrowserVisible();
|
ensureDefaultBrowserVisible();
|
||||||
@ -159,7 +163,7 @@ void MessagePreviewer::loadMessage(const Message& message, RootItem* root) {
|
|||||||
else {
|
else {
|
||||||
ensureDefaultBrowserVisible();
|
ensureDefaultBrowserVisible();
|
||||||
|
|
||||||
m_msgBrowser->loadMessages({ message }, m_root);
|
m_msgBrowser->loadMessages({message}, m_root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -191,16 +195,14 @@ void MessagePreviewer::markMessageAsUnread() {
|
|||||||
|
|
||||||
void MessagePreviewer::markMessageAsReadUnread(RootItem::ReadStatus read) {
|
void MessagePreviewer::markMessageAsReadUnread(RootItem::ReadStatus read) {
|
||||||
if (!m_root.isNull()) {
|
if (!m_root.isNull()) {
|
||||||
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(),
|
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(), QList<Message>() << m_message, read)) {
|
||||||
QList<Message>() << m_message,
|
DatabaseQueries::markMessagesReadUnread(qApp->database()
|
||||||
read)) {
|
->driver()
|
||||||
DatabaseQueries::markMessagesReadUnread(qApp->database()->driver()->connection(objectName(),
|
->connection(objectName(),
|
||||||
DatabaseDriver::DesiredStorageType::FromSettings),
|
DatabaseDriver::DesiredStorageType::FromSettings),
|
||||||
QStringList() << QString::number(m_message.m_id),
|
QStringList() << QString::number(m_message.m_id),
|
||||||
read);
|
read);
|
||||||
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(),
|
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(), QList<Message>() << m_message, read);
|
||||||
QList<Message>() << m_message,
|
|
||||||
read);
|
|
||||||
m_message.m_isRead = read == RootItem::ReadStatus::Read;
|
m_message.m_isRead = read == RootItem::ReadStatus::Read;
|
||||||
emit markMessageRead(m_message.m_id, read);
|
emit markMessageRead(m_message.m_id, read);
|
||||||
|
|
||||||
@ -211,24 +213,27 @@ void MessagePreviewer::markMessageAsReadUnread(RootItem::ReadStatus read) {
|
|||||||
|
|
||||||
void MessagePreviewer::switchMessageImportance(bool checked) {
|
void MessagePreviewer::switchMessageImportance(bool checked) {
|
||||||
if (!m_root.isNull()) {
|
if (!m_root.isNull()) {
|
||||||
if (m_root->getParentServiceRoot()->onBeforeSwitchMessageImportance(m_root.data(),
|
if (m_root->getParentServiceRoot()
|
||||||
QList<ImportanceChange>()
|
->onBeforeSwitchMessageImportance(m_root.data(),
|
||||||
<< ImportanceChange(m_message,
|
QList<ImportanceChange>()
|
||||||
m_message.
|
<< ImportanceChange(m_message,
|
||||||
m_isImportant
|
m_message.m_isImportant
|
||||||
? RootItem::Importance::NotImportant
|
? RootItem::Importance::NotImportant
|
||||||
: RootItem::Importance::Important))) {
|
: RootItem::Importance::Important))) {
|
||||||
DatabaseQueries::switchMessagesImportance(qApp->database()->driver()->connection(objectName(), DatabaseDriver::DesiredStorageType::FromSettings),
|
DatabaseQueries::switchMessagesImportance(qApp->database()
|
||||||
|
->driver()
|
||||||
|
->connection(objectName(),
|
||||||
|
DatabaseDriver::DesiredStorageType::FromSettings),
|
||||||
QStringList() << QString::number(m_message.m_id));
|
QStringList() << QString::number(m_message.m_id));
|
||||||
m_root->getParentServiceRoot()->onAfterSwitchMessageImportance(m_root.data(),
|
m_root->getParentServiceRoot()
|
||||||
QList<ImportanceChange>()
|
->onAfterSwitchMessageImportance(m_root.data(),
|
||||||
<< ImportanceChange(m_message,
|
QList<ImportanceChange>()
|
||||||
m_message.m_isImportant
|
<< ImportanceChange(m_message,
|
||||||
? RootItem::Importance::NotImportant
|
m_message.m_isImportant
|
||||||
: RootItem::Importance::Important));
|
? RootItem::Importance::NotImportant
|
||||||
emit markMessageImportant(m_message.m_id, checked
|
: RootItem::Importance::Important));
|
||||||
? RootItem::Importance::Important
|
emit markMessageImportant(m_message.m_id,
|
||||||
: RootItem::Importance::NotImportant);
|
checked ? RootItem::Importance::Important : RootItem::Importance::NotImportant);
|
||||||
|
|
||||||
m_message.m_isImportant = checked;
|
m_message.m_isImportant = checked;
|
||||||
}
|
}
|
||||||
@ -271,8 +276,9 @@ void MessagePreviewer::updateLabels(bool only_clear) {
|
|||||||
btn_label->setIcon(Label::generateIcon(label->color()));
|
btn_label->setIcon(Label::generateIcon(label->color()));
|
||||||
btn_label->setAutoRaise(false);
|
btn_label->setAutoRaise(false);
|
||||||
btn_label->setText(QSL(" ") + label->title());
|
btn_label->setText(QSL(" ") + label->title());
|
||||||
btn_label->setToolButtonStyle(Qt::ToolButtonStyle(qApp->settings()->value(GROUP(GUI),
|
btn_label->setToolButtonStyle(Qt::ToolButtonStyle(qApp->settings()
|
||||||
SETTING(GUI::ToolbarStyle)).toInt()));
|
->value(GROUP(GUI), SETTING(GUI::ToolbarStyle))
|
||||||
|
.toInt()));
|
||||||
btn_label->setToolTip(label->title());
|
btn_label->setToolTip(label->title());
|
||||||
btn_label->setChecked(DatabaseQueries::isLabelAssignedToMessage(database, label, m_message));
|
btn_label->setChecked(DatabaseQueries::isLabelAssignedToMessage(database, label, m_message));
|
||||||
|
|
||||||
@ -280,7 +286,7 @@ void MessagePreviewer::updateLabels(bool only_clear) {
|
|||||||
|
|
||||||
connect(btn_label, &QToolButton::toggled, this, &MessagePreviewer::switchLabel);
|
connect(btn_label, &QToolButton::toggled, this, &MessagePreviewer::switchLabel);
|
||||||
|
|
||||||
m_btnLabels.append({ btn_label, act_label });
|
m_btnLabels.append({btn_label, act_label});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user