LibrePCB Developers Documentation
NetworkRequestBase Class Referenceabstract

Base class for network requests which are processed in the network access manager. More...

#include <networkrequestbase.h>

+ Inheritance diagram for NetworkRequestBase:
+ Collaboration diagram for NetworkRequestBase:

Public Slots

void start () noexcept
 Start downloading the requested content. More...
 
void abort () noexcept
 Abort downloading the requested content. More...
 

Signals

void startRequested ()
 Internal signal, don't use it from outside. More...
 
void progressState (QString state)
 Reply progress / state changed signal. More...
 
void progressPercent (int percent)
 Reply content download progress signal (simple) More...
 
void progress (qint64 bytesReceived, qint64 bytesTotal, int percent)
 Reply content download progress signal (extended) More...
 
void aborted ()
 Request aborted signal (emitted right before finished()) More...
 
void succeeded ()
 Request succeeded signal (emitted right before finished()) More...
 
void errored (QString errorMsg)
 Request errored signal (emitted right before finished()) More...
 
void finished (bool success)
 Request finished signal. More...
 

Public Member Functions

 NetworkRequestBase ()=delete
 
 NetworkRequestBase (const NetworkRequestBase &other)=delete
 
 NetworkRequestBase (const QUrl &url, const QByteArray &postData=QByteArray()) noexcept
 
virtual ~NetworkRequestBase () noexcept
 
void setHeaderField (const QByteArray &name, const QByteArray &value) noexcept
 Set a HTTP header field for the network request. More...
 
void setCacheLoadControl (QNetworkRequest::CacheLoadControl value) noexcept
 Set the cache load control attribute. More...
 
void setExpectedReplyContentSize (qint64 bytes) noexcept
 Set the expected size of the requested content. More...
 
void setMinimumCacheTime (int seconds) noexcept
 Set the minimum time the request should be cached. More...
 
void useBrowserUserAgent () noexcept
 Use a typical browser user agent for this request. More...
 
NetworkRequestBaseoperator= (const NetworkRequestBase &rhs)=delete
 
virtual void prepareRequest ()=0
 
virtual void finalizeRequest ()=0
 
virtual void emitSuccessfullyFinishedSignals (QString contentType) noexcept=0
 
virtual void fetchNewData (QIODevice &device) noexcept=0
 

Protected Attributes

QUrl mUrl
 
QByteArray mPostData
 
qint64 mExpectedContentSize
 
int mMinimumCacheTime
 
QList< QUrl > mRedirectedUrls
 
QNetworkRequest mRequest
 
QScopedPointer< QNetworkReply > mReply
 
bool mStarted
 
bool mAborted
 
bool mErrored
 
bool mFinished
 

Private Member Functions

void executeRequest () noexcept
 
void uploadProgressSlot (qint64 bytesSent, qint64 bytesTotal) noexcept
 
void replyDownloadProgressSlot (qint64 bytesReceived, qint64 bytesTotal) noexcept
 
void replyReadyReadSlot () noexcept
 
void replyErrorSlot (QNetworkReply::NetworkError code) noexcept
 
void replySslErrorsSlot (const QList< QSslError > &errors) noexcept
 
void replyFinishedSlot () noexcept
 
void finalize (const QString &errorMsg, const QString &contentType=QString()) noexcept
 

Static Private Member Functions

static QString formatFileSize (qint64 bytes) noexcept
 
static QString getUserAgent () noexcept
 

Detailed Description

Base class for network requests which are processed in the network access manager.

This class lets you execute a network request without blocking the main application thread. After creating an object derived from librepcb::NetworkRequestBase, you can connect to signals of that class to track the progress of the request. Then you need to call start() to start the request processing.

Note
You need to ensure that an instance of librepcb::NetworkAccessManager exists while starting a new network request. Otherwise the request will fail. Read the documentation of librepcb::NetworkAccessManager for more information.
See also
librepcb::NetworkAccessManager

Constructor & Destructor Documentation

◆ NetworkRequestBase() [1/3]

NetworkRequestBase ( )
delete

◆ NetworkRequestBase() [2/3]

NetworkRequestBase ( const NetworkRequestBase other)
delete

◆ NetworkRequestBase() [3/3]

NetworkRequestBase ( const QUrl &  url,
const QByteArray &  postData = QByteArray() 
)
noexcept
+ Here is the call graph for this function:

◆ ~NetworkRequestBase()

~NetworkRequestBase ( )
virtualnoexcept
+ Here is the call graph for this function:

Member Function Documentation

◆ setHeaderField()

void setHeaderField ( const QByteArray &  name,
const QByteArray &  value 
)
noexcept

Set a HTTP header field for the network request.

Parameters
nameHeader field name
valueHeader field value
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setCacheLoadControl()

void setCacheLoadControl ( QNetworkRequest::CacheLoadControl  value)
noexcept

Set the cache load control attribute.

Allows to control the caching behavior, e.g. enforcing download only from cache but not from the network. For details, see documentation of QNetworkRequest::setAttribute().

Parameters
valueThe new cache control value
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setExpectedReplyContentSize()

void setExpectedReplyContentSize ( qint64  bytes)
noexcept

Set the expected size of the requested content.

If set, this size will be used to calculate the download progress in percent in case that there is no "Content-Length" attribute in the received HTTP header.

Parameters
bytesExpected content size of the reply in bytes
+ Here is the call graph for this function:

◆ setMinimumCacheTime()

