diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp index ae3c18d0c..c5ccaf78e 100755 --- a/src/gui/feedmessageviewer.cpp +++ b/src/gui/feedmessageviewer.cpp @@ -299,8 +299,8 @@ void FeedMessageViewer::updateFeedButtonsAvailability() { form_main->m_ui->m_actionClearSelectedItems->setEnabled(feed_selected || category_selected || service_selected); form_main->m_ui->m_actionDeleteSelectedItem->setEnabled(!critical_action_running && anything_selected); form_main->m_ui->m_actionEditSelectedItem->setEnabled(!critical_action_running && anything_selected); - form_main->m_ui->m_actionMarkSelectedItemsAsRead->setEnabled(feed_selected || category_selected || service_selected); - form_main->m_ui->m_actionMarkSelectedItemsAsUnread->setEnabled(feed_selected || category_selected || service_selected); + form_main->m_ui->m_actionMarkSelectedItemsAsRead->setEnabled(anything_selected); + form_main->m_ui->m_actionMarkSelectedItemsAsUnread->setEnabled(anything_selected); form_main->m_ui->m_actionUpdateAllItems->setEnabled(!critical_action_running); form_main->m_ui->m_actionUpdateSelectedItems->setEnabled(!critical_action_running && (feed_selected || category_selected || service_selected)); form_main->m_ui->m_actionViewSelectedItemsNewspaperMode->setEnabled(feed_selected || category_selected || service_selected); diff --git a/src/services/standard/standardrecyclebin.cpp b/src/services/standard/standardrecyclebin.cpp index 7fe019083..61a8a8c52 100755 --- a/src/services/standard/standardrecyclebin.cpp +++ b/src/services/standard/standardrecyclebin.cpp @@ -19,6 +19,7 @@ #include "miscellaneous/application.h" #include "miscellaneous/iconfactory.h" +#include "services/standard/standardserviceroot.h" #include @@ -38,6 +39,10 @@ StandardRecycleBin::~StandardRecycleBin() { qDebug("Destroying RecycleBin instance."); } +StandardServiceRoot *StandardRecycleBin::serviceRoot() { + return static_cast(getParentServiceRoot()); +} + int StandardRecycleBin::childCount() const { return 0; } @@ -64,6 +69,10 @@ QVariant StandardRecycleBin::data(int column, int role) const { } } +bool StandardRecycleBin::markAsReadUnread(RootItem::ReadStatus status) { + return serviceRoot()->markRecycleBinReadUnread(status); +} + bool StandardRecycleBin::empty() { QSqlDatabase db_handle = qApp->database()->connection(QSL("RecycleBin"), DatabaseFactory::FromSettings); diff --git a/src/services/standard/standardrecyclebin.h b/src/services/standard/standardrecyclebin.h index 393e58ee9..7cbbf2d59 100755 --- a/src/services/standard/standardrecyclebin.h +++ b/src/services/standard/standardrecyclebin.h @@ -23,6 +23,8 @@ #include +class StandardServiceRoot; + class StandardRecycleBin : public RootItem { Q_OBJECT @@ -30,12 +32,16 @@ class StandardRecycleBin : public RootItem { explicit StandardRecycleBin(RootItem *parent = NULL); virtual ~StandardRecycleBin(); + StandardServiceRoot *serviceRoot(); + int childCount() const; void appendChild(RootItem *child); int countOfUnreadMessages() const; int countOfAllMessages() const; QVariant data(int column, int role) const; + bool markAsReadUnread(ReadStatus status); + bool empty(); bool restore(); diff --git a/src/services/standard/standardserviceroot.cpp b/src/services/standard/standardserviceroot.cpp index 7e934bd6d..6a91d8315 100755 --- a/src/services/standard/standardserviceroot.cpp +++ b/src/services/standard/standardserviceroot.cpp @@ -163,6 +163,40 @@ bool StandardServiceRoot::markFeedsReadUnread(QList items, ReadStatus rea } } +bool StandardServiceRoot::markRecycleBinReadUnread(RootItem::ReadStatus read) { + QSqlDatabase db_handle = qApp->database()->connection(QSL("StandardServiceRoot"), DatabaseFactory::FromSettings); + + if (!db_handle.transaction()) { + qWarning("Starting transaction for recycle bin read change."); + return false; + } + + QSqlQuery query_read_msg(db_handle); + query_read_msg.setForwardOnly(true); + + if (!query_read_msg.prepare("UPDATE Messages SET is_read = :read WHERE is_deleted = 1;")) { + qWarning("Query preparation failed for recycle bin read change."); + + db_handle.rollback(); + return false; + } + + query_read_msg.bindValue(QSL(":read"), read == RootItem::Read ? 1 : 0); + + if (!query_read_msg.exec()) { + qDebug("Query execution for recycle bin read change failed."); + db_handle.rollback(); + } + + // Commit changes. + if (db_handle.commit()) { + return true; + } + else { + return db_handle.rollback(); + } +} + bool StandardServiceRoot::cleanFeeds(QList items, bool clean_read_only) { QSqlDatabase db_handle = qApp->database()->connection(QSL("StandardServiceRoot"), DatabaseFactory::FromSettings); diff --git a/src/services/standard/standardserviceroot.h b/src/services/standard/standardserviceroot.h index cf86bb7cb..98d2813b7 100755 --- a/src/services/standard/standardserviceroot.h +++ b/src/services/standard/standardserviceroot.h @@ -75,6 +75,7 @@ class StandardServiceRoot : public ServiceRoot { bool mergeImportExportModel(FeedsImportExportModel *model, QString &output_message); bool markFeedsReadUnread(QList items, ReadStatus read); + bool markRecycleBinReadUnread(ReadStatus read); bool cleanFeeds(QList items, bool clean_read_only); public slots: