This commit is contained in:
Martin Rotter 2014-02-25 06:42:58 +01:00
parent b66a6d4143
commit 9e75252f29
8 changed files with 52 additions and 23 deletions

View file

@ -4,11 +4,15 @@
#include "core/settings.h" #include "core/settings.h"
#include <QNetworkProxy> #include <QNetworkProxy>
#include <QNetworkReply>
#include <QNetworkRequest> #include <QNetworkRequest>
BaseNetworkAccessManager::BaseNetworkAccessManager(QObject *parent) BaseNetworkAccessManager::BaseNetworkAccessManager(QObject *parent)
: QNetworkAccessManager(parent) { : QNetworkAccessManager(parent) {
connect(this, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
this, SLOT(onSslErrors(QNetworkReply*,QList<QSslError>)));
loadSettings(); loadSettings();
} }
@ -48,6 +52,16 @@ void BaseNetworkAccessManager::loadSettings() {
qDebug("Settings of BaseNetworkAccessManager loaded."); qDebug("Settings of BaseNetworkAccessManager loaded.");
} }
void BaseNetworkAccessManager::onSslErrors(QNetworkReply *reply,
const QList<QSslError> &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, QNetworkReply *BaseNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op,
const QNetworkRequest &request, const QNetworkRequest &request,
QIODevice *outgoingData) { QIODevice *outgoingData) {

View file

@ -18,6 +18,10 @@ class BaseNetworkAccessManager : public QNetworkAccessManager {
// NOTE: This sets up proxy settings. // NOTE: This sets up proxy settings.
virtual void loadSettings(); virtual void loadSettings();
protected slots:
void onSslErrors(QNetworkReply *reply,
const QList<QSslError> &error);
protected: protected:
// Creates custom request. // Creates custom request.
QNetworkReply *createRequest(Operation op, QNetworkReply *createRequest(Operation op,

View file

@ -95,7 +95,22 @@ QNetworkReply::NetworkError NetworkFactory::downloadFeedFile(const QString &url,
// process of downloading of a file easier to understand. // process of downloading of a file easier to understand.
// Make necessary variables. // 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 *manager = SilentNetworkAccessManager::instance();
QEventLoop loop; QEventLoop loop;
QTimer timer; QTimer timer;
QNetworkRequest request; QNetworkRequest request;

View file

@ -4,12 +4,13 @@
#include <QNetworkReply> #include <QNetworkReply>
#include <QAuthenticator> #include <QAuthenticator>
#include <QApplication>
QPointer<SilentNetworkAccessManager> SilentNetworkAccessManager::s_instance;
SilentNetworkAccessManager::SilentNetworkAccessManager(QObject *parent) SilentNetworkAccessManager::SilentNetworkAccessManager(QObject *parent)
: BaseNetworkAccessManager(parent) { : BaseNetworkAccessManager(parent) {
connect(this, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
this, SLOT(onSslErrors(QNetworkReply*,QList<QSslError>)));
connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
this, SLOT(onAuthenticationRequired(QNetworkReply*,QAuthenticator*))); this, SLOT(onAuthenticationRequired(QNetworkReply*,QAuthenticator*)));
} }
@ -18,14 +19,12 @@ SilentNetworkAccessManager::~SilentNetworkAccessManager() {
qDebug("Destroying SilentNetworkAccessManages instance."); qDebug("Destroying SilentNetworkAccessManages instance.");
} }
void SilentNetworkAccessManager::onSslErrors(QNetworkReply *reply, SilentNetworkAccessManager *SilentNetworkAccessManager::instance() {
const QList<QSslError> &error) { if (s_instance.isNull()) {
qDebug("SSL errors for '%s': '%s' (code %d).", s_instance = new SilentNetworkAccessManager(qApp);
qPrintable(reply->url().toString()), }
qPrintable(reply->errorString()),
(int) reply->error());
reply->ignoreSslErrors(error); return s_instance;
} }
void SilentNetworkAccessManager::onAuthenticationRequired(QNetworkReply *reply, void SilentNetworkAccessManager::onAuthenticationRequired(QNetworkReply *reply,

View file

@ -3,6 +3,8 @@
#include "core/basenetworkaccessmanager.h" #include "core/basenetworkaccessmanager.h"
#include <QPointer>
// Network manager used for more communication for feeds. // Network manager used for more communication for feeds.
class SilentNetworkAccessManager : public BaseNetworkAccessManager { class SilentNetworkAccessManager : public BaseNetworkAccessManager {
@ -13,9 +15,15 @@ class SilentNetworkAccessManager : public BaseNetworkAccessManager {
explicit SilentNetworkAccessManager(QObject *parent = 0); explicit SilentNetworkAccessManager(QObject *parent = 0);
virtual ~SilentNetworkAccessManager(); virtual ~SilentNetworkAccessManager();
// Returns pointer to global network access manager
// used by ALL feed downloaders.
static SilentNetworkAccessManager *instance();
protected slots: protected slots:
void onSslErrors(QNetworkReply *reply, const QList<QSslError> &error);
void onAuthenticationRequired(QNetworkReply * reply, QAuthenticator *authenticator); void onAuthenticationRequired(QNetworkReply * reply, QAuthenticator *authenticator);
private:
static QPointer<SilentNetworkAccessManager> s_instance;
}; };
#endif // SILENTNETWORKACCESSMANAGER_H #endif // SILENTNETWORKACCESSMANAGER_H

View file

@ -8,8 +8,6 @@ QPointer<WebBrowserNetworkAccessManager> WebBrowserNetworkAccessManager::s_insta
WebBrowserNetworkAccessManager::WebBrowserNetworkAccessManager(QObject *parent) WebBrowserNetworkAccessManager::WebBrowserNetworkAccessManager(QObject *parent)
: BaseNetworkAccessManager(parent) { : BaseNetworkAccessManager(parent) {
connect(this, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
this, SLOT(onSslErrors(QNetworkReply*,QList<QSslError>)));
connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
this, SLOT(onAuthenticationRequired(QNetworkReply*,QAuthenticator*))); this, SLOT(onAuthenticationRequired(QNetworkReply*,QAuthenticator*)));
} }
@ -18,16 +16,6 @@ WebBrowserNetworkAccessManager::~WebBrowserNetworkAccessManager() {
qDebug("Destroying WebBrowserNetworkAccessManager instance."); qDebug("Destroying WebBrowserNetworkAccessManager instance.");
} }
void WebBrowserNetworkAccessManager::onSslErrors(QNetworkReply *reply,
const QList<QSslError> &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, void WebBrowserNetworkAccessManager::onAuthenticationRequired(QNetworkReply *reply,
QAuthenticator *authenticator) { QAuthenticator *authenticator) {
Q_UNUSED(authenticator); Q_UNUSED(authenticator);

View file

@ -22,7 +22,6 @@ class WebBrowserNetworkAccessManager : public BaseNetworkAccessManager {
static WebBrowserNetworkAccessManager *instance(); static WebBrowserNetworkAccessManager *instance();
protected slots: protected slots:
void onSslErrors(QNetworkReply *reply, const QList<QSslError> &error);
void onAuthenticationRequired(QNetworkReply * reply, QAuthenticator *authenticator); void onAuthenticationRequired(QNetworkReply * reply, QAuthenticator *authenticator);
private: private:

View file

@ -194,6 +194,8 @@ void FormMain::onAboutToQuit() {
// BEFORE even trying to quit the application. // BEFORE even trying to quit the application.
bool locked_safely = SystemFactory::instance()->applicationCloseLock()->tryLock(CLOSE_LOCK_TIMEOUT); bool locked_safely = SystemFactory::instance()->applicationCloseLock()->tryLock(CLOSE_LOCK_TIMEOUT);
qApp->processEvents();
qDebug("Cleaning up resources and saving application state."); qDebug("Cleaning up resources and saving application state.");
m_ui->m_tabWidget->feedMessageViewer()->quit(); m_ui->m_tabWidget->feedMessageViewer()->quit();