Enlightenment CVS committal
Author : codewarrior
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_file
Modified Files:
Ecore_File.h ecore_file_download.c
Log Message:
- new addition for ecore_file_download. now we have a progress_cb from curl so
we know how much of the file we've downloaded.
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_file/Ecore_File.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -3 -r1.25 -r1.26
--- Ecore_File.h 20 Jan 2006 09:13:19 -0000 1.25
+++ Ecore_File.h 7 Apr 2006 12:27:39 -0000 1.26
@@ -95,6 +95,12 @@
void (*completion_cb)(void *data,
const char *file,
int status),
+ int (*progress_cb)(void *data,
+ const char *file,
+ long int dltotal,
+ long int dlnow,
+ long int ultotal,
+ long int ulnow),
void *data);
EAPI int ecore_file_download_protocol_available(const char
*protocol);
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_file/ecore_file_download.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- ecore_file_download.c 6 Jan 2006 18:46:30 -0000 1.8
+++ ecore_file_download.c 7 Apr 2006 12:27:39 -0000 1.9
@@ -15,6 +15,7 @@
Ecore_Fd_Handler *fd_handler;
CURL *curl;
void (*completion_cb)(void *data, const char *file, int status);
+ int (*progress_cb)(void *data, const char *file, long int dltotal, long int
dlnow, long int ultotal, long int ulnow);
void *data;
FILE *file;
char *dst;
@@ -22,6 +23,7 @@
Ecore_File_Download_Job *_ecore_file_download_curl(const char *url, const char
*dst,
void (*completion_cb)(void
*data, const char *file, int status),
+ int (*progress_cb)(void
*data, const char *file, long int dltotal, long int dlnow, long int ultotal,
long int ulnow),
void *data);
static int _ecore_file_download_curl_fd_handler(void *data, Ecore_Fd_Handler
*fd_handler);
@@ -83,6 +85,7 @@
EAPI int
ecore_file_download(const char *url, const char *dst,
void (*completion_cb)(void *data, const char *file, int
status),
+ int (*progress_cb)(void *data, const char *file, long int
dltotal, long int dlnow, long int ultotal, long int ulnow),
void *data)
{
if (!ecore_file_is_dir(ecore_file_get_dir((char *)dst))) return 0;
@@ -107,7 +110,7 @@
/* download */
Ecore_File_Download_Job *job;
- job = _ecore_file_download_curl(url, dst, completion_cb, data);
+ job = _ecore_file_download_curl(url, dst, completion_cb, progress_cb,
data);
if (job)
return 1;
else
@@ -133,16 +136,27 @@
}
#ifdef HAVE_CURL
-/*
- * FIXME: Use
- * CURLOPT_PROGRESSFUNCTION and CURLOPT_PROGRESSDATA to
- * get reports on progress.
- * And maybe other nifty functions...
- */
+/* this reports the downloads progress. if we return 0, then download
+ * continues, if we return anything else, then the download stops */
+int _ecore_file_download_curl_progress_func(void *clientp, double dltotal,
double dlnow, double ultotal, double ulnow)
+{
+ Ecore_File_Download_Job *job;
+
+ job = clientp;
+
+ if(job->progress_cb)
+ return job->progress_cb(job->data, job->dst, (long int)dltotal, (long
int)dlnow, (long int)ultotal, (long int)ulnow);
+ return 0;
+}
+
Ecore_File_Download_Job *
_ecore_file_download_curl(const char *url, const char *dst,
void (*completion_cb)(void *data, const char *file,
int status),
+ int (*progress_cb)(void *data, const char *file,
+ long int dltotal, long int dlnow,
+ long int ultotal,
+ long int ulnow),
void *data)
{
CURLMsg *curlmsg;
@@ -169,11 +183,20 @@
free(job);
return NULL;
}
+
curl_easy_setopt(job->curl, CURLOPT_URL, url);
curl_easy_setopt(job->curl, CURLOPT_WRITEDATA, job->file);
-
+
+ if(progress_cb)
+ {
+ curl_easy_setopt(job->curl, CURLOPT_NOPROGRESS, FALSE);
+ curl_easy_setopt(job->curl, CURLOPT_PROGRESSDATA, job);
+ curl_easy_setopt(job->curl, CURLOPT_PROGRESSFUNCTION,
_ecore_file_download_curl_progress_func);
+ }
+
job->data = data;
job->completion_cb = completion_cb;
+ job->progress_cb = progress_cb;
job->dst = strdup(dst);
ecore_list_append(_job_list, job);
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs