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 <QNetworkProxy>
#include <QNetworkReply>
#include <QNetworkRequest>
BaseNetworkAccessManager::BaseNetworkAccessManager(QObject *parent)
: QNetworkAccessManager(parent) {
connect(this, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
this, SLOT(onSslErrors(QNetworkReply*,QList<QSslError>)));
loadSettings();
}
@ -48,6 +52,16 @@ void BaseNetworkAccessManager::loadSettings() {
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,
const QNetworkRequest &request,
QIODevice *outgoingData) {

View file

@ -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<QSslError> &error);
protected:
// Creates custom request.
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.
// 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;

View file

@ -4,12 +4,13 @@
#include <QNetworkReply>
#include <QAuthenticator>
#include <QApplication>
QPointer<SilentNetworkAccessManager> SilentNetworkAccessManager::s_instance;
SilentNetworkAccessManager::SilentNetworkAccessManager(QObject *parent)
: BaseNetworkAccessManager(parent) {
connect(this, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
this, SLOT(onSslErrors(QNetworkReply*,QList<QSslError>)));
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<QSslError> &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,

View file

@ -3,6 +3,8 @@
#include "core/basenetworkaccessmanager.h"
#include <QPointer>
// 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<QSslError> &error);
void onAuthenticationRequired(QNetworkReply * reply, QAuthenticator *authenticator);
private:
static QPointer<SilentNetworkAccessManager> s_instance;
};
#endif // SILENTNETWORKACCESSMANAGER_H

View file

@ -8,8 +8,6 @@ QPointer<WebBrowserNetworkAccessManager> WebBrowserNetworkAccessManager::s_insta
WebBrowserNetworkAccessManager::WebBrowserNetworkAccessManager(QObject *parent)
: BaseNetworkAccessManager(parent) {
connect(this, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
this, SLOT(onSslErrors(QNetworkReply*,QList<QSslError>)));
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<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,
QAuthenticator *authenticator) {
Q_UNUSED(authenticator);

View file

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

View file

@ -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();