bool Image::loadFromFile(String fileName) { complete = false; std::vector<uint8_t>* bytes; static String b64("data:image/png;base64,"); if (fileName.size() > b64.size() && String(fileName.begin(), fileName.begin() + b64.size()) == b64) { // Read image from Base64 encoded URL bytes = fromBase64(fileName.c_str() + b64.size()); complete = loadFromBuffer(bytes->data(), bytes->size()); delete bytes; __BGRA = false; } else { CocoAssetFile* file = CocoAssetFile::open(fileName); if (file) { complete = loadFromBuffer(file->getData(), file->bytesLength()); delete file; } } if (complete) src = fileName; return complete; }
void XMLHttpRequest::open(String method, String url, bool async) { status = UNSENT; statusText = ""; responseType = ""; responseText = ""; response = nullptr; dataAvailable = false; this->async = async; if(url.at(0)=='.') { // Hack for reading local files CocoAssetFile* file = CocoAssetFile::open(url.c_str()); if(file) { response = new ArrayBuffer(file->getData(), file->bytesLength()); // Set response flags status = 200; statusText = "OK"; dataAvailable = true; responseType = "arraybuffer"; responseURL = String("file:///") + file->fileName; responseText = String( (const char*) file->getData()); readyState=DONE; delete file; } } else { // Start a libcurl easy session curl = curl_easy_init(); // Store "this" as a private pointer to curl curl_easy_setopt(curl, CURLOPT_PRIVATE, static_cast<void*>(this)); // Set http method std::transform(method.begin(), method.end(), method.begin(), ::toupper); if(method=="GET") curl_easy_setopt(curl, CURLOPT_HTTPGET, 1); else if(method=="POST") curl_easy_setopt(curl, CURLOPT_HTTPPOST, 1); // Set url curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // skip all signal handling curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); // follow HTTP 3xx redirects curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); // set user agent curl_easy_setopt(curl, CURLOPT_USERAGENT, APPNAME); // set callback for writing received data curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, static_cast<void*>(&responseDataBuffer)); // set callback for writing received header data curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, curl_callback); curl_easy_setopt(curl, CURLOPT_WRITEHEADER, static_cast<void*>(&responseHeadersBuffer)); responseURL = url; readyState = OPENED; } }