From a502af94374bcdf4b5d7eee42cd8c9199da36dc6 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 9 Dec 2015 11:10:51 +0100 Subject: [PATCH] Old data of TT-RSS account are now purged when credentials are changed and new data are synced. --- src/services/tt-rss/gui/formeditaccount.cpp | 8 ++++++++ .../tt-rss/network/ttrssnetworkfactory.cpp | 8 +++++++- .../tt-rss/network/ttrssnetworkfactory.h | 4 ++++ src/services/tt-rss/ttrssserviceroot.cpp | 19 +++++++++++++++++-- src/services/tt-rss/ttrssserviceroot.h | 6 ++++-- 5 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/services/tt-rss/gui/formeditaccount.cpp b/src/services/tt-rss/gui/formeditaccount.cpp index 865e2df0e..67e9d3d8c 100755 --- a/src/services/tt-rss/gui/formeditaccount.cpp +++ b/src/services/tt-rss/gui/formeditaccount.cpp @@ -139,10 +139,13 @@ void FormEditAccount::performTest() { } void FormEditAccount::onClickedOk() { + bool editing_account = true; + if (m_editableRoot == NULL) { // We want to confirm newly created account. // So save new account into DB, setup its properties. m_editableRoot = new TtRssServiceRoot(); + editing_account = false; } m_editableRoot->network()->setUrl(m_ui->m_txtUrl->lineEdit()->text()); @@ -150,6 +153,11 @@ void FormEditAccount::onClickedOk() { m_editableRoot->network()->setPassword(m_ui->m_txtPassword->lineEdit()->text()); m_editableRoot->saveAccountDataToDatabase(); + if (editing_account) { + m_editableRoot->completelyRemoveAllData(); + m_editableRoot->syncIn(); + } + accept(); } diff --git a/src/services/tt-rss/network/ttrssnetworkfactory.cpp b/src/services/tt-rss/network/ttrssnetworkfactory.cpp index 04b3f02b2..a7bd5aafb 100755 --- a/src/services/tt-rss/network/ttrssnetworkfactory.cpp +++ b/src/services/tt-rss/network/ttrssnetworkfactory.cpp @@ -31,7 +31,8 @@ TtRssNetworkFactory::TtRssNetworkFactory() - : m_url(QString()), m_username(QString()), m_password(QString()), m_sessionId(QString()) { + : m_url(QString()), m_username(QString()), m_password(QString()), m_sessionId(QString()), + m_lastLoginTime(QDateTime()) { } TtRssNetworkFactory::~TtRssNetworkFactory() { @@ -61,6 +62,10 @@ void TtRssNetworkFactory::setPassword(const QString &password) { m_password = password; } +QDateTime TtRssNetworkFactory::lastLoginTime() const { + return m_lastLoginTime; +} + // TODO: ukazky /* ukazky @@ -86,6 +91,7 @@ TtRssLoginResponse TtRssNetworkFactory::login(QNetworkReply::NetworkError &error if (network_reply.first == QNetworkReply::NoError) { m_sessionId = login_response.sessionId(); + m_lastLoginTime = QDateTime::currentDateTime(); } error = network_reply.first; diff --git a/src/services/tt-rss/network/ttrssnetworkfactory.h b/src/services/tt-rss/network/ttrssnetworkfactory.h index 8d9374f20..ca74fc11e 100755 --- a/src/services/tt-rss/network/ttrssnetworkfactory.h +++ b/src/services/tt-rss/network/ttrssnetworkfactory.h @@ -88,6 +88,9 @@ class TtRssNetworkFactory { QString password() const; void setPassword(const QString &password); + // Metadata. + QDateTime lastLoginTime() const; + // Operations. // Logs user in. @@ -109,6 +112,7 @@ class TtRssNetworkFactory { QString m_username; QString m_password; QString m_sessionId; + QDateTime m_lastLoginTime; }; #endif // TTRSSNETWORKFACTORY_H diff --git a/src/services/tt-rss/ttrssserviceroot.cpp b/src/services/tt-rss/ttrssserviceroot.cpp index 16da7dc2c..1314aa871 100755 --- a/src/services/tt-rss/ttrssserviceroot.cpp +++ b/src/services/tt-rss/ttrssserviceroot.cpp @@ -282,6 +282,15 @@ void TtRssServiceRoot::updateTitle() { setTitle(m_network->username() + QL1S("@") + host); } +void TtRssServiceRoot::completelyRemoveAllData() { + // Purge old data from SQL and clean all model items. + removeOldFeedTree(true); + cleanAllItems(); + updateCounts(true); + itemChanged(QList() << this); + requestReloadMessageList(true); +} + void TtRssServiceRoot::syncIn() { QNetworkReply::NetworkError err; TtRssGetFeedsCategoriesResponse feed_cats_response = m_network->getFeedsCategories(err); @@ -290,7 +299,7 @@ void TtRssServiceRoot::syncIn() { RootItem *new_tree = feed_cats_response.feedsCategories(true, m_network->url()); // Purge old data from SQL and clean all model items. - removeOldFeedTree(); + removeOldFeedTree(true); cleanAllItems(); // Model is clean, now store new tree into DB and @@ -326,7 +335,7 @@ QStringList TtRssServiceRoot::textualFeedIds(const QList &feeds) { return stringy_ids; } -void TtRssServiceRoot::removeOldFeedTree() { +void TtRssServiceRoot::removeOldFeedTree(bool including_messages) { QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); QSqlQuery query(database); query.setForwardOnly(true); @@ -338,6 +347,12 @@ void TtRssServiceRoot::removeOldFeedTree() { query.prepare(QSL("DELETE FROM Categories WHERE account_id = :account_id;")); query.bindValue(QSL(":account_id"), accountId()); query.exec(); + + if (including_messages) { + query.prepare(QSL("DELETE FROM Messages WHERE account_id = :account_id;")); + query.bindValue(QSL(":account_id"), accountId()); + query.exec(); + } } void TtRssServiceRoot::cleanAllItems() { diff --git a/src/services/tt-rss/ttrssserviceroot.h b/src/services/tt-rss/ttrssserviceroot.h index 56519886f..35efa1173 100755 --- a/src/services/tt-rss/ttrssserviceroot.h +++ b/src/services/tt-rss/ttrssserviceroot.h @@ -71,7 +71,9 @@ class TtRssServiceRoot : public ServiceRoot { void saveAccountDataToDatabase(); void updateTitle(); - private slots: + void completelyRemoveAllData(); + + public slots: void syncIn(); private: @@ -79,7 +81,7 @@ class TtRssServiceRoot : public ServiceRoot { // which are suitable as IN clause for SQL queries. QStringList textualFeedIds(const QList &feeds); - void removeOldFeedTree(); + void removeOldFeedTree(bool including_messages); void cleanAllItems(); void storeNewFeedTree(RootItem *root); void loadFromDatabase();