4 * Copyright (c) 2003-2008, Lars Nilsson, <lars@quantumchamaeleon.com>
9 let show_progress fname conn
=
10 let bytes = Curl.get_sizedownload conn
11 and total
= Curl.get_contentlengthdownload conn
in
12 printf
"%s : %.2f%%\n" fname
(bytes /. total
*. 100.0);
15 let writer _fname _conn accum data
=
16 (* show_progress fname conn; *)
17 Buffer.add_string accum data
;
20 let save fname content
=
21 let fp = open_out_bin fname
in
22 Buffer.output_buffer
fp content
;
25 let get fname url
() =
26 let result = Buffer.create
16384
27 and conn
= Curl.init
() in
28 Curl.set_writefunction conn
(writer fname conn
result);
29 Curl.set_followlocation conn
true;
30 Curl.set_url conn url
;
35 let thread_get fname url
=
36 Thread.create
(get fname url
) ()
39 sprintf
"file%02d" (i
+1)
41 let rec join requests
=
44 | (fname
, t
) :: rest
->
45 printf
"Download done [%s]\n" fname
;
50 Curl.global_init
Curl.CURLINIT_GLOBALALL
;
51 let requests = Array.mapi
53 let fname = make_fname i
in
54 (fname, thread_get fname url
))
55 (Array.sub
Sys.argv
1 (Array.length
Sys.argv
- 1))
57 join (Array.to_list
requests)