[libcalamares] Refactor synchronous get
- Add timeout support - Refactor into a static helper method
This commit is contained in:
parent
1f2b3b734d
commit
85f0d38698
@ -22,6 +22,7 @@
|
|||||||
#include <QNetworkAccessManager>
|
#include <QNetworkAccessManager>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
namespace CalamaresUtils
|
namespace CalamaresUtils
|
||||||
{
|
{
|
||||||
@ -98,6 +99,28 @@ Manager::setCheckHasInternetUrl( const QUrl& url )
|
|||||||
d->m_hasInternetUrl = url;
|
d->m_hasInternetUrl = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QNetworkReply*
|
||||||
|
synchronousRun( const std::unique_ptr< QNetworkAccessManager >& nam, const QUrl& url, const RequestOptions& options )
|
||||||
|
{
|
||||||
|
QNetworkRequest request = QNetworkRequest( url );
|
||||||
|
QNetworkReply* reply = nam->get( request );
|
||||||
|
QEventLoop loop;
|
||||||
|
QTimer timer;
|
||||||
|
|
||||||
|
options.applyToRequest( &request );
|
||||||
|
if ( options.hasTimeout() )
|
||||||
|
{
|
||||||
|
timer.setSingleShot( true );
|
||||||
|
QObject::connect( &timer, &QTimer::timeout, &loop, &QEventLoop::quit );
|
||||||
|
timer.start( options.timeout() );
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject::connect( reply, &QNetworkReply::finished, &loop, &QEventLoop::quit );
|
||||||
|
loop.exec();
|
||||||
|
reply->deleteLater();
|
||||||
|
return reply;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Manager::synchronousPing( const QUrl& url, const RequestOptions& options )
|
Manager::synchronousPing( const QUrl& url, const RequestOptions& options )
|
||||||
{
|
{
|
||||||
@ -106,13 +129,7 @@ Manager::synchronousPing( const QUrl& url, const RequestOptions& options )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkRequest request = QNetworkRequest( url );
|
auto reply = synchronousRun( d->m_nam, url, options );
|
||||||
QNetworkReply* reply = d->m_nam->get( request );
|
|
||||||
QEventLoop loop;
|
|
||||||
options.applyToRequest( &request );
|
|
||||||
connect( reply, &QNetworkReply::finished, &loop, &QEventLoop::quit );
|
|
||||||
loop.exec();
|
|
||||||
reply->deleteLater();
|
|
||||||
return reply->bytesAvailable();
|
return reply->bytesAvailable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,13 +141,7 @@ Manager::synchronousGet( const QUrl& url, const RequestOptions& options )
|
|||||||
return QByteArray();
|
return QByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkRequest request( url );
|
auto reply = synchronousRun( d->m_nam, url, options );
|
||||||
QNetworkReply* reply = d->m_nam->get( request );
|
|
||||||
QEventLoop loop;
|
|
||||||
options.applyToRequest( &request );
|
|
||||||
connect( reply, &QNetworkReply::finished, &loop, &QEventLoop::quit );
|
|
||||||
loop.exec();
|
|
||||||
reply->deleteLater();
|
|
||||||
return reply->readAll();
|
return reply->readAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,6 +37,8 @@ namespace Network
|
|||||||
class DLLEXPORT RequestOptions
|
class DLLEXPORT RequestOptions
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
using milliseconds = std::chrono::milliseconds;
|
||||||
|
|
||||||
enum Flag
|
enum Flag
|
||||||
{
|
{
|
||||||
FollowRedirect = 0x1,
|
FollowRedirect = 0x1,
|
||||||
@ -50,7 +52,7 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
RequestOptions( Flags f, std::chrono::milliseconds timeout = std::chrono::milliseconds( -1 ) )
|
RequestOptions( Flags f, milliseconds timeout = milliseconds( -1 ) )
|
||||||
: m_flags( f )
|
: m_flags( f )
|
||||||
, m_timeout( timeout )
|
, m_timeout( timeout )
|
||||||
{
|
{
|
||||||
@ -58,9 +60,12 @@ public:
|
|||||||
|
|
||||||
void applyToRequest( QNetworkRequest* ) const;
|
void applyToRequest( QNetworkRequest* ) const;
|
||||||
|
|
||||||
|
bool hasTimeout() const { return m_timeout > milliseconds( 0 ); }
|
||||||
|
auto timeout() const { return m_timeout; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Flags m_flags;
|
Flags m_flags;
|
||||||
std::chrono::milliseconds m_timeout;
|
milliseconds m_timeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_OPERATORS_FOR_FLAGS( RequestOptions::Flags );
|
Q_DECLARE_OPERATORS_FOR_FLAGS( RequestOptions::Flags );
|
||||||
|
Loading…
Reference in New Issue
Block a user