forked from lix-project/lix
Make downloads interruptable
This commit is contained in:
parent
deb8668a0e
commit
35d30d67eb
|
@ -54,6 +54,11 @@ struct Curl
|
||||||
return realSize;
|
return realSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int progressCallback(void * clientp, double dltotal, double dlnow, double ultotal, double ulnow)
|
||||||
|
{
|
||||||
|
return _isInterrupted;
|
||||||
|
}
|
||||||
|
|
||||||
Curl()
|
Curl()
|
||||||
{
|
{
|
||||||
requestHeaders = 0;
|
requestHeaders = 0;
|
||||||
|
@ -71,6 +76,9 @@ struct Curl
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, headerCallback);
|
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, headerCallback);
|
||||||
curl_easy_setopt(curl, CURLOPT_HEADERDATA, (void *) &curl);
|
curl_easy_setopt(curl, CURLOPT_HEADERDATA, (void *) &curl);
|
||||||
|
|
||||||
|
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progressCallback);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
~Curl()
|
~Curl()
|
||||||
|
@ -98,6 +106,7 @@ struct Curl
|
||||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, requestHeaders);
|
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, requestHeaders);
|
||||||
|
|
||||||
CURLcode res = curl_easy_perform(curl);
|
CURLcode res = curl_easy_perform(curl);
|
||||||
|
checkInterrupt();
|
||||||
if (res == CURLE_WRITE_ERROR && etag == expectedETag) return false;
|
if (res == CURLE_WRITE_ERROR && etag == expectedETag) return false;
|
||||||
if (res != CURLE_OK)
|
if (res != CURLE_OK)
|
||||||
throw DownloadError(format("unable to download ‘%1%’: %2% (%3%)")
|
throw DownloadError(format("unable to download ‘%1%’: %2% (%3%)")
|
||||||
|
|
Loading…
Reference in a new issue