diff --git a/http/download_lin.v b/http/download_lin.v deleted file mode 100644 index 0707ed498e..0000000000 --- a/http/download_lin.v +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2019 Alexander Medvednikov. All rights reserved. -// Use of this source code is governed by an MIT license -// that can be found in the LICENSE file. - -module http - -import os - -type downloadfn fn (written int) - -struct DownloadStruct { - stream voidptr - written int - cb downloadfn -} - -fn download_cb(ptr voidptr, size, nmemb size_t, userp voidptr) int { - data := &DownloadStruct(userp) - # size_t written = fwrite(ptr, size, nmemb, (FILE*)(data->stream)); - # data->written += written; - if !isnil(data.cb) { - # data->cb(data->written); - } - # return written; - return 0 -} - -fn download_file_with_progress(url, out string, cb, cb_finished voidptr) { - curl := C.curl_easy_init() - if isnil(curl) { - return - } - # FILE* fp = fopen(out.str,"wb"); - # curl_easy_setopt(curl, CURLOPT_URL, url.str); - C.curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, download_cb) - data := &DownloadStruct { - // stream:fp - cb: cb - } - # data->stream = fp; - # curl_easy_setopt(curl, CURLOPT_WRITEDATA, data); - # double d = 0; - # curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d); - # CURLcode res = curl_easy_perform(curl); - # curl_easy_cleanup(curl); - # fclose(fp); - # void (*finished)() =cb_finished; finished(); -} - -fn download_file(url, out string) { -} - diff --git a/http/download_mac.v b/http/download_mac.v index 57bb976fe5..d967b941a5 100644 --- a/http/download_mac.v +++ b/http/download_mac.v @@ -6,63 +6,51 @@ module http import os -struct LUEL { - age int -} - type downloadfn fn (written int) +type download_finished_fn fn () struct DownloadStruct { +mut: stream voidptr written int cb downloadfn } fn download_cb(ptr voidptr, size, nmemb size_t, userp voidptr) int { - // # struct http__MemoryStruct *mem = (struct http__MemoryStruct *)userp; - data := &DownloadStruct(userp) - # size_t written = fwrite(ptr, size, nmemb, (FILE*)(data->stream)); - // # printf("!!!%d\n", written); - # data->written += written; - if !isnil(data.cb) { - # data->cb(data->written); - } - # return written; - return 0 + mut data := &DownloadStruct(userp) + written := C.fwrite(ptr, size, nmemb, data.stream) + data.written += written + #data->cb(data->written); // TODO + return written } -fn download_file_with_progress(url, out string, cb, cb_finished voidptr) { - /* +fn download_file_with_progress(url, out string, cb, cb_finished download_finished_fn) { curl := C.curl_easy_init() if isnil(curl) { return } - # FILE* fp = fopen(out.str,"wb"); - # curl_easy_setopt(curl, CURLOPT_URL, url.str); + cout := out.cstr() + fp := C.fopen(cout, 'wb') + C.curl_easy_setopt(curl, CURLOPT_URL, url.cstr()) C.curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, download_cb) - // # curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, http__download_cb); data := &DownloadStruct { - // stream:fp + stream:fp cb: cb } - # data->stream = fp; - # curl_easy_setopt(curl, CURLOPT_WRITEDATA, data); - # double d = 0; - # curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d); - # CURLcode res = curl_easy_perform(curl); - println('DONE!') - # curl_easy_cleanup(curl); - # fclose(fp); - # void (*finished)() =cb_finished; finished(); -*/ + C.curl_easy_setopt(curl, CURLOPT_WRITEDATA, data) + mut d := 0.0 + C.curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d) + C.curl_easy_perform(curl) + C.curl_easy_cleanup(curl) + C.fclose(fp) + #cb_finished(); // TODO } fn download_file(url, out string) { - // println('\nDOWNLOAD FILE $out url=$url') - // -L follow redirects - // println('curl -L -o "$out" "$url"') - os.system2('curl -s -L -o "$out" "$url"') - // res := os.system('curl -s -L -o "$out" "$url"') - // println(res) + download_file_with_progress(url, out, empty, empty) } +fn empty() { + +} + diff --git a/http/http_mac.v b/http/http_mac.v index a80b0427b2..5cdf19e925 100644 --- a/http/http_mac.v +++ b/http/http_mac.v @@ -37,6 +37,7 @@ import const ( CURLOPT_POSTFIELDS CURLOPT_CUSTOMREQUEST CURLOPT_TCP_KEEPALIVE + CURLINFO_CONTENT_LENGTH_DOWNLOAD CURLE_OK )