Standard recycle bin now able to mark read/unread.

This commit is contained in:
Martin Rotter 2015-11-12 10:59:41 +01:00
parent d5ff059543
commit e3d6d8e494
5 changed files with 52 additions and 2 deletions

View File

@ -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);

View File

@ -19,6 +19,7 @@
#include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h"
#include "services/standard/standardserviceroot.h"
#include <QSqlQuery>
@ -38,6 +39,10 @@ StandardRecycleBin::~StandardRecycleBin() {
qDebug("Destroying RecycleBin instance.");
}
StandardServiceRoot *StandardRecycleBin::serviceRoot() {
return static_cast<StandardServiceRoot*>(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);

View File

@ -23,6 +23,8 @@
#include <QCoreApplication>
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();

View File

@ -163,6 +163,40 @@ bool StandardServiceRoot::markFeedsReadUnread(QList<Feed*> 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<Feed*> items, bool clean_read_only) {
QSqlDatabase db_handle = qApp->database()->connection(QSL("StandardServiceRoot"), DatabaseFactory::FromSettings);

View File

@ -75,6 +75,7 @@ class StandardServiceRoot : public ServiceRoot {
bool mergeImportExportModel(FeedsImportExportModel *model, QString &output_message);
bool markFeedsReadUnread(QList<Feed*> items, ReadStatus read);
bool markRecycleBinReadUnread(ReadStatus read);
bool cleanFeeds(QList<Feed*> items, bool clean_read_only);
public slots: