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)
: QSqlTableModel(parent, qApp->database()->connection(QSL("MessagesModel"), DatabaseFactory::FromSettings)),
m_messageFilter(NoHighlighting), m_customDateFormat(QString()) {
m_messageHighlighter(NoHighlighting), m_customDateFormat(QString()) {
setObjectName(QSL("MessagesModel"));
setupFonts();
setupIcons();
@ -55,11 +55,9 @@ void MessagesModel::setupIcons() {
m_unreadIcon = qApp->icons()->fromTheme(QSL("mail-mark-unread"));
}
FeedsSelection MessagesModel::loadedSelection() const {
return m_currentSelection;
}
void MessagesModel::fetchAllData() {
select();
void MessagesModel::fetchAll() {
while (canFetchMore()) {
fetchMore();
}
@ -84,12 +82,16 @@ void MessagesModel::loadMessages(const FeedsSelection &selection) {
qDebug("Loading messages from feeds: %s.", qPrintable(assembled_ids));
}
select();
fetchAll();
fetchAllData();
}
void MessagesModel::filterMessages(MessagesModel::MessageFilter filter) {
m_messageFilter = filter;
bool MessagesModel::submitAll() {
qFatal("Submitting changes via model is not allowed.");
return false;
}
void MessagesModel::highlightMessages(MessagesModel::MessageHighlighter highlight) {
m_messageHighlighter = highlight;
emit layoutAboutToBeChanged();
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;
case Qt::ForegroundRole:
switch (m_messageFilter) {
switch (m_messageHighlighter) {
case HighlightImportant:
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);"))
.arg(message_ids.join(QSL(", "))))) {
select();
fetchAll();
fetchAllData();
//emit messageCountsChanged(false);
return true;
@ -383,8 +384,7 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int
}
if (query_read_msg.exec(sql_delete_query)) {
select();
fetchAll();
fetchAllData();
emit messageCountsChanged(m_currentSelection.mode(), true, false);
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);"))
.arg(message_ids.join(QSL(", ")),
read == RootItem::Read ? QSL("1") : QSL("0")))) {
select();
fetchAll();
fetchAllData();
emit messageCountsChanged(m_currentSelection.mode(), false, false);
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(", ")));
if (query_read_msg.exec(sql_delete_query)) {
select();
fetchAll();
fetchAllData();
emit messageCountsChanged(m_currentSelection.mode(), true, true);
return true;

View File

@ -35,7 +35,7 @@ class MessagesModel : public QSqlTableModel {
public:
// Enum which describes basic filtering schemes
// for messages.
enum MessageFilter {
enum MessageHighlighter {
NoHighlighting = 100,
HighlightUnread = 101,
HighlightImportant = 102
@ -55,15 +55,6 @@ class MessagesModel : public QSqlTableModel {
Message messageAt(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 reloadWholeLayout();
@ -85,18 +76,24 @@ class MessagesModel : public QSqlTableModel {
bool setBatchMessagesRestored(const QModelIndexList &messages);
// Fetches ALL available data to the model.
void fetchAll();
void fetchAllData();
// Filters messages
void highlightMessages(MessageHighlighter highlight);
public slots:
// Loads messages of given feeds.
void loadMessages(const FeedsSelection &selection);
void filterMessages(MessageFilter filter);
signals:
// 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);
protected:
private slots:
// To disable persistent changes submissions.
bool submitAll();
private:
// Sets up header data.
void setupHeaderData();
@ -106,8 +103,7 @@ class MessagesModel : public QSqlTableModel {
// Sets up all icons which are used directly by this model.
void setupIcons();
private:
MessageFilter m_messageFilter;
MessageHighlighter m_messageHighlighter;
QString m_customDateFormat;
FeedsSelection m_currentSelection;
@ -122,6 +118,6 @@ class MessagesModel : public QSqlTableModel {
QIcon m_unreadIcon;
};
Q_DECLARE_METATYPE(MessagesModel::MessageFilter)
Q_DECLARE_METATYPE(MessagesModel::MessageHighlighter)
#endif // MESSAGESMODEL_H

View File

@ -313,7 +313,7 @@ void FeedMessageViewer::createConnections() {
// Filtering & searching.
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.
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->setToolTip(action->text());
emit messageFilterChanged(action->data().value<MessagesModel::MessageFilter>());
emit messageFilterChanged(action->data().value<MessagesModel::MessageHighlighter>());
}
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);
// Emitted if message filter is changed.
void messageFilterChanged(MessagesModel::MessageFilter filter);
void messageFilterChanged(MessagesModel::MessageHighlighter filter);
private slots:
// 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);
// Reload the model now.
m_sourceModel->select();
m_sourceModel->fetchAll();
m_sourceModel->fetchAllData();
sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
@ -451,8 +450,8 @@ void MessagesView::searchMessages(const QString &pattern) {
}
}
void MessagesView::filterMessages(MessagesModel::MessageFilter filter) {
m_sourceModel->filterMessages(filter);
void MessagesView::filterMessages(MessagesModel::MessageHighlighter filter) {
m_sourceModel->highlightMessages(filter);
}
void MessagesView::adjustColumns() {

View File

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