code refactoring, removing duplicate code
This commit is contained in:
parent
1118d278d6
commit
e0cb38f318
9 changed files with 50 additions and 30 deletions
15
src/librssguard/definitions/typedefs.h
Executable file
15
src/librssguard/definitions/typedefs.h
Executable file
|
@ -0,0 +1,15 @@
|
|||
#ifndef TYPEDEFS_H
|
||||
#define TYPEDEFS_H
|
||||
|
||||
#include <QList>
|
||||
#include <QPair>
|
||||
|
||||
#include "core/message.h"
|
||||
#include "services/abstract/rootitem.h"
|
||||
|
||||
// First item here represents ID (int, primary key) of the item.
|
||||
typedef QList<QPair<int, RootItem*>> Assignment;
|
||||
typedef QPair<int, RootItem*> AssignmentItem;
|
||||
typedef QPair<Message, RootItem::Importance> ImportanceChange;
|
||||
|
||||
#endif // TYPEDEFS_H
|
|
@ -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 \
|
||||
|
|
|
@ -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 <QMultiMap>
|
||||
#include <QSqlError>
|
||||
#include <QSqlQuery>
|
||||
|
||||
class ServiceRoot;
|
||||
|
||||
class DatabaseQueries {
|
||||
public:
|
||||
|
||||
|
|
|
@ -336,6 +336,14 @@ void ServiceRoot::restoreCustomFeedsData(const QMap<QString, QVariantMap>& data,
|
|||
}
|
||||
}
|
||||
|
||||
QSqlDatabase ServiceRoot::internalDatabase() const {
|
||||
return qApp->database()->connection(metaObject()->className());
|
||||
}
|
||||
|
||||
QList<MessageFilter*> ServiceRoot::internalFilters() const {
|
||||
return qApp->feedReader()->messageFilters();
|
||||
}
|
||||
|
||||
QNetworkProxy ServiceRoot::networkProxy() const {
|
||||
return m_networkProxy;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
#include "services/abstract/rootitem.h"
|
||||
|
||||
#include "core/message.h"
|
||||
#include "definitions/typedefs.h"
|
||||
#include "miscellaneous/databasequeries.h"
|
||||
|
||||
#include <QNetworkProxy>
|
||||
#include <QPair>
|
||||
|
@ -19,11 +21,6 @@ class QAction;
|
|||
class MessagesModel;
|
||||
class CacheForServiceRoot;
|
||||
|
||||
// First item here represents ID (int, primary key) of the item.
|
||||
typedef QList<QPair<int, RootItem*>> Assignment;
|
||||
typedef QPair<int, RootItem*> AssignmentItem;
|
||||
typedef QPair<Message, RootItem::Importance> 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<CustomDatabaseEntry> customDatabaseAttributes() const;
|
||||
virtual void saveAccountDataToDatabase();
|
||||
|
||||
template<typename Categ, typename Feed>
|
||||
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<QString, QVariantMap> storeCustomFeedsData();
|
||||
virtual void restoreCustomFeedsData(const QMap<QString, QVariantMap>& data, const QHash<QString, Feed*>& feeds);
|
||||
|
||||
// Helper methods to keep "application.h" inclusion
|
||||
// out of this file.
|
||||
QSqlDatabase internalDatabase() const;
|
||||
QList<MessageFilter*> 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<typename Categ, typename Fee>
|
||||
void ServiceRoot::loadFromDatabase() {
|
||||
|
||||
QSqlDatabase database = internalDatabase();
|
||||
Assignment categories = DatabaseQueries::getCategories<Categ>(database, accountId());
|
||||
Assignment feeds = DatabaseQueries::getFeeds<Fee>(database, internalFilters(), accountId());
|
||||
auto labels = DatabaseQueries::getLabels(database, accountId());
|
||||
|
||||
performInitialAssembly(categories, feeds, labels);
|
||||
}
|
||||
|
||||
#endif // SERVICEROOT_H
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ ServiceRoot::LabelOperation TtRssServiceRoot::supportedLabelOperations() const {
|
|||
|
||||
void TtRssServiceRoot::start(bool freshly_activated) {
|
||||
if (!freshly_activated) {
|
||||
loadFromDatabase();
|
||||
loadFromDatabase<Category, TtRssFeed>();
|
||||
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<Category>(database, accountId());
|
||||
Assignment feeds = DatabaseQueries::getFeeds<TtRssFeed>(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();
|
||||
|
||||
|
|
|
@ -75,8 +75,6 @@ class TtRssServiceRoot : public ServiceRoot, public CacheForServiceRoot {
|
|||
virtual RootItem* obtainNewTreeForSyncIn() const;
|
||||
|
||||
private:
|
||||
void loadFromDatabase();
|
||||
|
||||
TtRssNetworkFactory* m_network;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue