diff --git a/src/core/messagesmodel.cpp b/src/core/messagesmodel.cpp index e359424a8..55a9408b9 100644 --- a/src/core/messagesmodel.cpp +++ b/src/core/messagesmodel.cpp @@ -325,9 +325,6 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages query_delete_msg.bindValue(":id", message_id); query_delete_msg.bindValue(":important", importance == 1 ? 0 : 1); - - // TODO: dat u vsech funkci ty execy do ifu a kdyz - // vratijou false tak udela rollback a vratit funkci s hodnotou false. query_delete_msg.exec(); } @@ -373,6 +370,8 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int // FULLY reload the model if underlying data is changed. select(); fetchAll(); + + emit feedCountsChanged(); return true; } else { @@ -424,7 +423,41 @@ bool MessagesModel::switchAllMessageImportance() { } bool MessagesModel::setAllMessagesDeleted(int deleted) { - return false; + QSqlDatabase db_handle = database(); + + if (!db_handle.transaction()) { + qWarning("Starting transaction for all message deletion."); + return false; + } + + QSqlQuery query_delete_msg(db_handle); + if (!query_delete_msg.prepare(QString("UPDATE messages SET deleted = :deleted " + "WHERE feed IN (%1) AND deleted = 0").arg(textualFeeds().join(", ")))) { + qWarning("Query preparation failed for message deletion."); + + db_handle.rollback(); + return false; + } + + query_delete_msg.bindValue(":deleted", deleted); + + if (!query_delete_msg.exec()) { + qDebug("Query execution for all message deletion failed."); + db_handle.rollback(); + } + + // Commit changes. + if (db_handle.commit()) { + // FULLY reload the model if underlying data is changed. + select(); + fetchAll(); + + emit feedCountsChanged(); + return true; + } + else { + return db_handle.rollback(); + } } bool MessagesModel::setAllMessagesRead(int read) { diff --git a/src/core/messagesmodel.h b/src/core/messagesmodel.h index 3e7c1669e..0a6c8f34f 100644 --- a/src/core/messagesmodel.h +++ b/src/core/messagesmodel.h @@ -20,7 +20,6 @@ class Message { QDateTime m_updated; }; - class MessagesModel : public QSqlTableModel { Q_OBJECT diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp index 4bacd8820..ee6bd99f5 100644 --- a/src/gui/feedmessageviewer.cpp +++ b/src/gui/feedmessageviewer.cpp @@ -62,6 +62,8 @@ void FeedMessageViewer::createConnections() { SIGNAL(triggered()), m_messagesView, SLOT(openSelectedMessagesInternally())); connect(FormMain::getInstance()->m_ui->m_actionMarkAllMessagesAsRead, SIGNAL(triggered()), m_messagesView, SLOT(setAllMessagesRead())); + connect(FormMain::getInstance()->m_ui->m_actionDeleteAllMessages, + SIGNAL(triggered()), m_messagesView, SLOT(setAllMessagesDeleted())); } void FeedMessageViewer::initialize() { diff --git a/src/gui/messagesview.cpp b/src/gui/messagesview.cpp index e430ea997..0697cf295 100644 --- a/src/gui/messagesview.cpp +++ b/src/gui/messagesview.cpp @@ -338,6 +338,18 @@ void MessagesView::setAllMessagesUnread() { setAllMessagesReadStatus(0); } +void MessagesView::setAllMessagesDeleteStatus(int deleted) { + m_sourceModel->setAllMessagesDeleted(deleted); + + // We deleted completely each and every visible message. + // That is why no message can be displayed now. + emit currentMessageRemoved(); +} + +void MessagesView::setAllMessagesDeleted() { + setAllMessagesDeleteStatus(1); +} + void MessagesView::reselectIndexes(const QModelIndexList &indexes) { selectionModel()->clearSelection(); diff --git a/src/gui/messagesview.h b/src/gui/messagesview.h index 16601e983..22b015a44 100755 --- a/src/gui/messagesview.h +++ b/src/gui/messagesview.h @@ -40,6 +40,9 @@ class MessagesView : public QTreeView { void setAllMessagesRead(); void setAllMessagesUnread(); + void setAllMessagesDeleteStatus(int deleted); + void setAllMessagesDeleted(); + protected slots: // Marks given indexes as selected. void reselectIndexes(const QModelIndexList &indexes);