diff --git a/src/miscellaneous/databasequeries.cpp b/src/miscellaneous/databasequeries.cpp index 428a12ad3..2e8971fba 100755 --- a/src/miscellaneous/databasequeries.cpp +++ b/src/miscellaneous/databasequeries.cpp @@ -22,6 +22,8 @@ #include "miscellaneous/iconfactory.h" #include "miscellaneous/textfactory.h" #include "services/abstract/category.h" +#include "services/inoreader/inoreaderserviceroot.h" +#include "services/inoreader/network/inoreadernetworkfactory.h" #include "services/owncloud/definitions.h" #include "services/owncloud/network/owncloudnetworkfactory.h" #include "services/owncloud/owncloudfeed.h" @@ -1480,6 +1482,40 @@ Assignment DatabaseQueries::getCategories(QSqlDatabase db, int account_id, bool* return categories; } +QList DatabaseQueries::getInoreaderAccounts(QSqlDatabase db, bool* ok) { + QSqlQuery query(db); + + QList roots; + + if (query.exec("SELECT * FROM InoreaderAccounts;")) { + while (query.next()) { + InoreaderServiceRoot* root = new InoreaderServiceRoot(nullptr); + + root->setId(query.value(0).toInt()); + root->setAccountId(query.value(0).toInt()); + root->network()->setUsername(query.value(1).toString()); + root->network()->setAccessToken(query.value(2).toString()); + root->network()->setRefreshToken(query.value(3).toString()); + root->network()->setBatchSize(query.value(4).toInt()); + root->updateTitle(); + roots.append(root); + } + + if (ok != nullptr) { + *ok = true; + } + } + else { + qWarning("Inoreader: Getting list of activated accounts failed: '%s'.", qPrintable(query.lastError().text())); + + if (ok != nullptr) { + *ok = false; + } + } + + return roots; +} + bool DatabaseQueries::overwriteInoreaderAccount(QSqlDatabase db, const QString& username, const QString& access_token, const QString& refresh_token, int batch_size, int account_id) { QSqlQuery query(db); diff --git a/src/miscellaneous/databasequeries.h b/src/miscellaneous/databasequeries.h index ef3d7c301..8693a6ed3 100755 --- a/src/miscellaneous/databasequeries.h +++ b/src/miscellaneous/databasequeries.h @@ -79,6 +79,7 @@ class DatabaseQueries { static Assignment getCategories(QSqlDatabase db, int account_id, bool* ok = nullptr); // Inoreader account. + static QList getInoreaderAccounts(QSqlDatabase db, bool* ok = nullptr); static bool overwriteInoreaderAccount(QSqlDatabase db, const QString& username, const QString& access_token, const QString& refresh_token, int batch_size, int account_id); static bool createInoreaderAccount(QSqlDatabase db, int id_to_assign, const QString& username, diff --git a/src/services/inoreader/gui/formeditinoreaderaccount.cpp b/src/services/inoreader/gui/formeditinoreaderaccount.cpp index 93a49317c..4f1d81578 100755 --- a/src/services/inoreader/gui/formeditinoreaderaccount.cpp +++ b/src/services/inoreader/gui/formeditinoreaderaccount.cpp @@ -91,6 +91,10 @@ void FormEditInoreaderAccount::onClickedOk() { editing_account = false; } + if (m_editableRoot->network()->userName().isEmpty()) { + m_editableRoot->network()->setUsername(tr("uknown")); + } + m_editableRoot->network()->setBatchSize(m_ui.m_spinLimitMessages->value()); m_editableRoot->saveAccountDataToDatabase(); accept(); diff --git a/src/services/inoreader/inoreaderentrypoint.cpp b/src/services/inoreader/inoreaderentrypoint.cpp index cae562d9f..8f6ad0b8d 100755 --- a/src/services/inoreader/inoreaderentrypoint.cpp +++ b/src/services/inoreader/inoreaderentrypoint.cpp @@ -34,7 +34,9 @@ ServiceRoot* InoreaderEntryPoint::createNewRoot() const { } QList InoreaderEntryPoint::initializeSubtree() const { - return QList(); + QSqlDatabase database = qApp->database()->connection(QSL("InoreaderEntryPoint"), DatabaseFactory::FromSettings); + + return DatabaseQueries::getInoreaderAccounts(database); } bool InoreaderEntryPoint::isSingleInstanceService() const { diff --git a/src/services/inoreader/inoreaderserviceroot.cpp b/src/services/inoreader/inoreaderserviceroot.cpp index 554565151..66b60ef78 100755 --- a/src/services/inoreader/inoreaderserviceroot.cpp +++ b/src/services/inoreader/inoreaderserviceroot.cpp @@ -32,19 +32,21 @@ InoreaderServiceRoot::InoreaderServiceRoot(InoreaderNetworkFactory* network, Roo else { m_network->setParent(this); } + + setIcon(InoreaderEntryPoint().icon()); } InoreaderServiceRoot::~InoreaderServiceRoot() {} void InoreaderServiceRoot::updateTitle() { - setTitle(m_network->username() + QSL(" (Inoreader)")); + setTitle(m_network->userName() + QSL(" (Inoreader)")); } void InoreaderServiceRoot::saveAccountDataToDatabase() { QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); if (accountId() != NO_PARENT_CATEGORY) { - if (DatabaseQueries::overwriteInoreaderAccount(database, m_network->username(), m_network->accessToken(), + if (DatabaseQueries::overwriteInoreaderAccount(database, m_network->userName(), m_network->accessToken(), m_network->refreshToken(), m_network->batchSize(), accountId())) { updateTitle(); @@ -57,7 +59,7 @@ void InoreaderServiceRoot::saveAccountDataToDatabase() { if (saved) { if (DatabaseQueries::createInoreaderAccount(database, id_to_assign, - m_network->username(), m_network->accessToken(), + m_network->userName(), m_network->accessToken(), m_network->refreshToken(), m_network->batchSize())) { setId(id_to_assign); setAccountId(id_to_assign); diff --git a/src/services/inoreader/inoreaderserviceroot.h b/src/services/inoreader/inoreaderserviceroot.h index c7d5a4f8e..70ddaf554 100755 --- a/src/services/inoreader/inoreaderserviceroot.h +++ b/src/services/inoreader/inoreaderserviceroot.h @@ -45,8 +45,6 @@ class InoreaderServiceRoot : public ServiceRoot { public slots: void addNewFeed(const QString& url); void addNewCategory(); - - private slots: void updateTitle(); private: diff --git a/src/services/inoreader/network/inoreadernetworkfactory.cpp b/src/services/inoreader/network/inoreadernetworkfactory.cpp index c6c5470b6..78aca26c5 100755 --- a/src/services/inoreader/network/inoreadernetworkfactory.cpp +++ b/src/services/inoreader/network/inoreadernetworkfactory.cpp @@ -38,7 +38,7 @@ bool InoreaderNetworkFactory::isLoggedIn() const { return m_oauth2->expirationAt() > QDateTime::currentDateTime() && m_oauth2->status() == QAbstractOAuth::Status::Granted; } -QString InoreaderNetworkFactory::username() const { +QString InoreaderNetworkFactory::userName() const { return m_username; } @@ -122,6 +122,10 @@ void InoreaderNetworkFactory::initializeOauth() { }); } +void InoreaderNetworkFactory::setUsername(const QString& username) { + m_username = username; +} + void InoreaderNetworkFactory::setRefreshToken(const QString& refreshToken) { m_refreshToken = refreshToken; } diff --git a/src/services/inoreader/network/inoreadernetworkfactory.h b/src/services/inoreader/network/inoreadernetworkfactory.h index e0ecff6c1..8f1a8e587 100755 --- a/src/services/inoreader/network/inoreadernetworkfactory.h +++ b/src/services/inoreader/network/inoreadernetworkfactory.h @@ -31,7 +31,8 @@ class InoreaderNetworkFactory : public QObject { bool isLoggedIn() const; - QString username() const; + QString userName() const; + void setUsername(const QString& username); // Gets/sets the amount of messages to obtain during single feed update. int batchSize() const;