2021-01-18 15:20:06 +03:00
|
|
|
// Copyright (c) 2019-2021 Alexander Medvednikov. All rights reserved.
|
2019-06-23 05:21:30 +03:00
|
|
|
// Use of this source code is governed by an MIT license
|
|
|
|
// that can be found in the LICENSE file.
|
2019-06-22 21:20:28 +03:00
|
|
|
module http
|
|
|
|
|
2020-05-16 17:12:23 +03:00
|
|
|
type DownloadFn = fn (written int)
|
|
|
|
|
2019-11-27 09:01:25 +03:00
|
|
|
/*
|
2019-06-22 21:20:28 +03:00
|
|
|
struct DownloadStruct {
|
2019-11-27 09:01:25 +03:00
|
|
|
mut:
|
2019-06-22 21:20:28 +03:00
|
|
|
stream voidptr
|
|
|
|
written int
|
2020-05-16 17:12:23 +03:00
|
|
|
cb DownloadFn
|
2019-06-22 21:20:28 +03:00
|
|
|
}
|
2019-11-27 09:01:25 +03:00
|
|
|
*/
|
2020-10-15 16:17:52 +03:00
|
|
|
fn download_cb(ptr voidptr, size size_t, nmemb size_t, userp voidptr) {
|
2019-12-22 01:41:42 +03:00
|
|
|
/*
|
2019-06-24 00:02:11 +03:00
|
|
|
mut data := &DownloadStruct(userp)
|
2019-11-27 09:01:25 +03:00
|
|
|
written := C.fwrite(ptr, size, nmemb, data.stream)
|
|
|
|
data.written += written
|
|
|
|
data.cb(data.written)
|
|
|
|
//#data->cb(data->written); // TODO
|
|
|
|
return written
|
2021-06-14 10:08:41 +03:00
|
|
|
*/
|
2019-06-22 21:20:28 +03:00
|
|
|
}
|
|
|
|
|
2021-06-14 10:08:41 +03:00
|
|
|
pub fn download_file_with_progress(url string, out string, cb DownloadFn, cb_finished fn ()) {
|
2019-12-22 01:41:42 +03:00
|
|
|
/*
|
2019-06-22 21:20:28 +03:00
|
|
|
curl := C.curl_easy_init()
|
|
|
|
if isnil(curl) {
|
|
|
|
return
|
|
|
|
}
|
2019-11-27 09:01:25 +03:00
|
|
|
cout := out.str
|
|
|
|
fp := C.fopen(cout, 'wb')
|
|
|
|
C.curl_easy_setopt(curl, CURLOPT_URL, url.str)
|
2019-06-22 21:20:28 +03:00
|
|
|
C.curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, download_cb)
|
|
|
|
data := &DownloadStruct {
|
2019-06-24 00:02:11 +03:00
|
|
|
stream:fp
|
2019-06-22 21:20:28 +03:00
|
|
|
cb: cb
|
|
|
|
}
|
2019-11-27 09:01:25 +03:00
|
|
|
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()
|
2021-06-14 10:08:41 +03:00
|
|
|
*/
|
2019-06-22 21:20:28 +03:00
|
|
|
}
|
|
|
|
|
2019-06-24 00:02:11 +03:00
|
|
|
fn empty() {
|
2019-11-27 09:01:25 +03:00
|
|
|
}
|