#ifndef DOWNLOADER_H #define DOWNLOADER_H #include "CoreGlobal.h" #include "Response.h" #include #include #include #include #include #include /** * @brief The Downloader handles all data donwloads in SciQLOP. * * Simple synchronous GET example: * @code{.cpp} * auto response = Downloader::get("http://example.com") * std::cout << "Status code: " << response.status_code() << std::endl << "Data: " << response.data().toStdString() << std::endl; * @endcode * * @note * This is a quick and KISS implementation using QNetworkAccessManager isolating from Qt stuff (Signal/slots). * This could be impemented with a different backend in the future. * * @sa Response */ class SCIQLOP_CORE_EXPORT Downloader{ public: /** * @brief does a synchronous GET request on the given url * @param url * @param user * @param passwd * @return Response object containing request data and http status code * @sa Downloader::getAsync */ static Response get(const QString& url, const QString& user="", const QString& passwd=""); /** * @brief does an asynchronous GET request on the given url * @param url * @param callback * @param user * @param passwd * @return QUuid an unique identifier associated to this request * @sa Downloader::get, Downloader::downloadFinished */ static QUuid getAsync(const QString& url, std::function callback, const QString& user="", const QString& passwd=""); /** * @brief downloadFinished * @param uuid * @return true if the request associated to this uuid is complete */ static bool downloadFinished(QUuid uuid); static Downloader& instance() { static Downloader inst; return inst; } private: class p_Downloader; explicit Downloader(); spimpl::unique_impl_ptr impl; }; #endif // DOWNLOADER_H