Some cleaning of messages model.

This commit is contained in:
Martin Rotter 2015-11-13 11:18:47 +01:00
parent 9cb84ec313
commit f712ae1cf7
7 changed files with 36 additions and 43 deletions

View File

@ -30,7 +30,7 @@
MessagesModel::MessagesModel(QObject *parent) MessagesModel::MessagesModel(QObject *parent)
: QSqlTableModel(parent, qApp->database()->connection(QSL("MessagesModel"), DatabaseFactory::FromSettings)), : QSqlTableModel(parent, qApp->database()->connection(QSL("MessagesModel"), DatabaseFactory::FromSettings)),
m_messageFilter(NoHighlighting), m_customDateFormat(QString()) { m_messageHighlighter(NoHighlighting), m_customDateFormat(QString()) {
setObjectName(QSL("MessagesModel")); setObjectName(QSL("MessagesModel"));
setupFonts(); setupFonts();
setupIcons(); setupIcons();
@ -55,11 +55,9 @@ void MessagesModel::setupIcons() {
m_unreadIcon = qApp->icons()->fromTheme(QSL("mail-mark-unread")); m_unreadIcon = qApp->icons()->fromTheme(QSL("mail-mark-unread"));
} }
FeedsSelection MessagesModel::loadedSelection() const { void MessagesModel::fetchAllData() {
return m_currentSelection; select();
}
void MessagesModel::fetchAll() {
while (canFetchMore()) { while (canFetchMore()) {
fetchMore(); fetchMore();
} }
@ -84,12 +82,16 @@ void MessagesModel::loadMessages(const FeedsSelection &selection) {
qDebug("Loading messages from feeds: %s.", qPrintable(assembled_ids)); qDebug("Loading messages from feeds: %s.", qPrintable(assembled_ids));
} }
select(); fetchAllData();
fetchAll();
} }
void MessagesModel::filterMessages(MessagesModel::MessageFilter filter) { bool MessagesModel::submitAll() {
m_messageFilter = filter; qFatal("Submitting changes via model is not allowed.");
return false;
}
void MessagesModel::highlightMessages(MessagesModel::MessageHighlighter highlight) {
m_messageHighlighter = highlight;
emit layoutAboutToBeChanged(); emit layoutAboutToBeChanged();
emit layoutChanged(); emit layoutChanged();
} }
@ -196,7 +198,7 @@ QVariant MessagesModel::data(const QModelIndex &idx, int role) const {
return QSqlTableModel::data(index(idx.row(), MSG_DB_READ_INDEX)).toInt() == 1 ? m_normalFont : m_boldFont; return QSqlTableModel::data(index(idx.row(), MSG_DB_READ_INDEX)).toInt() == 1 ? m_normalFont : m_boldFont;
case Qt::ForegroundRole: case Qt::ForegroundRole:
switch (m_messageFilter) { switch (m_messageHighlighter) {
case HighlightImportant: case HighlightImportant:
return QSqlTableModel::data(index(idx.row(), MSG_DB_IMPORTANT_INDEX)).toInt() == 1 ? QColor(Qt::blue) : QVariant(); return QSqlTableModel::data(index(idx.row(), MSG_DB_IMPORTANT_INDEX)).toInt() == 1 ? QColor(Qt::blue) : QVariant();
@ -348,8 +350,7 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages
if (query_read_msg.exec(QString(QSL("UPDATE Messages SET is_important = NOT is_important WHERE id IN (%1);")) if (query_read_msg.exec(QString(QSL("UPDATE Messages SET is_important = NOT is_important WHERE id IN (%1);"))
.arg(message_ids.join(QSL(", "))))) { .arg(message_ids.join(QSL(", "))))) {
select(); fetchAllData();
fetchAll();
//emit messageCountsChanged(false); //emit messageCountsChanged(false);
return true; return true;
@ -383,8 +384,7 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int
} }
if (query_read_msg.exec(sql_delete_query)) { if (query_read_msg.exec(sql_delete_query)) {
select(); fetchAllData();
fetchAll();
emit messageCountsChanged(m_currentSelection.mode(), true, false); emit messageCountsChanged(m_currentSelection.mode(), true, false);
return true; return true;
@ -409,8 +409,7 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, RootIt
if (query_read_msg.exec(QString(QSL("UPDATE Messages SET is_read = %2 WHERE id IN (%1);")) if (query_read_msg.exec(QString(QSL("UPDATE Messages SET is_read = %2 WHERE id IN (%1);"))
.arg(message_ids.join(QSL(", ")), .arg(message_ids.join(QSL(", ")),
read == RootItem::Read ? QSL("1") : QSL("0")))) { read == RootItem::Read ? QSL("1") : QSL("0")))) {
select(); fetchAllData();
fetchAll();
emit messageCountsChanged(m_currentSelection.mode(), false, false); emit messageCountsChanged(m_currentSelection.mode(), false, false);
return true; return true;
@ -440,8 +439,7 @@ bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) {
QString sql_delete_query = QString(QSL("UPDATE Messages SET is_deleted = 0 WHERE id IN (%1);")).arg(message_ids.join(QSL(", "))); QString sql_delete_query = QString(QSL("UPDATE Messages SET is_deleted = 0 WHERE id IN (%1);")).arg(message_ids.join(QSL(", ")));
if (query_read_msg.exec(sql_delete_query)) { if (query_read_msg.exec(sql_delete_query)) {
select(); fetchAllData();
fetchAll();
emit messageCountsChanged(m_currentSelection.mode(), true, true); emit messageCountsChanged(m_currentSelection.mode(), true, true);
return true; return true;

View File

@ -35,7 +35,7 @@ class MessagesModel : public QSqlTableModel {
public: public:
// Enum which describes basic filtering schemes // Enum which describes basic filtering schemes
// for messages. // for messages.
enum MessageFilter { enum MessageHighlighter {
NoHighlighting = 100, NoHighlighting = 100,
HighlightUnread = 101, HighlightUnread = 101,
HighlightImportant = 102 HighlightImportant = 102
@ -55,15 +55,6 @@ class MessagesModel : public QSqlTableModel {
Message messageAt(int row_index) const; Message messageAt(int row_index) const;
int messageId(int row_index) const; int messageId(int row_index) const;
FeedsSelection loadedSelection() const;
public slots:
// To disable persistent changes submissions.
inline bool submitAll() {
qFatal("Submitting changes via model is not allowed.");
return false;
}
void updateDateFormat(); void updateDateFormat();
void reloadWholeLayout(); void reloadWholeLayout();
@ -85,18 +76,24 @@ class MessagesModel : public QSqlTableModel {
bool setBatchMessagesRestored(const QModelIndexList &messages); bool setBatchMessagesRestored(const QModelIndexList &messages);
// Fetches ALL available data to the model. // Fetches ALL available data to the model.
void fetchAll(); void fetchAllData();
// Filters messages
void highlightMessages(MessageHighlighter highlight);
public slots:
// Loads messages of given feeds. // Loads messages of given feeds.
void loadMessages(const FeedsSelection &selection); void loadMessages(const FeedsSelection &selection);
void filterMessages(MessageFilter filter);
signals: signals:
// Emitted if some persistent change is made which affects count of "unread/all" messages. // Emitted if some persistent change is made which affects count of "unread/all" messages.
void messageCountsChanged(FeedsSelection::SelectionMode mode, bool total_msg_count_changed, bool any_msg_restored); void messageCountsChanged(FeedsSelection::SelectionMode mode, bool total_msg_count_changed, bool any_msg_restored);
protected: private slots:
// To disable persistent changes submissions.
bool submitAll();
private:
// Sets up header data. // Sets up header data.
void setupHeaderData(); void setupHeaderData();
@ -106,8 +103,7 @@ class MessagesModel : public QSqlTableModel {
// Sets up all icons which are used directly by this model. // Sets up all icons which are used directly by this model.
void setupIcons(); void setupIcons();
private: MessageHighlighter m_messageHighlighter;
MessageFilter m_messageFilter;
QString m_customDateFormat; QString m_customDateFormat;
FeedsSelection m_currentSelection; FeedsSelection m_currentSelection;
@ -122,6 +118,6 @@ class MessagesModel : public QSqlTableModel {
QIcon m_unreadIcon; QIcon m_unreadIcon;
}; };
Q_DECLARE_METATYPE(MessagesModel::MessageFilter) Q_DECLARE_METATYPE(MessagesModel::MessageHighlighter)
#endif // MESSAGESMODEL_H #endif // MESSAGESMODEL_H

View File

@ -313,7 +313,7 @@ void FeedMessageViewer::createConnections() {
// Filtering & searching. // Filtering & searching.
connect(m_toolBarMessages, SIGNAL(messageSearchPatternChanged(QString)), m_messagesView, SLOT(searchMessages(QString))); connect(m_toolBarMessages, SIGNAL(messageSearchPatternChanged(QString)), m_messagesView, SLOT(searchMessages(QString)));
connect(m_toolBarMessages, SIGNAL(messageFilterChanged(MessagesModel::MessageFilter)), m_messagesView, SLOT(filterMessages(MessagesModel::MessageFilter))); connect(m_toolBarMessages, SIGNAL(messageFilterChanged(MessagesModel::MessageHighlighter)), m_messagesView, SLOT(filterMessages(MessagesModel::MessageHighlighter)));
// Message changers. // Message changers.
connect(m_messagesView, SIGNAL(currentMessagesRemoved()), m_messagesBrowser, SLOT(clear())); connect(m_messagesView, SIGNAL(currentMessagesRemoved()), m_messagesBrowser, SLOT(clear()));

View File

@ -103,7 +103,7 @@ void MessagesToolBar::handleMessageHighlighterChange(QAction *action) {
m_btnMessageHighlighter->setIcon(action->icon()); m_btnMessageHighlighter->setIcon(action->icon());
m_btnMessageHighlighter->setToolTip(action->text()); m_btnMessageHighlighter->setToolTip(action->text());
emit messageFilterChanged(action->data().value<MessagesModel::MessageFilter>()); emit messageFilterChanged(action->data().value<MessagesModel::MessageHighlighter>());
} }
void MessagesToolBar::initializeSearchBox() { void MessagesToolBar::initializeSearchBox() {

2
src/gui/messagestoolbar.h Normal file → Executable file
View File

@ -56,7 +56,7 @@ class MessagesToolBar : public BaseToolBar {
void messageSearchPatternChanged(const QString &pattern); void messageSearchPatternChanged(const QString &pattern);
// Emitted if message filter is changed. // Emitted if message filter is changed.
void messageFilterChanged(MessagesModel::MessageFilter filter); void messageFilterChanged(MessagesModel::MessageHighlighter filter);
private slots: private slots:
// Called when highlighter gets changed. // Called when highlighter gets changed.

View File

@ -78,8 +78,7 @@ void MessagesView::reloadSelections(bool mark_current_index_read) {
QModelIndexList mapped_indexes = m_proxyModel->mapListToSource(selected_indexes); QModelIndexList mapped_indexes = m_proxyModel->mapListToSource(selected_indexes);
// Reload the model now. // Reload the model now.
m_sourceModel->select(); m_sourceModel->fetchAllData();
m_sourceModel->fetchAll();
sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder()); sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
@ -451,8 +450,8 @@ void MessagesView::searchMessages(const QString &pattern) {
} }
} }
void MessagesView::filterMessages(MessagesModel::MessageFilter filter) { void MessagesView::filterMessages(MessagesModel::MessageHighlighter filter) {
m_sourceModel->filterMessages(filter); m_sourceModel->highlightMessages(filter);
} }
void MessagesView::adjustColumns() { void MessagesView::adjustColumns() {

View File

@ -79,7 +79,7 @@ class MessagesView : public QTreeView {
// Searchs the visible message according to given pattern. // Searchs the visible message according to given pattern.
void searchMessages(const QString &pattern); void searchMessages(const QString &pattern);
void filterMessages(MessagesModel::MessageFilter filter); void filterMessages(MessagesModel::MessageHighlighter filter);
private slots: private slots:
// Marks given indexes as selected. // Marks given indexes as selected.