2019-06-23 05:21:30 +03:00
|
|
|
// 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.
|
|
|
|
|
2019-06-22 21:20:28 +03:00
|
|
|
module http
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
type downloadfn fn (written int)
|
2019-06-24 00:02:11 +03:00
|
|
|
type download_finished_fn fn ()
|
2019-06-22 21:20:28 +03:00
|
|
|
|
2019-08-06 06:54:47 +03:00
|
|
|
/*
|
2019-06-22 21:20:28 +03:00
|
|
|
struct DownloadStruct {
|
2019-06-24 00:02:11 +03:00
|
|
|
mut:
|
2019-06-22 21:20:28 +03:00
|
|
|
stream voidptr
|
|
|
|
written int
|
|
|
|
cb downloadfn
|
|
|
|
}
|
2019-08-06 06:54:47 +03:00
|
|
|
*/
|
2019-06-22 21:20:28 +03:00
|
|
|
|
2019-08-06 06:54:47 +03:00
|
|
|
fn download_cb(ptr voidptr, size, nmemb size_t, userp voidptr) {
|
|
|
|
/*
|
2019-06-24 00:02:11 +03:00
|
|
|
mut data := &DownloadStruct(userp)
|
|
|
|
written := C.fwrite(ptr, size, nmemb, data.stream)
|
|
|
|
data.written += written
|
2019-08-01 00:01:06 +03:00
|
|
|
data.cb(data.written)
|
|
|
|
//#data->cb(data->written); // TODO
|
2019-06-24 00:02:11 +03:00
|
|
|
return written
|
2019-08-06 06:54:47 +03:00
|
|
|
*/
|
2019-06-22 21:20:28 +03:00
|
|
|
}
|
|
|
|
|
2019-08-01 00:01:06 +03:00
|
|
|
fn download_file_with_progress(url, out string, cb downloadfn, cb_finished fn()) {
|
2019-08-06 06:54:47 +03:00
|
|
|
/*
|
2019-06-22 21:20:28 +03:00
|
|
|
curl := C.curl_easy_init()
|
|
|
|
if isnil(curl) {
|
|
|
|
return
|
|
|
|
}
|
2019-07-22 17:51:33 +03:00
|
|
|
cout := out.str
|
2019-06-24 00:02:11 +03:00
|
|
|
fp := C.fopen(cout, 'wb')
|
2019-07-22 17:51:33 +03:00
|
|
|
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-06-24 00:02:11 +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)
|
2019-08-01 00:01:06 +03:00
|
|
|
cb_finished()
|
2019-08-06 06:54:47 +03:00
|
|
|
*/
|
2019-06-22 21:20:28 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
fn download_file(url, out string) {
|
2019-08-06 06:54:47 +03:00
|
|
|
//download_file_with_progress(url, out, empty, empty)
|
2019-06-22 21:20:28 +03:00
|
|
|
}
|
|
|
|
|
2019-06-24 00:02:11 +03:00
|
|
|
fn empty() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|