1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
    int length = 26;
        time_t time_now = time(NULL); // current time
        curlhandle *curl_handle = static_cast<curlhandle*>(clientp);
    time_t time_start = curl_handle->timer->time_start;
    double rate = dlnow/(time_now - time_start)/1024; // average download speed in kB/

    double offset = static_cast<double>(curl_handle->getResumePosition());
    if (offset>0)
    {
        dlnow += offset;
        dltotal += offset;
    }

    double percent = dlnow / dltotal;
    int lengthnow = round(percent * length);
    int i=0;
    // Create progressbar
    printf("%3.0f%% [",percent*100);
    for (; i<lengthnow; i++) {
        printf("=");
    }
    for (; i<length; i++) {
        printf(" ");
    }
    printf("] %0.2f/%0.2fMB @ %0.2fkB/s\r", dlnow/1024/1024, dltotal/1024/1024, rate);
    fflush(stdout);

        return 0;
}