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
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to