Some cleaning of messages model.
This commit is contained in:
parent
9cb84ec313
commit
f712ae1cf7
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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()));
|
||||||
|
@ -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
2
src/gui/messagestoolbar.h
Normal file → Executable 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.
|
||||||
|
@ -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() {
|
||||||
|
@ -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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user