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