diff options
| author | Nick White <arch@njw.me.uk> | 2007-05-03 00:31:22 +0000 | 
|---|---|---|
| committer | Nick White <arch@njw.me.uk> | 2007-05-03 00:31:22 +0000 | 
| commit | f811c2d4823f95d7e90f25e0e7a98e5c5abcf3e2 (patch) | |
| tree | 190283d4cf1efdd3ae5ba8ecaa0b6c5b5837bec9 /download.c | |
| parent | 1edf37e3b0ad7b0556ba0902b5880044933ced66 (diff) | |
Added Autotools, changed dir structure, added docs
Added (perhaps somewhat shaky) autotools support
Added tagging rules to junkify files generated by autotools
Added a directory structure
Updated README & INSTALL files to reflect changes
Wrote a man page
Changed version numbers in preparation for a release
git-archimport-id: getht@sv.gnu.org/getht--mainline--0.1--patch-23
Diffstat (limited to 'download.c')
| -rw-r--r-- | download.c | 228 | 
1 files changed, 0 insertions, 228 deletions
diff --git a/download.c b/download.c deleted file mode 100644 index 1108b6d..0000000 --- a/download.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright 2006 Nick White - * - * This file is part of GetHT - * - * GetHT is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * GetHT is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GetHT; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA - * - */ - -#include <stdio.h> -#include <string.h> -#include <sys/stat.h> -#include <curl/curl.h> -#include <curl/types.h> -#include <curl/easy.h> - -#include "getht.h" -#include "issue.h" - -int read_func(void *ptr, size_t size, size_t nmemb, FILE *stream) -	{ return fread(ptr, size, nmemb, stream); } -int write_func(void *ptr, size_t size, size_t nmemb, FILE *stream) -	{ return fwrite(ptr, size, nmemb, stream); } -int update_progress(void *data, double dltotal, double dlnow, -					double ultotal, double ulnow); - -extern proxytype proxy_type; -extern char proxy_addr[STR_MAX]; -extern long proxy_port; -extern proxyauth proxy_auth; -extern char proxy_user[STR_MAX]; -extern char proxy_pass[STR_MAX]; -extern CURL *main_curl_handle; - -int save_file(CURL *curl_handle, char *url, char *filepath) -/*	Save the file *url to *filepath */ -{ -	printf("Downloading %s\n",url); - -	if(curl_handle == NULL) -		curl_handle = main_curl_handle; - -	if(curl_handle) { -		FILE *file; -		if((file = fopen(filepath,"w")) == NULL) -		{ -			fprintf(stderr,"Error: cannot open file %s for writing.\n",filepath); -			return 1; -		} - -		curl_easy_setopt(curl_handle, CURLOPT_URL, url); -		curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_func); -		curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, file); -		curl_easy_setopt(curl_handle, CURLOPT_READFUNCTION, read_func); - -		if(proxy_type != NONE) -		{ -			if(proxy_type == HTTP) -				curl_easy_setopt(curl_handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); -			else if(proxy_type == SOCKS4) -				curl_easy_setopt(curl_handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); -			else if(proxy_type == SOCKS5) -				curl_easy_setopt(curl_handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); - -			curl_easy_setopt(curl_handle, CURLOPT_PROXY, proxy_addr); - -			if(proxy_port) -				curl_easy_setopt(curl_handle, CURLOPT_PROXYPORT, proxy_port); - -			if(proxy_auth != NOAUTH) -			{ -				if(proxy_auth == BASIC) -					curl_easy_setopt(curl_handle, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); -				else if(proxy_auth == DIGEST) -					curl_easy_setopt(curl_handle, CURLOPT_PROXYAUTH, CURLAUTH_DIGEST); -				else if(proxy_auth == NTLM) -					curl_easy_setopt(curl_handle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM); - -				if(proxy_user[0] && proxy_pass[0]) -				{ -					char userpass[STR_MAX]; -					snprintf(userpass, STR_MAX, "%s:%s", proxy_user, proxy_pass); -					curl_easy_setopt(curl_handle, CURLOPT_PROXYUSERPWD, userpass); -				} -			} -		} - -		curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 0); -		curl_easy_setopt(curl_handle, CURLOPT_PROGRESSFUNCTION, update_progress); - -		if(curl_easy_perform(curl_handle)) -		{ -			remove(filepath); -			fprintf(stderr,"Error, could not download %s\n",url); -			return 1; -		} - -/*		double d; -		curl_easy_getinfo(curl_handle, CURLINFO_SIZE_DOWNLOAD, &d); -		printf("Total downloaded: %lf\n",d); - -		curl_easy_getinfo(curl_handle, CURLINFO_SPEED_DOWNLOAD, &d); -		printf("Average speed downloaded: %lf\n",d); - -		curl_easy_getinfo(curl_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d); -		printf("Content Length: %lf\n",d); -*/ -		fclose(file); - -		printf("\n"); -	} -	else { -		fprintf(stderr,"Error: curl failed to initialise.\n"); -		printf("Could not download %s\n",url); -		return 1; -	} -	return 0; -} - -int update_progress(void *data, double dltotal, double dlnow, -				double ultotal, double ulnow) -/*	Print status information */ -{ -	double frac; -	frac = 100 * dlnow / dltotal; -	printf("\rDownload progress: %3.0lf%% ", frac); -	fflush(stdout); - -	return 0; -} - -void downloadissue(CURL *curl_handle, char * directory, iss * issue, int force) -/*	Download issue pointed to */ -{ -	sec * cur_section; -	char newdir[STR_MAX]; -	char filename[STR_MAX]; -	FILE * testfile; - -	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); - -	if(!opendir(newdir)) -		if(mkdir(newdir, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) -		{ -			printf("Please enter the path of a directory to save issues in: "); -			scanf("%s", newdir); /* TODO: incorporate tab-completion */ -		} - -	int count; -	for(count = 0; count <= issue->no_of_sections; count++) -	{ -		cur_section = issue->section[count]; - -		snprintf(filename,STR_MAX,"%s/section_%i.pdf", newdir, cur_section->number); -		if(!force){ -			testfile = fopen(filename, "r"); -			if(!testfile) -				save_file(curl_handle, cur_section->uri, filename); -			else -			{ -				fclose(testfile); -				printf("Skipping download of section %i\n", cur_section->number); -			} -		} -		else -			save_file(curl_handle, cur_section->uri, filename); -	} -} - -void downloadmedia(CURL * curl_handle, char * directory, med * media, int force) -/*	Download media pointed to. */ -{ -	char newdir[STR_MAX], filename[STR_MAX], fn[STR_MAX]; -	FILE * testfile; - -	/* for the moment just save to down/media, in future save to issue directories -	 * (regardless of if they're occupied) */ -	snprintf(newdir,STR_MAX,"%s/%s",directory,"media");  - -	if(!opendir(newdir)) -		if(mkdir(newdir, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) -		{ -			printf("Please enter the path of a directory to save media in: "); -			scanf("%s", newdir); /* TODO: incorporate GETTEXT */ -		} - -	/* get the position of the final forwardslash of the uri */ -	int slashpos; -	for(slashpos=strlen(media->uri); -		slashpos>=0 && media->uri[slashpos] != '/'; -		slashpos--); - -	/* copy from there to fn */ -	int tmp; -	for(tmp=0, slashpos++; media->uri[slashpos]; tmp++, slashpos++) -		fn[tmp] = media->uri[slashpos]; -	fn[tmp] = '\0'; - -	snprintf(filename,STR_MAX,"%s/%s", newdir, fn); - -	if(!force){ -		testfile = fopen(filename, "r"); -		if(!testfile) -			save_file(curl_handle, media->uri, filename); -		else -		{ -			fclose(testfile); -			printf("Skipping download of media item %s\n", media->title); -		} -	} -	else -		save_file(curl_handle, media->uri, filename); -}  | 
