diff --git a/CMakeLists.txt b/CMakeLists.txt index 96f6985a4..4086b8be4 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -264,6 +264,7 @@ set(APP_SOURCES src/core/basenetworkaccessmanager.cpp src/core/webpage.cpp src/core/webbrowsernetworkaccessmanager.cpp + src/core/silentnetworkaccessmanager.cpp src/core/textfactory.cpp src/core/databasefactory.cpp src/core/messagesmodel.cpp @@ -318,6 +319,7 @@ set(APP_HEADERS src/core/settings.h src/core/basenetworkaccessmanager.h src/core/webbrowsernetworkaccessmanager.h + src/core/silentnetworkaccessmanager.h src/core/webpage.h src/core/systemfactory.h src/core/databasefactory.h diff --git a/src/core/basenetworkaccessmanager.cpp b/src/core/basenetworkaccessmanager.cpp index 994911e25..fa8d62938 100644 --- a/src/core/basenetworkaccessmanager.cpp +++ b/src/core/basenetworkaccessmanager.cpp @@ -13,23 +13,22 @@ BaseNetworkAccessManager::BaseNetworkAccessManager(QObject *parent) } BaseNetworkAccessManager::~BaseNetworkAccessManager() { - qDebug("Destroying BaseNetworkAccessManager instance."); } void BaseNetworkAccessManager::loadSettings() { qDebug("Settings of BaseNetworkAccessManager changed."); QNetworkProxy new_proxy; - - // Load proxy values from settings. QNetworkProxy::ProxyType selected_proxy_type = static_cast(Settings::getInstance()->value(APP_CFG_PROXY, "proxy_type", QNetworkProxy::NoProxy).toInt()); + if (selected_proxy_type == QNetworkProxy::NoProxy) { // No extra setting is needed, set new proxy and exit this method. setProxy(QNetworkProxy::NoProxy); return; } + Settings *settings = Settings::getInstance(); // Custom proxy is selected, set it up. diff --git a/src/core/basenetworkaccessmanager.h b/src/core/basenetworkaccessmanager.h index 1016c9aba..d8ce13858 100644 --- a/src/core/basenetworkaccessmanager.h +++ b/src/core/basenetworkaccessmanager.h @@ -19,6 +19,7 @@ class BaseNetworkAccessManager : public QNetworkAccessManager { virtual void loadSettings(); protected: + QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData); diff --git a/src/core/feeddownloader.cpp b/src/core/feeddownloader.cpp index 54a4460a0..c2c2996f9 100644 --- a/src/core/feeddownloader.cpp +++ b/src/core/feeddownloader.cpp @@ -1,11 +1,15 @@ #include "core/feeddownloader.h" #include "core/feedsmodelfeed.h" +#include "core/silentnetworkaccessmanager.h" #include #include +#include +QPointer FeedDownloader::m_networkManager; + FeedDownloader::FeedDownloader(QObject *parent) : QObject(parent) { } @@ -13,7 +17,26 @@ FeedDownloader::~FeedDownloader() { qDebug("Destroying FeedDownloader instance."); } +SilentNetworkAccessManager *FeedDownloader::globalNetworkManager() { + if (m_networkManager.isNull()) { + m_networkManager = new SilentNetworkAccessManager(qApp); + } + + return m_networkManager; +} + void FeedDownloader::updateFeeds(const QList &feeds) { qDebug().nospace() << "Creating main application form in thread: \'" << QThread::currentThreadId() << "\'."; + + for (int i = 0, total = feeds.size(); i < total; i++) { + feeds.at(i)->update(); + emit progress(feeds.at(i), i + 1, total); + } + + // Update of feeds has finished. + // NOTE: This means that now "update lock" can be unlocked + // and feeds can be added/edited/deleted and application + // can eventually quit. + emit finished(); } diff --git a/src/core/feeddownloader.h b/src/core/feeddownloader.h index e9e32c41b..c27ad6dbd 100644 --- a/src/core/feeddownloader.h +++ b/src/core/feeddownloader.h @@ -2,9 +2,11 @@ #define FEEDDOWNLOADER_H #include +#include class FeedsModelFeed; +class SilentNetworkAccessManager; // This class offers means to "update" feeds // and "special" categories. @@ -17,13 +19,21 @@ class FeedDownloader : public QObject { explicit FeedDownloader(QObject *parent = 0); virtual ~FeedDownloader(); + // Returns pointer to global network access manager + // for feed online operations (primarily fetchich of new messages). + // NOTE: All feed online operations shar network access manager, + // which makes setting of custom network settings easy. + static SilentNetworkAccessManager *globalNetworkManager(); + signals: // Emitted if all items from update queue are // processed. void finished(); // Emitted if any item is processed. - // "Current" counts + // "Current" number indicates count of processed feeds + // and "total" number indicates total number of feeds + // which are in the initial queue. void progress(FeedsModelFeed *feed, int current, int total); public slots: @@ -32,6 +42,9 @@ class FeedDownloader : public QObject { // are stored persistently in the database. // Appropriate signals are emitted. void updateFeeds(const QList &feeds); + + private: + static QPointer m_networkManager; }; #endif // FEEDDOWNLOADER_H diff --git a/src/core/parsingfactory.h b/src/core/parsingfactory.h index 391e6c9f7..a1ecda355 100644 --- a/src/core/parsingfactory.h +++ b/src/core/parsingfactory.h @@ -6,8 +6,12 @@ #include +// This class contains methods to +// parse input Unicode textual data into +// another objects. class ParsingFactory { private: + // Constructors and destructors. explicit ParsingFactory(); public: diff --git a/src/core/silentnetworkaccessmanager.cpp b/src/core/silentnetworkaccessmanager.cpp new file mode 100644 index 000000000..bb5540e63 --- /dev/null +++ b/src/core/silentnetworkaccessmanager.cpp @@ -0,0 +1,10 @@ +#include "core/silentnetworkaccessmanager.h" + + +SilentNetworkAccessManager::SilentNetworkAccessManager(QObject *parent) + : BaseNetworkAccessManager(parent) { +} + +SilentNetworkAccessManager::~SilentNetworkAccessManager() { + qDebug("Destroying SilentNetworkAccessManages instance."); +} diff --git a/src/core/silentnetworkaccessmanager.h b/src/core/silentnetworkaccessmanager.h new file mode 100644 index 000000000..3eac9b4b8 --- /dev/null +++ b/src/core/silentnetworkaccessmanager.h @@ -0,0 +1,17 @@ +#ifndef SILENTNETWORKACCESSMANAGES_H +#define SILENTNETWORKACCESSMANAGES_H + +#include "core/basenetworkaccessmanager.h" + + +// Network manager used for more communication for feeds. +class SilentNetworkAccessManager : public BaseNetworkAccessManager { + Q_OBJECT + + public: + // Constructors and destructors. + explicit SilentNetworkAccessManager(QObject *parent = 0); + virtual ~SilentNetworkAccessManager(); +}; + +#endif // SILENTNETWORKACCESSMANAGES_H diff --git a/src/core/textfactory.h b/src/core/textfactory.h index 271593489..e1359c1e6 100644 --- a/src/core/textfactory.h +++ b/src/core/textfactory.h @@ -8,6 +8,7 @@ class TextFactory { private: + // Constructors and destructors. explicit TextFactory(); public: @@ -15,7 +16,7 @@ class TextFactory { // Returns invalid date/time if processing fails. static QDateTime parseDateTime(const QString &date_time); - // Strips "<....>" tags from given text. + // Strips "<....>" (HTML, XML) tags from given text. static QString stripTags(QString text); // Shortens input string according to given length limit. diff --git a/src/core/webbrowsernetworkaccessmanager.h b/src/core/webbrowsernetworkaccessmanager.h index 8dcbb8b7e..9c8a9465f 100644 --- a/src/core/webbrowsernetworkaccessmanager.h +++ b/src/core/webbrowsernetworkaccessmanager.h @@ -4,7 +4,7 @@ #include "core/basenetworkaccessmanager.h" -// This is custom network access manager for web browsers. +// This is network access manager for web browsers. class WebBrowserNetworkAccessManager : public BaseNetworkAccessManager { Q_OBJECT diff --git a/src/gui/formsettings.cpp b/src/gui/formsettings.cpp index 169529b9a..e6f214b79 100755 --- a/src/gui/formsettings.cpp +++ b/src/gui/formsettings.cpp @@ -4,8 +4,10 @@ #include "core/settings.h" #include "core/localization.h" #include "core/systemfactory.h" +#include "core/feeddownloader.h" #include "core/dynamicshortcuts.h" #include "core/webbrowsernetworkaccessmanager.h" +#include "core/silentnetworkaccessmanager.h" #include "gui/iconthemefactory.h" #include "gui/skinfactory.h" #include "gui/systemtrayicon.h" @@ -363,6 +365,7 @@ void FormSettings::saveProxy() { // Reload settings for all network access managers. WebBrowser::globalNetworkManager()->loadSettings(); + FeedDownloader::globalNetworkManager()->loadSettings(); } void FormSettings::loadLanguage() {