diff options
author | Nick White <arch@njw.me.uk> | 2008-05-02 14:32:27 +0000 |
---|---|---|
committer | Nick White <arch@njw.me.uk> | 2008-05-02 14:32:27 +0000 |
commit | ba1c55b3d101581710d4b7c0671bf972ddf8ea2a (patch) | |
tree | a1b9e3a275114c92fe3e0aa282618e27bdd50634 /src/download.c | |
parent | b3a496addf1fb70f462455f1d638a6f27abdf8aa (diff) |
Fixed resume bug, improved download output
Fixed bug in resume which caused forced redownloads to create invalid pdfs
Changed download output to ensure one line per download (rather than a separate
one for progress)
Changed download output to display name of file rather than url downloading
Removed obselete testfile variable
Changed variable name of filename->filepath
git-archimport-id: getht@sv.gnu.org/getht--mainline--0.1--patch-46
Diffstat (limited to 'src/download.c')
-rw-r--r-- | src/download.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/download.c b/src/download.c index 77e65bd..b8fd086 100644 --- a/src/download.c +++ b/src/download.c @@ -43,17 +43,18 @@ extern char proxy_user[STR_MAX]; extern char proxy_pass[STR_MAX]; extern CURL *main_curl_handle; -int save_file(CURL *curl_handle, char *uri, char *filepath, long resume_offset) +int save_file(CURL *curl_handle, char *uri, char *filepath, char *filetitle, long resume_offset) /* Save the file *uri to *filepath */ { - printf("Downloading %s\n",uri); + printf("Downloading %s ",filetitle); + fflush(stdout); if(!curl_handle) curl_handle = main_curl_handle; if(curl_handle) { FILE *file; - file = fopen(filepath, "a"); + file = fopen(filepath, resume_offset?"a":"w"); if(!file) { fprintf(stderr,"Error: cannot open file %s for writing.\n",filepath); @@ -100,7 +101,7 @@ int save_file(CURL *curl_handle, char *uri, char *filepath, long resume_offset) fclose(file); - printf("\n"); + printf("\rDownloaded %s \n",filetitle); } else { fprintf(stderr,"Error: curl failed to initialise.\n"); @@ -126,7 +127,7 @@ int update_progress(void *data, double dltotal, double dlnow, else frac = 0; - printf("\rDownload progress: %3.0lf%% ", frac); + printf("\b\b\b\b\b\b\b: %3.0lf%% ", frac); fflush(stdout); return 0; @@ -185,12 +186,12 @@ void downloadissue(CURL *curl_handle, char * directory, iss * issue, int force) sec * cur_section; char newdir[STR_MAX]; char filename[STR_MAX]; - FILE * testfile; + char filepath[STR_MAX]; snprintf(newdir,STR_MAX,"%s/%i_%i-%i",directory, issue->date.year,issue->date.firstmonth,issue->date.lastmonth); - printf("Downloading issue entitled '%s' to '%s'\n",issue->title,newdir); + printf("Downloading %s to %s\n",issue->title, newdir); if(!opendir(newdir)) if(mkdir(newdir, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) @@ -204,12 +205,13 @@ void downloadissue(CURL *curl_handle, char * directory, iss * issue, int force) { cur_section = issue->section[count]; - snprintf(filename,STR_MAX,"%s/section_%i.pdf", newdir, cur_section->number); + snprintf(filename,STR_MAX,"section_%i.pdf", cur_section->number); + snprintf(filepath,STR_MAX,"%s/%s", newdir, filename); if(!force){ struct stat fileinfo; /* see if local file exists */ - if(stat(filename, &fileinfo)) - save_file(curl_handle, cur_section->uri, filename, 0); + if(stat(filepath, &fileinfo)) + save_file(curl_handle, cur_section->uri, filepath, filename, 0); else { /* get size of local file */ @@ -222,12 +224,12 @@ void downloadissue(CURL *curl_handle, char * directory, iss * issue, int force) /* if size of local file != size of remote file, resume */ if(remotesize > 0 && localsize < remotesize) - save_file(curl_handle, cur_section->uri, filename, localsize); + save_file(curl_handle, cur_section->uri, filepath, filename, localsize); else printf("Skipping download of completed section %i\n", cur_section->number); } } else - save_file(curl_handle, cur_section->uri, filename, 0); + save_file(curl_handle, cur_section->uri, filepath, filename, 0); } } |