Marking TT-RSS read/unread works - only for whole acc now.

This commit is contained in:
Martin Rotter 2015-12-12 12:32:40 +01:00
parent 4e289fc1f0
commit e23f517c05
9 changed files with 75 additions and 32 deletions

View File

@ -560,7 +560,7 @@ set(APP_HEADERS
# TT-RSS service headers.
src/services/tt-rss/ttrssserviceroot.h
src/services/tt-rss/ttrssrecyclebin.h
src/services/tt-rss/ttrssrecyclebin.h;
src/services/tt-rss/ttrssfeed.h
src/services/tt-rss/ttrsscategory.h
src/services/tt-rss/gui/formeditaccount.h

View File

@ -60,6 +60,38 @@ bool ServiceRoot::deleteViaGui() {
return data_removed;
}
bool ServiceRoot::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();
}
}
QList<Message> ServiceRoot::undeletedMessages() const {
QList<Message> messages;
int account_id = accountId();

View File

@ -50,6 +50,8 @@ class ServiceRoot : public RootItem {
bool deleteViaGui();
bool markAsReadUnread(ReadStatus status);
// Returns list of specific actions for "Add new item" main window menu.
// So typical list of returned actions could look like:
// a) Add new feed

View File

@ -118,35 +118,7 @@ bool StandardServiceRoot::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();
}
return ServiceRoot::markAsReadUnread(status);
}
QVariant StandardServiceRoot::data(int column, int role) const {

View File

@ -31,8 +31,6 @@ class TtRssCategory : public Category {
explicit TtRssCategory(const QSqlRecord &record);
virtual ~TtRssCategory();
int customId() const;
void setCustomId(int custom_id);

View File

@ -144,6 +144,24 @@ QList<Message> TtRssFeed::undeletedMessages() const {
return messages;
}
bool TtRssFeed::markAsReadUnread(RootItem::ReadStatus status) {
QNetworkReply::NetworkError error;
QStringList ids = serviceRoot()->customIDSOfMessagesForItem(this);
TtRssUpdateArticleResponse response = serviceRoot()->network()->updateArticles(ids, UpdateArticle::Unread,
status == RootItem::Unread ?
UpdateArticle::SetToTrue :
UpdateArticle::SetToFalse,
error);
if (error != QNetworkReply::NoError || response.updateStatus() != STATUS_OK) {
return false;
}
else {
// TODO: todo
//return Feed::markAsReadUnread(status);
}
}
int TtRssFeed::customId() const {
return m_customId;
}

View File

@ -43,6 +43,8 @@ class TtRssFeed : public Feed {
int update();
QList<Message> undeletedMessages() const;
bool markAsReadUnread(ReadStatus status);
int customId() const;
void setCustomId(int custom_id);

View File

@ -86,6 +86,23 @@ bool TtRssServiceRoot::deleteViaGui() {
}
}
bool TtRssServiceRoot::markAsReadUnread(RootItem::ReadStatus status) {
QNetworkReply::NetworkError error;
QStringList ids = customIDSOfMessagesForItem(this);
TtRssUpdateArticleResponse response = m_network->updateArticles(ids, UpdateArticle::Unread,
status == RootItem::Unread ?
UpdateArticle::SetToTrue :
UpdateArticle::SetToFalse,
error);
if (error != QNetworkReply::NoError || response.updateStatus() != STATUS_OK) {
return false;
}
else {
return ServiceRoot::markAsReadUnread(status);
}
}
bool TtRssServiceRoot::canBeEdited() {
return true;
}

View File

@ -44,6 +44,8 @@ class TtRssServiceRoot : public ServiceRoot {
bool editViaGui();
bool deleteViaGui();
bool markAsReadUnread(ReadStatus status);
QVariant data(int column, int role) const;
QList<QAction*> addItemMenu();