#pragma once #ifndef __EMSCRIPTEN__ #include #include #include #include #include #include class FileDownloader { public: struct DownloadData { enum class Status { IN_PROGRESS = 0, SUCCESS, FAILURE }; std::string str; std::atomic status; }; static void init(); static std::shared_ptr download_data_from_url(std::string_view url); static void cleanup(); private: static void add_new_handlers_to_multi(); static void download_thread_update(); struct DownloadHandler { CURL* eHandle; std::shared_ptr data; }; static std::mutex newDownloadsMutex; static std::vector newDownloads; static std::atomic shutdownThread; static CURLM* mHandle; static std::vector currentDownloads; static std::unique_ptr downloadThread; static void save_to_string(CURL* curl, std::string* str); static void disable_ssl_verification(CURL* curl); static timeval get_timeout(CURLM* mCurl); static int wait_if_needed(CURLM* mCurl, timeval& timeout); static size_t write_to_string(void* contents, size_t size, size_t nmemb, void* userp); }; #endif