diff --git a/src/services/owncloud/owncloudcategory.cpp b/src/services/owncloud/owncloudcategory.cpp index 47306abed..cd384fd13 100755 --- a/src/services/owncloud/owncloudcategory.cpp +++ b/src/services/owncloud/owncloudcategory.cpp @@ -26,5 +26,12 @@ OwnCloudCategory::OwnCloudCategory(RootItem *parent) : Category(parent) { setIcon(qApp->icons()->fromTheme(QSL("folder-category"))); } +OwnCloudCategory::OwnCloudCategory(const QSqlRecord &record) : Category(NULL) { + setIcon(qApp->icons()->fromTheme(QSL("folder-category"))); + setId(record.value(CAT_DB_ID_INDEX).toInt()); + setTitle(record.value(CAT_DB_TITLE_INDEX).toString()); + setCustomId(record.value(CAT_DB_CUSTOM_ID_INDEX).toInt()); +} + OwnCloudCategory::~OwnCloudCategory() { } diff --git a/src/services/owncloud/owncloudcategory.h b/src/services/owncloud/owncloudcategory.h index 6bbbbb3c5..49888e1c5 100755 --- a/src/services/owncloud/owncloudcategory.h +++ b/src/services/owncloud/owncloudcategory.h @@ -24,6 +24,7 @@ class OwnCloudCategory : public Category { public: explicit OwnCloudCategory(RootItem *parent = NULL); + explicit OwnCloudCategory(const QSqlRecord &record); virtual ~OwnCloudCategory(); }; diff --git a/src/services/owncloud/owncloudfeed.cpp b/src/services/owncloud/owncloudfeed.cpp index 2a26a047e..96e4332aa 100755 --- a/src/services/owncloud/owncloudfeed.cpp +++ b/src/services/owncloud/owncloudfeed.cpp @@ -17,10 +17,21 @@ #include "owncloudfeed.h" +#include "miscellaneous/iconfactory.h" + OwnCloudFeed::OwnCloudFeed(RootItem *parent) : Feed(parent) { } +OwnCloudFeed::OwnCloudFeed(const QSqlRecord &record) : Feed(NULL) { + setTitle(record.value(FDS_DB_TITLE_INDEX).toString()); + setId(record.value(FDS_DB_ID_INDEX).toInt()); + setIcon(qApp->icons()->fromByteArray(record.value(FDS_DB_ICON_INDEX).toByteArray())); + setAutoUpdateType(static_cast(record.value(FDS_DB_UPDATE_TYPE_INDEX).toInt())); + setAutoUpdateInitialInterval(record.value(FDS_DB_UPDATE_INTERVAL_INDEX).toInt()); + setCustomId(record.value(FDS_DB_CUSTOM_ID_INDEX).toInt()); +} + OwnCloudFeed::~OwnCloudFeed() { } diff --git a/src/services/owncloud/owncloudfeed.h b/src/services/owncloud/owncloudfeed.h index 6375cda85..67d58b0ad 100755 --- a/src/services/owncloud/owncloudfeed.h +++ b/src/services/owncloud/owncloudfeed.h @@ -24,6 +24,7 @@ class OwnCloudFeed : public Feed { public: explicit OwnCloudFeed(RootItem *parent = NULL); + explicit OwnCloudFeed(const QSqlRecord &record); virtual ~OwnCloudFeed(); int update(); diff --git a/src/services/owncloud/owncloudrecyclebin.cpp b/src/services/owncloud/owncloudrecyclebin.cpp index 532f71199..237f45325 100755 --- a/src/services/owncloud/owncloudrecyclebin.cpp +++ b/src/services/owncloud/owncloudrecyclebin.cpp @@ -17,6 +17,8 @@ #include "services/owncloud/owncloudrecyclebin.h" +#include "services/owncloud/owncloudserviceroot.h" + OwnCloudRecycleBin::OwnCloudRecycleBin(RootItem *parent) : RecycleBin(parent) { } @@ -24,6 +26,10 @@ OwnCloudRecycleBin::OwnCloudRecycleBin(RootItem *parent) : RecycleBin(parent) { OwnCloudRecycleBin::~OwnCloudRecycleBin() { } +OwnCloudServiceRoot *OwnCloudRecycleBin::serviceRoot() { + return qobject_cast(getParentServiceRoot()); +} + bool OwnCloudRecycleBin::markAsReadUnread(RootItem::ReadStatus status) { // TODO: proved zmenu online. /*QStringList ids = serviceRoot()->customIDSOfMessagesForItem(this); diff --git a/src/services/owncloud/owncloudrecyclebin.h b/src/services/owncloud/owncloudrecyclebin.h index 53ca369b2..316103d19 100755 --- a/src/services/owncloud/owncloudrecyclebin.h +++ b/src/services/owncloud/owncloudrecyclebin.h @@ -21,11 +21,14 @@ #include "services/abstract/recyclebin.h" +class OwnCloudServiceRoot; + class OwnCloudRecycleBin : public RecycleBin { public: explicit OwnCloudRecycleBin(RootItem *parent = NULL); virtual ~OwnCloudRecycleBin(); + OwnCloudServiceRoot *serviceRoot(); bool markAsReadUnread(ReadStatus status); }; diff --git a/src/services/owncloud/owncloudserviceroot.cpp b/src/services/owncloud/owncloudserviceroot.cpp index f4fa9439e..ebcb10fc8 100755 --- a/src/services/owncloud/owncloudserviceroot.cpp +++ b/src/services/owncloud/owncloudserviceroot.cpp @@ -24,6 +24,8 @@ #include "miscellaneous/iconfactory.h" #include "services/owncloud/owncloudserviceentrypoint.h" #include "services/owncloud/owncloudrecyclebin.h" +#include "services/owncloud/owncloudfeed.h" +#include "services/owncloud/owncloudcategory.h" #include "services/owncloud/network/owncloudnetworkfactory.h" #include @@ -90,16 +92,10 @@ void OwnCloudServiceRoot::start(bool freshly_activated) { } void OwnCloudServiceRoot::stop() { - // TODO: TODO } QString OwnCloudServiceRoot::code() const { - return SERVICE_CODE_OWNCLOUD; -} - -bool OwnCloudServiceRoot::loadMessagesForItem(RootItem *item, QSqlTableModel *model) { - // TODO: TODO - return false; + return OwnCloudServiceEntryPoint().code(); } OwnCloudNetworkFactory *OwnCloudServiceRoot::network() const { @@ -157,7 +153,7 @@ void OwnCloudServiceRoot::saveAccountDataToDatabase() { query.prepare(QSL("INSERT INTO Accounts (id, type) VALUES (:id, :type);")); query.bindValue(QSL(":id"), id_to_assign); - query.bindValue(QSL(":type"), SERVICE_CODE_OWNCLOUD); + query.bindValue(QSL(":type"), code()); saved &= query.exec(); @@ -246,6 +242,50 @@ void OwnCloudServiceRoot::syncIn() { } void OwnCloudServiceRoot::loadFromDatabase() { + QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings); + Assignment categories; + Assignment feeds; + + // Obtain data for categories from the database. + QSqlQuery query_categories(database); + query_categories.setForwardOnly(true); + query_categories.prepare(QSL("SELECT * FROM Categories WHERE account_id = :account_id;")); + query_categories.bindValue(QSL(":account_id"), accountId()); + + if (!query_categories.exec()) { + qFatal("Query for obtaining categories failed. Error message: '%s'.", qPrintable(query_categories.lastError().text())); + } + + while (query_categories.next()) { + AssignmentItem pair; + pair.first = query_categories.value(CAT_DB_PARENT_ID_INDEX).toInt(); + pair.second = new OwnCloudCategory(query_categories.record()); + + categories << pair; + } + + // All categories are now loaded. + QSqlQuery query_feeds(database); + query_feeds.setForwardOnly(true); + query_feeds.prepare(QSL("SELECT * FROM Feeds WHERE account_id = :account_id;")); + query_feeds.bindValue(QSL(":account_id"), accountId()); + + if (!query_feeds.exec()) { + qFatal("Query for obtaining feeds failed. Error message: '%s'.", qPrintable(query_feeds.lastError().text())); + } + + while (query_feeds.next()) { + AssignmentItem pair; + pair.first = query_feeds.value(FDS_DB_CATEGORY_INDEX).toInt(); + pair.second = new OwnCloudFeed(query_feeds.record()); + + feeds << pair; + } + + // All data are now obtained, lets create the hierarchy. + assembleCategories(categories); + assembleFeeds(feeds); + // As the last item, add recycle bin, which is needed. appendChild(m_recycleBin); m_recycleBin->updateCounts(true); diff --git a/src/services/owncloud/owncloudserviceroot.h b/src/services/owncloud/owncloudserviceroot.h index 59e263eed..6b9088714 100755 --- a/src/services/owncloud/owncloudserviceroot.h +++ b/src/services/owncloud/owncloudserviceroot.h @@ -35,19 +35,14 @@ class OwnCloudServiceRoot : public ServiceRoot { bool canBeDeleted() const; bool editViaGui(); bool deleteViaGui(); - bool supportsFeedAdding() const; bool supportsCategoryAdding() const; QList serviceMenu(); - RecycleBin *recycleBin() const; - void start(bool freshly_activated); void stop(); QString code() const; - bool loadMessagesForItem(RootItem *item, QSqlTableModel *model); - OwnCloudNetworkFactory *network() const; void updateTitle(); diff --git a/src/services/standard/standardserviceentrypoint.cpp b/src/services/standard/standardserviceentrypoint.cpp index 18181c2f4..3779c6bdb 100755 --- a/src/services/standard/standardserviceentrypoint.cpp +++ b/src/services/standard/standardserviceentrypoint.cpp @@ -73,7 +73,7 @@ ServiceRoot *StandardServiceEntryPoint::createNewRoot() const { query.prepare(QSL("INSERT INTO Accounts (id, type) VALUES (:id, :type);")); query.bindValue(QSL(":id"), id_to_assign); - query.bindValue(QSL(":type"), SERVICE_CODE_STD_RSS); + query.bindValue(QSL(":type"), code()); if (query.exec()) { StandardServiceRoot *root = new StandardServiceRoot(); @@ -94,7 +94,7 @@ QList StandardServiceEntryPoint::initializeSubtree() const { query.setForwardOnly(true); query.prepare(QSL("SELECT id FROM Accounts WHERE type = :type;")); - query.bindValue(QSL(":type"), SERVICE_CODE_STD_RSS); + query.bindValue(QSL(":type"), code()); if (query.exec()) { while (query.next()) { diff --git a/src/services/standard/standardserviceroot.cpp b/src/services/standard/standardserviceroot.cpp index 736633623..65db58637 100755 --- a/src/services/standard/standardserviceroot.cpp +++ b/src/services/standard/standardserviceroot.cpp @@ -103,7 +103,7 @@ void StandardServiceRoot::stop() { } QString StandardServiceRoot::code() const { - return SERVICE_CODE_STD_RSS; + return StandardServiceEntryPoint().code(); } bool StandardServiceRoot::canBeEdited() const { diff --git a/src/services/tt-rss/ttrssrecyclebin.h b/src/services/tt-rss/ttrssrecyclebin.h index c3e2c53b4..09e702049 100755 --- a/src/services/tt-rss/ttrssrecyclebin.h +++ b/src/services/tt-rss/ttrssrecyclebin.h @@ -31,7 +31,6 @@ class TtRssRecycleBin : public RecycleBin { virtual ~TtRssRecycleBin(); TtRssServiceRoot *serviceRoot(); - bool markAsReadUnread(ReadStatus status); }; diff --git a/src/services/tt-rss/ttrssserviceroot.cpp b/src/services/tt-rss/ttrssserviceroot.cpp index 39355a79c..1783546fc 100755 --- a/src/services/tt-rss/ttrssserviceroot.cpp +++ b/src/services/tt-rss/ttrssserviceroot.cpp @@ -65,7 +65,7 @@ void TtRssServiceRoot::stop() { } QString TtRssServiceRoot::code() const { - return SERVICE_CODE_TT_RSS; + return TtRssServiceEntryPoint().code(); } bool TtRssServiceRoot::editViaGui() { @@ -406,7 +406,7 @@ void TtRssServiceRoot::saveAccountDataToDatabase() { query.prepare(QSL("INSERT INTO Accounts (id, type) VALUES (:id, :type);")); query.bindValue(QSL(":id"), id_to_assign); - query.bindValue(QSL(":type"), SERVICE_CODE_TT_RSS); + query.bindValue(QSL(":type"), code()); saved &= query.exec();