From 04d2b1392d2e137d8d6cbda6caef58815c6da43c Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 18 Jan 2016 19:08:00 +0100 Subject: [PATCH] Fixed bug with left over messages. --- resources/text/CHANGELOG | 1 + src/services/tt-rss/ttrssserviceroot.cpp | 18 ++++++++++++++++++ src/services/tt-rss/ttrssserviceroot.h | 1 + 3 files changed, 20 insertions(+) diff --git a/resources/text/CHANGELOG b/resources/text/CHANGELOG index a861e5c68..c4868cfa4 100755 --- a/resources/text/CHANGELOG +++ b/resources/text/CHANGELOG @@ -17,6 +17,7 @@ Changed: Fixed: +▪ Left over messages are now correctly deleted after sync-in is performed in TT-RSS account. ▪ Made some rather big changes to sorting/filtering of feeds, which is now dynamic. ▪ Feeds are now (re)sorted when batch update finishes. (bug #150) ▪ Expand status if items in feed list are now persistent when performing sync-in of TT-RSS accounts. (bug #149) diff --git a/src/services/tt-rss/ttrssserviceroot.cpp b/src/services/tt-rss/ttrssserviceroot.cpp index c800419a2..34a0703b9 100755 --- a/src/services/tt-rss/ttrssserviceroot.cpp +++ b/src/services/tt-rss/ttrssserviceroot.cpp @@ -587,6 +587,10 @@ void TtRssServiceRoot::syncIn() { // set primary IDs of the items. storeNewFeedTree(new_tree); + // We have new feed, some feeds were maybe removed, + // so remove left over messages. + removeLeftOverMessages(); + foreach (RootItem *top_level_item, new_tree->childItems()) { top_level_item->setParent(NULL); requestItemReassignment(top_level_item, this); @@ -669,6 +673,20 @@ void TtRssServiceRoot::removeOldFeedTree(bool including_messages) { } } +void TtRssServiceRoot::removeLeftOverMessages() { + QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); + QSqlQuery query(database); + int account_id = accountId(); + + query.setForwardOnly(true); + query.prepare(QSL("DELETE FROM Messages WHERE account_id = :account_id AND feed NOT IN (SELECT custom_id FROM Feeds WHERE account_id = :account_id);")); + query.bindValue(QSL(":account_id"), account_id); + + if (!query.exec()) { + qWarning("Removing of left over messages failed: '%s'.", qPrintable(query.lastError().text())); + } +} + void TtRssServiceRoot::cleanAllItems() { foreach (RootItem *top_level_item, childItems()) { if (top_level_item->kind() != RootItemKind::Bin) { diff --git a/src/services/tt-rss/ttrssserviceroot.h b/src/services/tt-rss/ttrssserviceroot.h index d25589f94..68e394f70 100755 --- a/src/services/tt-rss/ttrssserviceroot.h +++ b/src/services/tt-rss/ttrssserviceroot.h @@ -99,6 +99,7 @@ class TtRssServiceRoot : public ServiceRoot { QStringList textualFeedIds(const QList &feeds); void removeOldFeedTree(bool including_messages); + void removeLeftOverMessages(); void cleanAllItems(); void storeNewFeedTree(RootItem *root); void loadFromDatabase();