diff --git a/src/services/standard/standardserviceroot.cpp b/src/services/standard/standardserviceroot.cpp index d3315adab..7a51f291b 100755 --- a/src/services/standard/standardserviceroot.cpp +++ b/src/services/standard/standardserviceroot.cpp @@ -117,6 +117,38 @@ bool StandardServiceRoot::deleteViaGui() { return ServiceRoot::deleteViaGui(); } +bool StandardServiceRoot::markAsReadUnread(RootItem::ReadStatus status) { + QSqlDatabase db_handle = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); + + if (!db_handle.transaction()) { + qWarning("Starting transaction for feeds read change."); + return false; + } + + QSqlQuery query_read_msg(db_handle); + query_read_msg.setForwardOnly(true); + query_read_msg.prepare(QSL("UPDATE Messages SET is_read = :read WHERE is_pdeleted = 0 AND account_id = :account_id;")); + + query_read_msg.bindValue(QSL(":account_id"), accountId()); + query_read_msg.bindValue(QSL(":read"), status == RootItem::Read ? 1 : 0); + + if (!query_read_msg.exec()) { + qDebug("Query execution for feeds read change failed."); + db_handle.rollback(); + } + + // Commit changes. + if (db_handle.commit()) { + updateCounts(false); + itemChanged(getSubTree()); + requestReloadMessageList(status == RootItem::Read); + return true; + } + else { + return db_handle.rollback(); + } +} + QVariant StandardServiceRoot::data(int column, int role) const { switch (role) { case Qt::ToolTipRole: @@ -172,7 +204,7 @@ bool StandardServiceRoot::markFeedsReadUnread(QList items, ReadStatus rea QList itemss; foreach (Feed *feed, items) { - feed->updateCounts(true); + feed->updateCounts(false); itemss.append(feed); } diff --git a/src/services/standard/standardserviceroot.h b/src/services/standard/standardserviceroot.h index 1a7b62ab0..95425dc20 100755 --- a/src/services/standard/standardserviceroot.h +++ b/src/services/standard/standardserviceroot.h @@ -47,17 +47,21 @@ class StandardServiceRoot : public ServiceRoot { bool canBeDeleted(); bool deleteViaGui(); + bool markAsReadUnread(ReadStatus status); + QVariant data(int column, int role) const; Qt::ItemFlags additionalFlags() const; + // Access to recycle bin. RecycleBin *recycleBin(); // Return "add feed" and "add category" items. QList addItemMenu(); - // Return menu to be shown in "Services -> service" menu. + // Returns menu to be shown in "Services -> service" menu. QList serviceMenu(); + // Returns context menu. QList contextMenu(); // Message stuff.