1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#ifndef QEVERCLOUD_HTTP_H
#define QEVERCLOUD_HTTP_H
#include <QString>
#include <QByteArray>
#include <QtEndian>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QTimer>
#include <QSharedPointer>
#include <QTypeInfo>
#include <QSslError>
/** @cond HIDDEN_SYMBOLS */
namespace qevercloud {
QNetworkAccessManager* evernoteNetworkAccessManager();
// the class greatly simplifies QNetworkReply handling
class ReplyFetcher: public QObject {
Q_OBJECT
public:
ReplyFetcher();
void start(QNetworkAccessManager* nam, QUrl url);
// if !postData.isNull() then POST will be issued instead of GET
void start(QNetworkAccessManager* nam, QNetworkRequest request, QByteArray postData = QByteArray());
bool isError() {return !success_;}
QString errorText() {return errorText_;}
QByteArray receivedData() {return receivedData_;}
int httpStatusCode() {return httpStatusCode_;}
signals:
void replyFetched(QObject*); // sends itself
private slots:
void onFinished();
void onError();
void onSslErrors(QList<QSslError> l);
void onDownloadProgress(qint64, qint64);
void checkForTimeout();
private:
QSharedPointer<QNetworkReply> reply;
bool success_;
QString errorText_;
QByteArray receivedData_;
int httpStatusCode_;
void setError(QString errorText);
QTimer* ticker_;
qint64 lastNetworkTime_;
};
QNetworkRequest createEvernoteRequest(QString url);
QByteArray askEvernote(QString url, QByteArray postData);
}
/** @endcond */
#endif // QEVERCLOUD_HTTP_H
|