diff --git a/src/librssguard/definitions/typedefs.h b/src/librssguard/definitions/typedefs.h new file mode 100755 index 000000000..46e9e535c --- /dev/null +++ b/src/librssguard/definitions/typedefs.h @@ -0,0 +1,15 @@ +#ifndef TYPEDEFS_H +#define TYPEDEFS_H + +#include +#include + +#include "core/message.h" +#include "services/abstract/rootitem.h" + +// First item here represents ID (int, primary key) of the item. +typedef QList> Assignment; +typedef QPair AssignmentItem; +typedef QPair ImportanceChange; + +#endif // TYPEDEFS_H diff --git a/src/librssguard/librssguard.pro b/src/librssguard/librssguard.pro index 7d8f4fba5..ad2a04d4a 100644 --- a/src/librssguard/librssguard.pro +++ b/src/librssguard/librssguard.pro @@ -44,6 +44,7 @@ HEADERS += core/feeddownloader.h \ core/messagesmodelsqllayer.h \ core/messagesproxymodel.h \ definitions/definitions.h \ + definitions/typedefs.h \ dynamic-shortcuts/dynamicshortcuts.h \ dynamic-shortcuts/dynamicshortcutswidget.h \ dynamic-shortcuts/shortcutcatcher.h \ diff --git a/src/librssguard/miscellaneous/databasequeries.h b/src/librssguard/miscellaneous/databasequeries.h index 4e04b2f8e..2a5156f26 100644 --- a/src/librssguard/miscellaneous/databasequeries.h +++ b/src/librssguard/miscellaneous/databasequeries.h @@ -6,17 +6,18 @@ #include "services/abstract/rootitem.h" #include "core/messagefilter.h" +#include "definitions/typedefs.h" #include "miscellaneous/textfactory.h" #include "services/abstract/category.h" #include "services/abstract/label.h" -#include "services/abstract/serviceroot.h" -#include "services/greader/greaderserviceroot.h" #include "services/standard/standardfeed.h" #include #include #include +class ServiceRoot; + class DatabaseQueries { public: diff --git a/src/librssguard/services/abstract/serviceroot.cpp b/src/librssguard/services/abstract/serviceroot.cpp index 4c1e97553..75d402648 100644 --- a/src/librssguard/services/abstract/serviceroot.cpp +++ b/src/librssguard/services/abstract/serviceroot.cpp @@ -336,6 +336,14 @@ void ServiceRoot::restoreCustomFeedsData(const QMap& data, } } +QSqlDatabase ServiceRoot::internalDatabase() const { + return qApp->database()->connection(metaObject()->className()); +} + +QList ServiceRoot::internalFilters() const { + return qApp->feedReader()->messageFilters(); +} + QNetworkProxy ServiceRoot::networkProxy() const { return m_networkProxy; } diff --git a/src/librssguard/services/abstract/serviceroot.h b/src/librssguard/services/abstract/serviceroot.h index 81c59b2c9..b85874f5a 100644 --- a/src/librssguard/services/abstract/serviceroot.h +++ b/src/librssguard/services/abstract/serviceroot.h @@ -6,6 +6,8 @@ #include "services/abstract/rootitem.h" #include "core/message.h" +#include "definitions/typedefs.h" +#include "miscellaneous/databasequeries.h" #include #include @@ -19,11 +21,6 @@ class QAction; class MessagesModel; class CacheForServiceRoot; -// First item here represents ID (int, primary key) of the item. -typedef QList> Assignment; -typedef QPair AssignmentItem; -typedef QPair ImportanceChange; - struct CustomDatabaseEntry { public: CustomDatabaseEntry(const QString& name, bool encrypted = false) : m_name(name), m_encrypted(encrypted) {} @@ -65,6 +62,9 @@ class ServiceRoot : public RootItem { virtual QList customDatabaseAttributes() const; virtual void saveAccountDataToDatabase(); + template + void loadFromDatabase(); + // 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 @@ -255,6 +255,11 @@ class ServiceRoot : public RootItem { virtual QMap storeCustomFeedsData(); virtual void restoreCustomFeedsData(const QMap& data, const QHash& feeds); + // Helper methods to keep "application.h" inclusion + // out of this file. + QSqlDatabase internalDatabase() const; + QList internalFilters() const; + protected: RecycleBin* m_recycleBin; ImportantNode* m_importantNode; @@ -267,4 +272,15 @@ class ServiceRoot : public RootItem { ServiceRoot::LabelOperation operator|(ServiceRoot::LabelOperation lhs, ServiceRoot::LabelOperation rhs); ServiceRoot::LabelOperation operator&(ServiceRoot::LabelOperation lhs, ServiceRoot::LabelOperation rhs); +template +void ServiceRoot::loadFromDatabase() { + + QSqlDatabase database = internalDatabase(); + Assignment categories = DatabaseQueries::getCategories(database, accountId()); + Assignment feeds = DatabaseQueries::getFeeds(database, internalFilters(), accountId()); + auto labels = DatabaseQueries::getLabels(database, accountId()); + + performInitialAssembly(categories, feeds, labels); +} + #endif // SERVICEROOT_H diff --git a/src/librssguard/services/standard/standardserviceroot.cpp b/src/librssguard/services/standard/standardserviceroot.cpp index 2862d66bb..d3ef41280 100644 --- a/src/librssguard/services/standard/standardserviceroot.cpp +++ b/src/librssguard/services/standard/standardserviceroot.cpp @@ -43,7 +43,7 @@ StandardServiceRoot::~StandardServiceRoot() { void StandardServiceRoot::start(bool freshly_activated) { loadFromDatabase(); - if (freshly_activated && getSubTree(RootItem::Kind::Feed).isEmpty()) { + if (freshly_activated && getSubTreeFeeds().isEmpty()) { // In other words, if there are no feeds or categories added. if (MessageBox::show(qApp->mainFormWidget(), QMessageBox::Question, QObject::tr("Load initial set of feeds"), tr("This new account does not include any feeds. You can now add default set of feeds."), @@ -92,10 +92,6 @@ bool StandardServiceRoot::canBeEdited() const { return true; } -bool StandardServiceRoot::canBeDeleted() const { - return true; -} - bool StandardServiceRoot::editViaGui() { FormEditStandardAccount form_pointer(qApp->mainFormWidget()); @@ -103,10 +99,6 @@ bool StandardServiceRoot::editViaGui() { return true; } -bool StandardServiceRoot::deleteViaGui() { - return ServiceRoot::deleteViaGui(); -} - bool StandardServiceRoot::supportsFeedAdding() const { return true; } diff --git a/src/librssguard/services/standard/standardserviceroot.h b/src/librssguard/services/standard/standardserviceroot.h index fa43cbdf3..b088a9405 100644 --- a/src/librssguard/services/standard/standardserviceroot.h +++ b/src/librssguard/services/standard/standardserviceroot.h @@ -28,9 +28,7 @@ class StandardServiceRoot : public ServiceRoot { QString code() const; bool canBeEdited() const; - bool canBeDeleted() const; bool editViaGui(); - bool deleteViaGui(); bool supportsFeedAdding() const; bool supportsCategoryAdding() const; diff --git a/src/librssguard/services/tt-rss/ttrssserviceroot.cpp b/src/librssguard/services/tt-rss/ttrssserviceroot.cpp index fc5c149dd..b45b3dbf1 100644 --- a/src/librssguard/services/tt-rss/ttrssserviceroot.cpp +++ b/src/librssguard/services/tt-rss/ttrssserviceroot.cpp @@ -38,7 +38,7 @@ ServiceRoot::LabelOperation TtRssServiceRoot::supportedLabelOperations() const { void TtRssServiceRoot::start(bool freshly_activated) { if (!freshly_activated) { - loadFromDatabase(); + loadFromDatabase(); loadCacheFromFile(); } @@ -206,15 +206,6 @@ TtRssNetworkFactory* TtRssServiceRoot::network() const { return m_network; } -void TtRssServiceRoot::loadFromDatabase() { - QSqlDatabase database = qApp->database()->connection(metaObject()->className()); - Assignment categories = DatabaseQueries::getCategories(database, accountId()); - Assignment feeds = DatabaseQueries::getFeeds(database, qApp->feedReader()->messageFilters(), accountId()); - auto labels = DatabaseQueries::getLabels(database, accountId()); - - performInitialAssembly(categories, feeds, labels); -} - void TtRssServiceRoot::updateTitle() { QString host = QUrl(m_network->url()).host(); diff --git a/src/librssguard/services/tt-rss/ttrssserviceroot.h b/src/librssguard/services/tt-rss/ttrssserviceroot.h index 1e1825069..fd9648058 100644 --- a/src/librssguard/services/tt-rss/ttrssserviceroot.h +++ b/src/librssguard/services/tt-rss/ttrssserviceroot.h @@ -75,8 +75,6 @@ class TtRssServiceRoot : public ServiceRoot, public CacheForServiceRoot { virtual RootItem* obtainNewTreeForSyncIn() const; private: - void loadFromDatabase(); - TtRssNetworkFactory* m_network; };