Commit 3d9cd22b authored by Claudio Valerio's avatar Claudio Valerio

checking if internet is available before trying to check for an update. This...

checking if internet is available before trying to check for an update. This resolve the shutdown after a minute error on mac os x and windows
parent f6684fc7
...@@ -49,6 +49,8 @@ ...@@ -49,6 +49,8 @@
#include "podcast/UBPodcastController.h" #include "podcast/UBPodcastController.h"
#include "network/UBNetworkAccessManager.h"
#include "ui_mainWindow.h" #include "ui_mainWindow.h"
#ifdef Q_WS_MAC #ifdef Q_WS_MAC
...@@ -70,6 +72,7 @@ UBApplicationController::UBApplicationController(UBBoardView *pControlView, UBBo ...@@ -70,6 +72,7 @@ UBApplicationController::UBApplicationController(UBBoardView *pControlView, UBBo
, mAutomaticCheckForUpdates(false) , mAutomaticCheckForUpdates(false)
, mCheckingForUpdates(false) , mCheckingForUpdates(false)
, mIsShowingDesktop(false) , mIsShowingDesktop(false)
, mHttp(0)
{ {
mDisplayManager = new UBDisplayManager(this); mDisplayManager = new UBDisplayManager(this);
...@@ -121,6 +124,7 @@ UBApplicationController::~UBApplicationController() ...@@ -121,6 +124,7 @@ UBApplicationController::~UBApplicationController()
delete mBlackScene; delete mBlackScene;
delete mMirror; delete mMirror;
if (mFtp) delete mFtp; if (mFtp) delete mFtp;
if (mHttp) delete mHttp;
} }
...@@ -499,17 +503,29 @@ void UBApplicationController::showSankoreEditor() ...@@ -499,17 +503,29 @@ void UBApplicationController::showSankoreEditor()
emit mainModeChanged(mMainMode); emit mainModeChanged(mMainMode);
} }
void UBApplicationController::runCheckUpdate(int id, bool error)
{
if(!error){
if(mFtp!=NULL)
delete mFtp;
mFtp = new QFtp(this);
connect(mFtp, SIGNAL(commandFinished(int,bool)), this, SLOT(ftpCommandFinished(int,bool)));
mFtp->connectToHost("91.121.248.138",21);
mFtp->login("anonymous", "anonymous");
mFtp->get("update.json",0);
}
}
void UBApplicationController::checkUpdate() void UBApplicationController::checkUpdate()
{ {
if (mFtp!=NULL) //TODO change this when upgrade the qt version
delete mFtp; // networkAccessible : NetworkAccessibility not yet available
mFtp = new QFtp(this); if(mHttp)
connect(mFtp, SIGNAL(commandFinished(int,bool)), this, SLOT(ftpCommandFinished(int,bool))); delete mHttp;
QUrl url("http://www.google.com");
mFtp->connectToHost("91.121.248.138",21); mHttp = new QHttp(url.host());
mFtp->login("anonymous", "anonymous"); connect(mHttp, SIGNAL(requestFinished(int,bool)), this, SLOT(runCheckUpdate(int,bool)));
mFtp->get("update.json",0); mHttp->get(url.path());
} }
void UBApplicationController::ftpCommandFinished(int id, bool error) void UBApplicationController::ftpCommandFinished(int id, bool error)
......
...@@ -30,6 +30,7 @@ class UBVersion; ...@@ -30,6 +30,7 @@ class UBVersion;
class UBSoftwareUpdate; class UBSoftwareUpdate;
class QNetworkAccessManager; class QNetworkAccessManager;
class QNetworkReply; class QNetworkReply;
class QHttp;
class UBApplicationController : public QObject class UBApplicationController : public QObject
...@@ -135,6 +136,7 @@ class UBApplicationController : public QObject ...@@ -135,6 +136,7 @@ class UBApplicationController : public QObject
private slots: private slots:
void ftpCommandFinished(int id, bool error); void ftpCommandFinished(int id, bool error);
void runCheckUpdate(int id, bool error);
protected: protected:
...@@ -171,6 +173,7 @@ class UBApplicationController : public QObject ...@@ -171,6 +173,7 @@ class UBApplicationController : public QObject
QNetworkAccessManager *networkAccessManager; QNetworkAccessManager *networkAccessManager;
void downloadJsonFinished(QString updateString); void downloadJsonFinished(QString updateString);
QHttp* mHttp;
}; };
#endif /* UBAPPLICATIONCONTROLLER_H_ */ #endif /* UBAPPLICATIONCONTROLLER_H_ */
...@@ -12,165 +12,164 @@ ...@@ -12,165 +12,164 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "UBNetworkAccessManager.h" #include "UBNetworkAccessManager.h"
#include <QtGui> #include <QtGui>
#include <QtNetwork> #include <QtNetwork>
#include "frameworks/UBDesktopServices.h" #include "frameworks/UBDesktopServices.h"
#include "core/UBApplication.h" #include "core/UBApplication.h"
#include "core/UBApplicationController.h" #include "core/UBApplicationController.h"
#include "core/UBSettings.h" #include "core/UBSettings.h"
#include "ui_passworddialog.h" #include "ui_passworddialog.h"
#include "ui_proxy.h" #include "ui_proxy.h"
#include "UBCookieJar.h" #include "UBCookieJar.h"
#include "core/memcheck.h" #include "core/memcheck.h"
UBNetworkAccessManager *UBNetworkAccessManager::sNetworkAccessManager = 0; UBNetworkAccessManager *UBNetworkAccessManager::sNetworkAccessManager = 0;
UBNetworkAccessManager *UBNetworkAccessManager::defaultAccessManager() UBNetworkAccessManager *UBNetworkAccessManager::defaultAccessManager()
{ {
if (!sNetworkAccessManager) { if (!sNetworkAccessManager) {
sNetworkAccessManager = new UBNetworkAccessManager(qApp); sNetworkAccessManager = new UBNetworkAccessManager(qApp);
sNetworkAccessManager->setCookieJar(new UBCookieJar(sNetworkAccessManager)); sNetworkAccessManager->setCookieJar(new UBCookieJar(sNetworkAccessManager));
} }
return sNetworkAccessManager; return sNetworkAccessManager;
} }
UBNetworkAccessManager::UBNetworkAccessManager(QObject *parent) UBNetworkAccessManager::UBNetworkAccessManager(QObject *parent)
: QNetworkAccessManager(parent) : QNetworkAccessManager(parent)
, mProxyAuthenticationCount(0) , mProxyAuthenticationCount(0)
{ {
connect(this, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), connect(this, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)),
SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*))); SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
connect(this, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), connect(this, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)),
SLOT(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*))); SLOT(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
connect(this, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)), connect(this, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)),
SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&))); SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&)));
QNetworkProxy* proxy = UBSettings::settings()->httpProxy(); QNetworkProxy* proxy = UBSettings::settings()->httpProxy();
if (proxy) if (proxy)
{ {
setProxy(*proxy); setProxy(*proxy);
} }
else else
{ {
QNetworkProxyFactory::setUseSystemConfiguration(true); QNetworkProxyFactory::setUseSystemConfiguration(true);
} }
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this); QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
QString location = UBSettings::uniboardDataDirectory() + "/web-cache"; QString location = UBSettings::uniboardDataDirectory() + "/web-cache";
diskCache->setCacheDirectory(location); diskCache->setCacheDirectory(location);
setCache(diskCache); setCache(diskCache);
} }
QNetworkReply* UBNetworkAccessManager::createRequest(Operation op, const QNetworkRequest & req, QIODevice * outgoingData) QNetworkReply* UBNetworkAccessManager::createRequest(Operation op, const QNetworkRequest & req, QIODevice * outgoingData)
{ {
QNetworkRequest request = req; // copy so we can modify QNetworkRequest request = req; // copy so we can modify
// this is a temporary hack until we properly use the pipelining flags from QtWebkit // this is a temporary hack until we properly use the pipelining flags from QtWebkit
// pipeline everything! :) // pipeline everything! :)
request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
QNetworkReply* reply = QNetworkAccessManager::createRequest(op, request, outgoingData); QNetworkReply* reply = QNetworkAccessManager::createRequest(op, request, outgoingData);
return reply; return reply;
} }
QNetworkReply *UBNetworkAccessManager::get(const QNetworkRequest &request) QNetworkReply *UBNetworkAccessManager::get(const QNetworkRequest &request)
{ {
qDebug() << "request url: " << request.url(); qDebug() << "request url: " << request.url();
QTime loadStartTime; QTime loadStartTime;
loadStartTime.start(); loadStartTime.start();
QNetworkReply *networkReply = QNetworkAccessManager::get(request); QNetworkReply *networkReply = QNetworkAccessManager::get(request);
return networkReply; return networkReply;
} }
void UBNetworkAccessManager::authenticationRequired(QNetworkReply *reply, QAuthenticator *auth) void UBNetworkAccessManager::authenticationRequired(QNetworkReply *reply, QAuthenticator *auth)
{ {
QWidget *mainWindow = QApplication::activeWindow(); QWidget *mainWindow = QApplication::activeWindow();
QDialog dialog(mainWindow); QDialog dialog(mainWindow);
dialog.setWindowFlags(Qt::Sheet); dialog.setWindowFlags(Qt::Sheet);
Ui::PasswordDialog passwordDialog; Ui::PasswordDialog passwordDialog;
passwordDialog.setupUi(&dialog); passwordDialog.setupUi(&dialog);
passwordDialog.iconLabel->setText(QString()); passwordDialog.iconLabel->setText(QString());
passwordDialog.iconLabel->setPixmap(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32)); passwordDialog.iconLabel->setPixmap(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32));
QString introMessage = tr("<qt>Enter username and password for \"%1\" at %2</qt>"); QString introMessage = tr("<qt>Enter username and password for \"%1\" at %2</qt>");
introMessage = introMessage.arg(Qt::escape(reply->url().toString())).arg(Qt::escape(reply->url().toString())); introMessage = introMessage.arg(Qt::escape(reply->url().toString())).arg(Qt::escape(reply->url().toString()));
passwordDialog.introLabel->setText(introMessage); passwordDialog.introLabel->setText(introMessage);
passwordDialog.introLabel->setWordWrap(true); passwordDialog.introLabel->setWordWrap(true);
if (dialog.exec() == QDialog::Accepted) if (dialog.exec() == QDialog::Accepted)
{ {
if(auth && passwordDialog.userNameLineEdit) if(auth && passwordDialog.userNameLineEdit)
auth->setUser(passwordDialog.userNameLineEdit->text()); auth->setUser(passwordDialog.userNameLineEdit->text());
if(auth && passwordDialog.passwordLineEdit) if(auth && passwordDialog.passwordLineEdit)
auth->setPassword(passwordDialog.passwordLineEdit->text()); auth->setPassword(passwordDialog.passwordLineEdit->text());
} }
} }
void UBNetworkAccessManager::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth) void UBNetworkAccessManager::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth)
{ {
Q_UNUSED(proxy); Q_UNUSED(proxy);
QString username = UBSettings::settings()->proxyUsername(); QString username = UBSettings::settings()->proxyUsername();
QString password = UBSettings::settings()->proxyPassword(); QString password = UBSettings::settings()->proxyPassword();
if (username.length() > 0 || password.length() > 0) if (username.length() > 0 || password.length() > 0)
{ {
auth->setUser(username); auth->setUser(username);
auth->setPassword(password); auth->setPassword(password);
} }
mProxyAuthenticationCount++; mProxyAuthenticationCount++;
if (mProxyAuthenticationCount == 3) if (mProxyAuthenticationCount == 3)
{ {
UBApplication::showMessage(tr("Failed to log to Proxy")); UBApplication::showMessage(tr("Failed to log to Proxy"));
disconnect(SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)) disconnect(SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*))
, this, SLOT(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*))); , this, SLOT(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
} }
return; return;
} }
void UBNetworkAccessManager::sslErrors(QNetworkReply *reply, const QList<QSslError> &error) void UBNetworkAccessManager::sslErrors(QNetworkReply *reply, const QList<QSslError> &error)
{ {
// check if SSL certificate has been trusted already // check if SSL certificate has been trusted already
QString replyHost = reply->url().host() + ":" + reply->url().port(); QString replyHost = reply->url().host() + ":" + reply->url().port();
if(!sslTrustedHostList.contains(replyHost)) if(!sslTrustedHostList.contains(replyHost))
{ {
QWidget *mainWindow = QApplication::activeWindow(); QWidget *mainWindow = QApplication::activeWindow();
QStringList errorStrings; QStringList errorStrings;
for (int i = 0; i < error.count(); ++i) for (int i = 0; i < error.count(); ++i)
errorStrings += error.at(i).errorString(); errorStrings += error.at(i).errorString();
QString errors = errorStrings.join(QLatin1String("\n")); QString errors = errorStrings.join(QLatin1String("\n"));
int ret = QMessageBox::warning(mainWindow, QCoreApplication::applicationName(), int ret = QMessageBox::warning(mainWindow, QCoreApplication::applicationName(),
tr("SSL Errors:\n\n%1\n\n%2\n\n" tr("SSL Errors:\n\n%1\n\n%2\n\n"
"Do you want to ignore these errors for this host?").arg(reply->url().toString()).arg(errors), "Do you want to ignore these errors for this host?").arg(reply->url().toString()).arg(errors),
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes | QMessageBox::No,
QMessageBox::No); QMessageBox::No);
if (ret == QMessageBox::Yes) if (ret == QMessageBox::Yes)
{ {
reply->ignoreSslErrors(); reply->ignoreSslErrors();
sslTrustedHostList.append(replyHost); sslTrustedHostList.append(replyHost);
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment