[tracking] Fix install-tracking HTTP GET

This commit is contained in:
Adriaan de Groot 2017-11-13 05:13:19 -05:00
parent 9a43b8a0e8
commit f4368d05f9
2 changed files with 18 additions and 14 deletions

View File

@ -20,21 +20,20 @@
#include "utils/Logger.h" #include "utils/Logger.h"
#include <QEventLoop>
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
#include <QNetworkReply> #include <QNetworkReply>
#include <QSemaphore> #include <QSemaphore>
#include <QTimer>
TrackingInstallJob::TrackingInstallJob( const QString& url ) TrackingInstallJob::TrackingInstallJob( const QString& url )
: m_url( url ) : m_url( url )
, m_networkManager( nullptr ) , m_networkManager( nullptr )
, m_semaphore( new QSemaphore( 1 ) )
{ {
} }
TrackingInstallJob::~TrackingInstallJob() TrackingInstallJob::~TrackingInstallJob()
{ {
Q_ASSERT( m_semaphore->available() == 1 );
delete m_semaphore;
delete m_networkManager; delete m_networkManager;
} }
@ -65,30 +64,36 @@ Calamares::JobResult TrackingInstallJob::exec()
// sourceforge.net), so let's set a more descriptive one. // sourceforge.net), so let's set a more descriptive one.
request.setRawHeader( "User-Agent", "Mozilla/5.0 (compatible; Calamares)" ); request.setRawHeader( "User-Agent", "Mozilla/5.0 (compatible; Calamares)" );
QTimer timeout;
timeout.setSingleShot(true);
QEventLoop loop;
connect( m_networkManager, &QNetworkAccessManager::finished, connect( m_networkManager, &QNetworkAccessManager::finished,
this, &TrackingInstallJob::dataIsHere ); this, &TrackingInstallJob::dataIsHere );
connect( m_networkManager, &QNetworkAccessManager::finished,
&loop, &QEventLoop::quit );
connect( &timeout, &QTimer::timeout,
&loop, &QEventLoop::quit );
if ( !m_semaphore->tryAcquire( 1, 500 /* ms */ ) )
{
// Something's wrong ..
cDebug() << "WARNING: could not set up semaphore for install-tracking.";
return Calamares::JobResult::error( tr( "Internal error in install-tracking." ),
tr( "Could not get semaphore for install-tracking." ) );
}
m_networkManager->get( request ); // The semaphore is released when data is received m_networkManager->get( request ); // The semaphore is released when data is received
if ( !m_semaphore->tryAcquire( 1, 5000 /* ms */ ) ) timeout.start( 5000 /* ms */ );
loop.exec();
if ( !timeout.isActive() )
{ {
cDebug() << "WARNING: install-tracking request timed out."; cDebug() << "WARNING: install-tracking request timed out.";
return Calamares::JobResult::error( tr( "Internal error in install-tracking." ), return Calamares::JobResult::error( tr( "Internal error in install-tracking." ),
tr( "HTTP request timed out." ) ); tr( "HTTP request timed out." ) );
} }
timeout.stop();
return Calamares::JobResult::ok(); return Calamares::JobResult::ok();
} }
void TrackingInstallJob::dataIsHere( QNetworkReply* reply ) void TrackingInstallJob::dataIsHere( QNetworkReply* reply )
{ {
if ( m_semaphore ) cDebug() << "Install-tracking request OK";
m_semaphore->release( 1 );
reply->deleteLater(); reply->deleteLater();
} }

View File

@ -44,7 +44,6 @@ private:
const QString m_url; const QString m_url;
QNetworkAccessManager* m_networkManager; QNetworkAccessManager* m_networkManager;
QSemaphore* m_semaphore;
}; };
#endif #endif