summaryrefslogtreecommitdiff
path: root/download.c
diff options
context:
space:
mode:
authorNick White <arch@njw.me.uk>2007-05-03 00:31:22 +0000
committerNick White <arch@njw.me.uk>2007-05-03 00:31:22 +0000
commitf811c2d4823f95d7e90f25e0e7a98e5c5abcf3e2 (patch)
tree190283d4cf1efdd3ae5ba8ecaa0b6c5b5837bec9 /download.c
parent1edf37e3b0ad7b0556ba0902b5880044933ced66 (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.c228
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);
-}