added a custom NetworkManager, which should also accept self-signed SSL-Certificates, fixes #40

this is untested due to no available ssl-tinyrss-instance at home
This commit is contained in:
Hauke Schade 2013-02-18 18:04:28 +01:00
parent b78ce66116
commit bf831819da
6 changed files with 67 additions and 2 deletions

View file

@ -5,6 +5,7 @@
#include "qmlapplicationviewer.h"
#include "settings.hh"
#include "mynetworkmanager.hh"
Q_DECL_EXPORT int main(int argc, char *argv[])
{
@ -28,6 +29,9 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
app->installTranslator(&translator);
QmlApplicationViewer viewer;
//QObject::connect(viewer.engine(), SIGNAL(quit()), viewer.data, SLOT(close()));
viewer.setNetworkAccessManagerFactory(new MyNetworkManager);
viewer.rootContext()->setContextProperty("APP_VERSION", APP_VERSION);

34
mynetworkmanager.cpp Normal file
View file

@ -0,0 +1,34 @@
#include "mynetworkmanager.hh"
QNetworkAccessManager* MyNetworkManager::create(QObject *parent) {
QNetworkAccessManager *nam = new QNetworkAccessManager(parent);
connect(nam, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(onSslErrors(QNetworkReply*,QList<QSslError>)));
// connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(onReplyFinished(QNetworkReply*)));
qDebug("new custom mynetworkManager :)");
return nam;
}
void MyNetworkManager::onSslErrors(QNetworkReply *reply, const QList<QSslError> &errors) {
qDebug("onSslErrors");
reply->ignoreSslErrors(errors);
}
//void MyNetworkManager::onReplyFinished(QNetworkReply *reply) {
// Q_ASSERT(reply);
// if (!reply)
// return;
// if (reply->error() == QNetworkReply::NoError) {
// return;
// }
// const int httpStatusCode = reply->attribute(
// QNetworkRequest::HttpStatusCodeAttribute).toInt();
// qDebug(QString("Network error = %1, HTTP code = %2, error description = '%3'")
// .arg(reply->error())
// .arg(httpStatusCode)
// .arg(reply->errorString())
// .toAscii());
//}

19
mynetworkmanager.hh Normal file
View file

@ -0,0 +1,19 @@
#ifndef MYNETWORKMANAGER_HH
#define MYNETWORKMANAGER_HH
#include <qdeclarativenetworkaccessmanagerfactory.h>
#include <QtNetwork/qnetworkreply.h>
class MyNetworkManager : public QObject, public QDeclarativeNetworkAccessManagerFactory
{
Q_OBJECT
public: // QDeclarativeNetworkAccessManagerFactory
QNetworkAccessManager *create(QObject *parent);
private slots:
void onSslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
// void onReplyFinished(QNetworkReply *reply);
};
#endif // MYNETWORKMANAGER_HH

View file

@ -153,6 +153,10 @@ void QmlApplicationViewer::setOrientation(ScreenOrientation orientation)
setAttribute(attribute, true);
}
void QmlApplicationViewer::setNetworkAccessManagerFactory(QDeclarativeNetworkAccessManagerFactory *networkfactory) {
engine()->setNetworkAccessManagerFactory(networkfactory);
}
void QmlApplicationViewer::showExpanded()
{
#if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR)

View file

@ -12,6 +12,7 @@
#define QMLAPPLICATIONVIEWER_H
#include <QtDeclarative/QDeclarativeView>
#include <qdeclarativenetworkaccessmanagerfactory.h>
class QmlApplicationViewer : public QDeclarativeView
{
@ -31,6 +32,7 @@ public:
void setMainQmlFile(const QString &file);
void addImportPath(const QString &path);
void setNetworkAccessManagerFactory(QDeclarativeNetworkAccessManagerFactory *networkfactory);
// Note that this will only have an effect on Symbian and Fremantle.
void setOrientation(ScreenOrientation orientation);

View file

@ -34,7 +34,8 @@ CONFIG += qdeclarative-boostable
# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp \
settings.cpp
settings.cpp \
mynetworkmanager.cpp
# Please do not modify the following two lines. Required for deployment.
include(qmlapplicationviewer/qmlapplicationviewer.pri)
@ -44,4 +45,5 @@ RESOURCES += \
harmattan.qrc
HEADERS += \
settings.hh
settings.hh \
mynetworkmanager.hh