From 9e75252f294f1a756985a0f7a8e5cd0577e1d956 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Tue, 25 Feb 2014 06:42:58 +0100 Subject: [PATCH] Hmmm. --- src/core/basenetworkaccessmanager.cpp | 14 ++++++++++++++ src/core/basenetworkaccessmanager.h | 4 ++++ src/core/networkfactory.cpp | 15 +++++++++++++++ src/core/silentnetworkaccessmanager.cpp | 17 ++++++++--------- src/core/silentnetworkaccessmanager.h | 10 +++++++++- src/core/webbrowsernetworkaccessmanager.cpp | 12 ------------ src/core/webbrowsernetworkaccessmanager.h | 1 - src/gui/formmain.cpp | 2 ++ 8 files changed, 52 insertions(+), 23 deletions(-) diff --git a/src/core/basenetworkaccessmanager.cpp b/src/core/basenetworkaccessmanager.cpp index 12be6c299..02ea955c4 100644 --- a/src/core/basenetworkaccessmanager.cpp +++ b/src/core/basenetworkaccessmanager.cpp @@ -4,11 +4,15 @@ #include "core/settings.h" #include +#include #include BaseNetworkAccessManager::BaseNetworkAccessManager(QObject *parent) : QNetworkAccessManager(parent) { + connect(this, SIGNAL(sslErrors(QNetworkReply*,QList)), + this, SLOT(onSslErrors(QNetworkReply*,QList))); + loadSettings(); } @@ -48,6 +52,16 @@ void BaseNetworkAccessManager::loadSettings() { qDebug("Settings of BaseNetworkAccessManager loaded."); } +void BaseNetworkAccessManager::onSslErrors(QNetworkReply *reply, + const QList &error) { + qDebug("SSL errors for '%s': '%s' (code %d).", + qPrintable(reply->url().toString()), + qPrintable(reply->errorString()), + (int) reply->error()); + + reply->ignoreSslErrors(error); +} + QNetworkReply *BaseNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData) { diff --git a/src/core/basenetworkaccessmanager.h b/src/core/basenetworkaccessmanager.h index d058b4850..b71950a48 100644 --- a/src/core/basenetworkaccessmanager.h +++ b/src/core/basenetworkaccessmanager.h @@ -18,6 +18,10 @@ class BaseNetworkAccessManager : public QNetworkAccessManager { // NOTE: This sets up proxy settings. virtual void loadSettings(); + protected slots: + void onSslErrors(QNetworkReply *reply, + const QList &error); + protected: // Creates custom request. QNetworkReply *createRequest(Operation op, diff --git a/src/core/networkfactory.cpp b/src/core/networkfactory.cpp index bc2ac3ce2..5dbe51a1a 100644 --- a/src/core/networkfactory.cpp +++ b/src/core/networkfactory.cpp @@ -95,7 +95,22 @@ QNetworkReply::NetworkError NetworkFactory::downloadFeedFile(const QString &url, // process of downloading of a file easier to understand. // Make necessary variables. + + // TODO: Tady bych chtěl použit singleton + // jenže když je toto v jinym vlakně (viz feedmessageviewer movetothread) + // tak se manager ze singletonu vytvoří s parentem qApp kterej je z jinyho + // vlakna a dojde k warningu (TO NECHCI) + // reseni: but necham silent bez parenta a pridam metodu na odstraneni + // nebo k metode instance() pridam parametr kde se specifikuje + // parent kterej se pouzije pro vytvoreni managera a to by mel + // byt parent z tohodle worker vlakna nebo jeste je moznost + // zakomentovat movetothread a vykonavat updaty v hlavnim vlakne, + // ale to vyusti v drobnej lag a NEBO jeste je moznost + // zavolat SilentNetworkAccessManager::instance() před vytvořením hlavního + // okna aplikace v mainu tak aby se nastavil byl manager i parent + // na stejnem vlaknu SilentNetworkAccessManager manager; + //SilentNetworkAccessManager *manager = SilentNetworkAccessManager::instance(); QEventLoop loop; QTimer timer; QNetworkRequest request; diff --git a/src/core/silentnetworkaccessmanager.cpp b/src/core/silentnetworkaccessmanager.cpp index 6c3cddadf..d598f950c 100644 --- a/src/core/silentnetworkaccessmanager.cpp +++ b/src/core/silentnetworkaccessmanager.cpp @@ -4,12 +4,13 @@ #include #include +#include +QPointer SilentNetworkAccessManager::s_instance; + SilentNetworkAccessManager::SilentNetworkAccessManager(QObject *parent) : BaseNetworkAccessManager(parent) { - connect(this, SIGNAL(sslErrors(QNetworkReply*,QList)), - this, SLOT(onSslErrors(QNetworkReply*,QList))); connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SLOT(onAuthenticationRequired(QNetworkReply*,QAuthenticator*))); } @@ -18,14 +19,12 @@ SilentNetworkAccessManager::~SilentNetworkAccessManager() { qDebug("Destroying SilentNetworkAccessManages instance."); } -void SilentNetworkAccessManager::onSslErrors(QNetworkReply *reply, - const QList &error) { - qDebug("SSL errors for '%s': '%s' (code %d).", - qPrintable(reply->url().toString()), - qPrintable(reply->errorString()), - (int) reply->error()); +SilentNetworkAccessManager *SilentNetworkAccessManager::instance() { + if (s_instance.isNull()) { + s_instance = new SilentNetworkAccessManager(qApp); + } - reply->ignoreSslErrors(error); + return s_instance; } void SilentNetworkAccessManager::onAuthenticationRequired(QNetworkReply *reply, diff --git a/src/core/silentnetworkaccessmanager.h b/src/core/silentnetworkaccessmanager.h index 7662afaa5..300b76c15 100644 --- a/src/core/silentnetworkaccessmanager.h +++ b/src/core/silentnetworkaccessmanager.h @@ -3,6 +3,8 @@ #include "core/basenetworkaccessmanager.h" +#include + // Network manager used for more communication for feeds. class SilentNetworkAccessManager : public BaseNetworkAccessManager { @@ -13,9 +15,15 @@ class SilentNetworkAccessManager : public BaseNetworkAccessManager { explicit SilentNetworkAccessManager(QObject *parent = 0); virtual ~SilentNetworkAccessManager(); + // Returns pointer to global network access manager + // used by ALL feed downloaders. + static SilentNetworkAccessManager *instance(); + protected slots: - void onSslErrors(QNetworkReply *reply, const QList &error); void onAuthenticationRequired(QNetworkReply * reply, QAuthenticator *authenticator); + + private: + static QPointer s_instance; }; #endif // SILENTNETWORKACCESSMANAGER_H diff --git a/src/core/webbrowsernetworkaccessmanager.cpp b/src/core/webbrowsernetworkaccessmanager.cpp index b315dd80e..cf28dfd9b 100644 --- a/src/core/webbrowsernetworkaccessmanager.cpp +++ b/src/core/webbrowsernetworkaccessmanager.cpp @@ -8,8 +8,6 @@ QPointer WebBrowserNetworkAccessManager::s_insta WebBrowserNetworkAccessManager::WebBrowserNetworkAccessManager(QObject *parent) : BaseNetworkAccessManager(parent) { - connect(this, SIGNAL(sslErrors(QNetworkReply*,QList)), - this, SLOT(onSslErrors(QNetworkReply*,QList))); connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SLOT(onAuthenticationRequired(QNetworkReply*,QAuthenticator*))); } @@ -18,16 +16,6 @@ WebBrowserNetworkAccessManager::~WebBrowserNetworkAccessManager() { qDebug("Destroying WebBrowserNetworkAccessManager instance."); } -void WebBrowserNetworkAccessManager::onSslErrors(QNetworkReply *reply, - const QList &error) { - qDebug("SSL errors for '%s': '%s' (code %d).", - qPrintable(reply->url().toString()), - qPrintable(reply->errorString()), - (int) reply->error()); - - reply->ignoreSslErrors(error); -} - void WebBrowserNetworkAccessManager::onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator) { Q_UNUSED(authenticator); diff --git a/src/core/webbrowsernetworkaccessmanager.h b/src/core/webbrowsernetworkaccessmanager.h index e765b6a77..d1b8bcf26 100644 --- a/src/core/webbrowsernetworkaccessmanager.h +++ b/src/core/webbrowsernetworkaccessmanager.h @@ -22,7 +22,6 @@ class WebBrowserNetworkAccessManager : public BaseNetworkAccessManager { static WebBrowserNetworkAccessManager *instance(); protected slots: - void onSslErrors(QNetworkReply *reply, const QList &error); void onAuthenticationRequired(QNetworkReply * reply, QAuthenticator *authenticator); private: diff --git a/src/gui/formmain.cpp b/src/gui/formmain.cpp index 52a7dc865..4725326fb 100755 --- a/src/gui/formmain.cpp +++ b/src/gui/formmain.cpp @@ -194,6 +194,8 @@ void FormMain::onAboutToQuit() { // BEFORE even trying to quit the application. bool locked_safely = SystemFactory::instance()->applicationCloseLock()->tryLock(CLOSE_LOCK_TIMEOUT); + qApp->processEvents(); + qDebug("Cleaning up resources and saving application state."); m_ui->m_tabWidget->feedMessageViewer()->quit();