void setMinimumCacheTime ( int  seconds)
noexcept

Set the minimum time the request should be cached.

This allows to cache requests longer than specified in response headers, which is useful for URLs not under our own control where rather uncritical content like images are downloaded from. If the response header specifies a higher max-age value, it has priority so this method has no effect.

Parameters
secondsMinimum cache time in seconds (default is 0)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ useBrowserUserAgent()

void useBrowserUserAgent ( )
noexcept

Use a typical browser user agent for this request.

It turned out at least st.com blocks downloading files if the request is not coming from a browser. For downloading datasheets we don't care about the user agent so let's just work arount this issue by using a well-known user agent.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ operator=()

NetworkRequestBase & operator= ( const NetworkRequestBase rhs)
delete

◆ start

void start ( )
slotnoexcept

Start downloading the requested content.

Warning
It is not save to access this object after calling this method! The object will be moved to another thread and will be deleted after an error occurs or the request succeeds. Any further access to the pointer which you have received from the constructor is unsave and could cause an application crash.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ abort

void abort ( )
slotnoexcept

Abort downloading the requested content.

Warning
Because calling this method makes only sense after calling start(), but which is unsave as described in start(), this method must only be used indirectly with the signals/slots concept of Qt (Qt automatically disconnects the callers signal from this slot as soon as this object gets destroyed, so the connection is always safe).
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ startRequested

void startRequested ( )
signal

Internal signal, don't use it from outside.

+ Here is the caller graph for this function:

◆ progressState

void progressState ( QString  state)
signal

Reply progress / state changed signal.

This signal shows which actions are executed. Or in other words, it shows the current state of the request processing.

Parameters
stateShort description about the current action/state
+ Here is the caller graph for this function:

◆ progressPercent

void progressPercent ( int  percent)
signal

Reply content download progress signal (simple)

Parameters
percent(Estimated) progress in percent (0..100)
+ Here is the caller graph for this function:

◆ progress

void progress ( qint64  bytesReceived,
qint64  bytesTotal,
int  percent 
)
signal

Reply content download progress signal (extended)

Parameters
bytesReceivedCount of bytes received
bytesTotalCount of total bytes (-1 if unknown)
percent(Estimated) progress in percent (0..100)

◆ aborted

void aborted ( )
signal

Request aborted signal (emitted right before finished())

+ Here is the caller graph for this function:

◆ succeeded

void succeeded ( )
signal

Request succeeded signal (emitted right before finished())

+ Here is the caller graph for this function:

◆ errored

void errored ( QString  errorMsg)
signal

Request errored signal (emitted right before finished())

Parameters
errorMsgAn error message
+ Here is the caller graph for this function:

◆ finished

void finished ( bool  success)
signal

Request finished signal.

This signal is emitted right after aborted(), succeeded() or errored().

Parameters
successTrue if succeeded, false if aborted or errored
+ Here is the caller graph for this function:

◆ prepareRequest()

virtual void prepareRequest ( )
pure virtual

Implemented in FileDownload, and NetworkRequest.

+ Here is the caller graph for this function:

◆ finalizeRequest()

virtual void finalizeRequest ( )
pure virtual

Implemented in FileDownload, and NetworkRequest.

+ Here is the caller graph for this function:

◆ emitSuccessfullyFinishedSignals()

virtual void emitSuccessfullyFinishedSignals ( QString  contentType)
pure virtualnoexcept

Implemented in FileDownload, and NetworkRequest.

◆ fetchNewData()

virtual void fetchNewData ( QIODevice &  device)
pure virtualnoexcept

Implemented in FileDownload, and NetworkRequest.

+ Here is the caller graph for this function:

◆ executeRequest()

void executeRequest ( )
privatenoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ uploadProgressSlot()

void uploadProgressSlot ( qint64  bytesSent,
qint64  bytesTotal 
)
privatenoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ replyDownloadProgressSlot()

void replyDownloadProgressSlot ( qint64  bytesReceived,
qint64  bytesTotal 
)
privatenoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ replyReadyReadSlot()

void replyReadyReadSlot ( )
privatenoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ replyErrorSlot()

void replyErrorSlot ( QNetworkReply::NetworkError  code)
privatenoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ replySslErrorsSlot()

void replySslErrorsSlot ( const QList< QSslError > &  errors)
privatenoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ replyFinishedSlot()

void replyFinishedSlot ( )
privatenoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ finalize()

void finalize ( const QString &  errorMsg,
const QString &  contentType = QString() 
)
privatenoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ formatFileSize()

QString formatFileSize ( qint64  bytes)
staticprivatenoexcept

◆ getUserAgent()

QString getUserAgent ( )
staticprivatenoexcept
+ Here is the call graph for this function:

Member Data Documentation

◆ mUrl

QUrl mUrl
protected

◆ mPostData

QByteArray mPostData
protected

◆ mExpectedContentSize

qint64 mExpectedContentSize
protected

◆ mMinimumCacheTime

int mMinimumCacheTime
protected

◆ mRedirectedUrls

QList<QUrl> mRedirectedUrls
protected

◆ mRequest

QNetworkRequest mRequest
protected

◆ mReply

QScopedPointer<QNetworkReply> mReply
protected

◆ mStarted

bool mStarted
protected

◆ mAborted

bool mAborted
protected

◆ mErrored

bool mErrored
protected

◆ mFinished

bool mFinished
protected

The documentation for this class was generated from the following files: