diff options
| -rw-r--r-- | BUGS | 82 | ||||
| -rw-r--r-- | doc/getht.man | 32 | ||||
| -rw-r--r-- | src/Makefile.am | 2 | ||||
| -rw-r--r-- | src/cli.c | 32 | ||||
| -rw-r--r-- | src/config.c | 5 | ||||
| -rw-r--r-- | src/download.c | 45 | ||||
| -rw-r--r-- | src/getht.c | 111 | ||||
| -rw-r--r-- | src/getht.h | 6 | ||||
| -rw-r--r-- | src/issue.h | 15 | ||||
| -rw-r--r-- | src/issuemem.c | 24 | ||||
| -rw-r--r-- | src/mediarev.c | 178 | ||||
| -rw-r--r-- | src/mediaxml.c | 249 | ||||
| -rw-r--r-- | src/tocxml.c | 1 | 
13 files changed, 14 insertions, 768 deletions
@@ -1,82 +0,0 @@ - -!! BIG BUG !! -read media xml crashes, as cannot find any issue info, so sets issue & leaves an item with all blank fields -a few things to fix with this: - -	read rev: -		at the moment looks for -			set the filename of player \"player1\" to \"%s\" -			set the filename of player \"player1\" to \" -		however, "player1" has now been changed to "PubDesk" -		therefore change scanning routine to along the lines of -			set the filename of player \"*\" to \"%s\" -		more complex but worthwhile -		-also- -		if no url is found inside a "on mouseUp" clause, do not keep a blank media entry -		best way to do this would be to: -			dealloc the media item, -			realloc the pointer array, -			and -1 to no_of_media - - -further progress: --	main obstacle is that "on mouseUp" no longer necessarily follows a newline - file now less organised still -	therefore we'll have to scan each line (except when already in useful clause (check this)) char by char for the occurance -	best way to do this would be to scan char by char, and if one worthwhile is found to copy from this point to a new string for parsing -	worth spending a few minutes checking if there's a library function out there to do this, if not create a simple generic one, using pointers, roughly of the form: -		int containstring(char * toparse, char * match), returning 1 if found and 0 otherwise --	change of scanning routine has been done, but is untested -	consider changing for an improved getquote which can take the nth quote -		this is due to it being best not to rely on end of lines at end of bit we're interested in --	2nd clause of above (if no url is found) is very important now, as majority are unuseful - - -currently (16/08/2007): - -the strcontains does not appear to be working correctly; appears to accept any line as a match -this then creates a bunch of structures, which eventually become confused -	this may point to some niggling bug in the memory management, but for the moment focus on correct basic rev parsing - -currently (28/11/2007): - -strcontains works mostly - check the TODO -the sscanf for extracting uri isn't working - best to just have a slightly more sophisticated getquote function -next actions: -	/no_of_media strangely changes where it's pointing to to be "out of bounds" half way through -	/	always gets stuck on 'Geometry' -	/	must have an overflow, prob in strcontains (only happens when it's used lots) -	/	rewrite strcontains using array arithmetic - easier to maintain -	/ensure whole lines are always parsed (not just first parts thereof) [should now be done] -	/	to test search output for 1st reference to Publisher, and see if a few lines above is a successful on mouseUp recognition -	/	get rid of ugly & unnecessary extra checks, which are put there just to ensure nothing bad happens in the delicate phase - -currently (09/12/2007) - -strcontains has been rewritten to use friendly arrays; appears to work fine (though not heavily tested) -getting a str has been rewritten into a function: gzgetstr ; appears to work fine thouth also not well tested - -note - arch changes they've made: -only one regular media item (in form of earlier) -now a new "songs" section, with neat urls following "SongsURLs" (when not in on mouseUp section) -	song titles follow, again on separate neat lines, but without any easy delimiter to hook on to -there is also a video section in a "on menupick pItem" clause -	different syntax to traditional -	has to work out url using quality choices from pItem (high, med, low; given below) -	won't be too hard, just be somewhat tricky to get the different options (start with them hardcoded, i.e. on "put tSize & '.mov' after tURL" just make 3 items with high, med, & low qualities -there is also an interviews section, which looks very similar to Songs (InterviewsURLs) -	note that interview names are encased in html -there are also thumbnail jpgs, but they needn't be handled for a while - -next actions: -	improve getquote to point where sscanf line is replaced [e.g. allow to only return quote n (and ignore prev)] -	only include stack if it has a uri attached (otherwise throw away) - -18/12/07 - -getquote has been rewritten to extract an arbitrary quote n -empty uri strings are ignored - -TODO w/bugs -generally: - -we should be able to read rev.gz / xml from hd, to save time & server hitting with testing diff --git a/doc/getht.man b/doc/getht.man index 2fcde22..5a34819 100644 --- a/doc/getht.man +++ b/doc/getht.man @@ -32,9 +32,9 @@  .SH DESCRIPTION  .PP  .I GetHT -is a program which downloads multimedia and pdf files  -from Hinduism Today. It has good proxy support, and -is small, fast, and simple. +is a program which downloads pdf files from Hinduism +Today. It has good proxy support, and is small, fast, +and simple.  .I GetHT  is not endorsed by or affiliated with Hinduism Today.  @@ -51,14 +51,6 @@ Download all issues of Hinduism Today.  Download the issue numbered issno (use \fI-l\fR to find  issue numbers).  .TP -.B \-n, \-\-download-media medno -Download the multimedia file numbered medno (use \fI-m\fR -to find media numbers). -.TP -.B \-m, \-\-download-all-media -Download all multimedia files distributed by Hinduism  -Today. -.TP  .B \-f, \-\-force  Force getht to download files, even if they have  already been downloaded. This is useful if a download @@ -68,17 +60,9 @@ has been corrupted or interrupted.  List the issues of Hinduism Today, with issue numbers,  sorted by date.  .TP -.B \m, \-\-list-media -List the multimedia files associated with Hinduism  -today, with media numbers, sorted by issue date. -.TP  .B \-t, \-\-tocfile tocfile  Use a different contents file, as specified by tocfile.  .TP -.B \-x, \-\-mediatocfile mediatocfile -Use a different media contents file, as specified by -mediatocfile. -.TP  .B \-h, \-\-help  Print a brief usage message.  .TP @@ -101,9 +85,8 @@ with commented lines starting with a #  The following options may be set.  .TP  .B issuepath -Stores the path in which all issues and multimedia  -files will be saved. The default setting is -\fB~/hinduism_today/\fR +Stores the path in which all issues will be saved +The default setting is \fB~/hinduism_today/\fR  .TP  .B startup_check  Whether to automatically check for new issues each  @@ -115,11 +98,6 @@ A url to the xml file containing the table of contents  for the publication.  Default: \fBhttp://www.hinduismtoday.com/digital/htde_toc.xml\fR  .TP -.B mediatoc_url -A url to the rev.gz file listing the media included with  -the publication. -Default: \fBhttp://www.hinduismtoday.com/digital/htde_media-player.rev.gz\fR -.TP  .B proxy_type  The type of proxy (if any) through which GetHT is to  pass. GetHT currently supports the following options: diff --git a/src/Makefile.am b/src/Makefile.am index 79f8673..e6b2bc1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,5 +3,5 @@  bin_PROGRAMS = getht  getht_SOURCES = config.c cli.c download.c getht.c issuemem.c	\ -		mediarev.c mediaxml.c tocxml.c xml.c	\ +		tocxml.c xml.c	\  		getht.h issue.h version.h @@ -59,47 +59,15 @@ void list_issues(iss ** issue, int no_of_issues, int verbose)  	}  } -void list_media(iss ** issue, int no_of_issues, int verbose) -{ -	int iss_no, med_no, med_global; -	for(iss_no=0, med_global=0;iss_no<=no_of_issues;iss_no++) -	{ -		if(issue[iss_no]->no_of_media >= 0) -		{ -			printf("%s\n", issue[iss_no]->title); -			if(verbose >= 2) -				printf("Year: %i; Months: %i - %i\n",issue[iss_no]->date.year,issue[iss_no]->date.firstmonth,issue[iss_no]->date.lastmonth); -			for(med_no=0; med_no <= (issue[iss_no]->no_of_media); med_no++, med_global++) -			{ -				printf("[%i]\t", med_global); -				printf("%s\n", issue[iss_no]->media[med_no]->title); -				if(verbose >= 1) -				{ -					printf("\t%s\n", issue[iss_no]->media[med_no]->uri); -					if(verbose >=2) -					{ -						if(issue[iss_no]->media[med_no]->comment[0]!='\0') -							printf("\t%s\n", issue[iss_no]->media[med_no]->comment); -					} -				} -			} -		} -	} -} -  void showusage()  {  	printf("Usage: getht [-ualmofhv] [-d issno] [-n medno] [-t tocfile]\n");  	printf("-u | --update                 Update contents files\n");  	printf("-a | --download-all           Download all issues\n");  	printf("-d | --download-issue issno   Download issue number issno\n"); -	printf("-n | --download-media medno   Download media number n\n"); -	printf("-o | --download-all-media     Download all media\n");  	printf("-f | --force                  Force re-download of existing files\n");  	printf("-l | --list-issues            List available issues\n"); -	printf("-m | --list-media             List available media\n");  	printf("-t | --tocfile file           Use alternative contents xml file\n"); -	printf("-x | --mediatocfile file      Use alternative media contents xml file\n");  	printf("-h | --help                   Print this help message\n");  	printf("-v | --verbose                Make output more verbose\n");  	printf("-V | --version                Print version information\n"); diff --git a/src/config.c b/src/config.c index a963cc7..23c2926 100644 --- a/src/config.c +++ b/src/config.c @@ -31,7 +31,6 @@ extern proxyauth proxy_auth;  extern char proxy_user[STR_MAX];  extern char proxy_pass[STR_MAX];  extern char issue_url[STR_MAX]; -extern char media_url[STR_MAX];  int loadconfig(char * htde_path, char * issue_path, int * update)  /*	Loads variables from config file to extern and passed @@ -60,8 +59,6 @@ int loadconfig(char * htde_path, char * issue_path, int * update)  			*update = atoi(parameter);  		else if(!strcmp(option, "toc_url"))  			strncpy(issue_url, parameter, STR_MAX); -		else if(!strcmp(option, "mediatoc_url")) -			strncpy(media_url, parameter, STR_MAX);  		else if(!strcmp(option, "proxy_type"))  		{  			if(!strcmp(parameter, "http")) @@ -125,8 +122,6 @@ int writefreshconfig(char * htde_path, char * issue_path, int * update)  		fprintf(config_file, "%s = %i\n", "startup_check", *update);  	if(issue_url[0])  		fprintf(config_file, "%s = %s\n", "toc_url", issue_url); -	if(media_url[0]) -		fprintf(config_file, "%s = %s\n", "mediatoc_url", media_url);  	if(proxy_type != NONE)  	{  		if(proxy_type = HTTP) diff --git a/src/download.c b/src/download.c index cddf0de..a1853f5 100644 --- a/src/download.c +++ b/src/download.c @@ -184,48 +184,3 @@ void downloadissue(CURL *curl_handle, char * directory, iss * issue, int force)  			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); -} diff --git a/src/getht.c b/src/getht.c index a00df27..26737d7 100644 --- a/src/getht.c +++ b/src/getht.c @@ -33,13 +33,11 @@  int update_contents_files(); -med * findnewestmed(iss ** issue, int no_of_issues); -  proxytype proxy_type; char proxy_addr[STR_MAX]; long proxy_port;  proxyauth proxy_auth;   char proxy_user[STR_MAX]; char proxy_pass[STR_MAX]; -char issue_xml[STR_MAX]; char media_xml[STR_MAX]; char media_rev[STR_MAX]; -char issue_url[STR_MAX]; char media_url[STR_MAX]; +char issue_xml[STR_MAX]; +char issue_url[STR_MAX];  CURL *main_curl_handle;   int main(int argc, char *argv[]) @@ -59,18 +57,14 @@ int main(int argc, char *argv[])  		}  	snprintf(issue_xml,STR_MAX,"%s/%s",getht_path,ISS_XML_FILE); -	snprintf(media_xml,STR_MAX, "%s/%s", getht_path, MED_XML_FILE); -	snprintf(media_rev,STR_MAX,"%s/%s",getht_path,MED_REVGZ_FILE);  	strncpy(issue_url,XML_TOC_URL,STR_MAX); -	strncpy(media_url,MEDIA_TOC_URL,STR_MAX);  	snprintf(save_path,STR_MAX,"%s/hinduism_today",getenv("HOME")); -	int downall = 0, downallmedia = 0; +	int downall = 0;  	int downissue = 0, downissueno = -1; -	int downmedia = 0, downmediano = -1; -	int listissues = 0, listmedia = 0; +	int listissues = 0;  	int force = 0, update = 0;  	int verbose = 0, option = 0; @@ -82,7 +76,7 @@ int main(int argc, char *argv[])  	proxy_pass[0] = '\0';  	if(loadconfig(getht_path, &save_path, &update) != 0) -		writefreshconfig(getht_path, &save_path, &update, &issue_url, &media_url); +		writefreshconfig(getht_path, &save_path, &update, &issue_url);  	if(!opendir(save_path))  		if(mkdir(save_path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) @@ -100,14 +94,10 @@ int main(int argc, char *argv[])  	{  		{"download-all", no_argument, 0, 'a'},  		{"download-issue", required_argument, 0, 'd'}, -		{"download-media", required_argument, 0, 'n'}, -		{"download-all-media", no_argument, 0, 'o'},  		{"force", no_argument, 0, 'f'},  		{"list-issues", no_argument, 0, 'l'}, -		{"list-media", no_argument, 0, 'm'},  		{"update", no_argument, 0, 'u'},  		{"tocfile", required_argument, 0, 't'}, -		{"mediatocfile", required_argument, 0, 'x'},  		{"help", no_argument, 0, 'h'},  		{"verbose", no_argument, 0, 'v'},  		{"version", no_argument, 0, 'V'}, @@ -129,20 +119,6 @@ int main(int argc, char *argv[])  				listissues = 1;  				option = 1;  				break; -			case 'm': -				listmedia = 1; -				option = 1; -				break; -			case 'o': -				downallmedia = 1; -				downmedia = 1; -				option = 1; -				break; -			case 'n': -				downmedia = 1; -				downmediano = atoi(optarg); -				option = 1; -				break;  			case 'f':  				force = 1;  				option = 1; @@ -154,9 +130,6 @@ int main(int argc, char *argv[])  			case 't':  				strncpy(issue_xml, strdup(optarg), STR_MAX);  				break; -			case 'x': -				strncpy(media_xml, strdup(optarg), STR_MAX); -				break;  			case 'h':  				showusage();  				return 0; @@ -222,54 +195,10 @@ int main(int argc, char *argv[])  			downloadissue(NULL, save_path, issue[downissueno], force);  	} -	if(downmedia || listmedia) -	{ -		int newest; - -		issue = parsemedia(media_xml, issue, &no_of_issues); - -		if(!issue) -		{ -			if(!update) -			{ -				printf("Cannot open media contents file, trying to update contents\n"); -				if(update_contents_files()) -					return 1; -				issue = parsemedia(media_xml, issue, &no_of_issues); -			} -			else -			{ -				printf("Cannot open contents file, try running `getht --update`\n"); -				return 1; -			} -		} - -		if(downallmedia) -		{ -			for(i = 0; i <= no_of_issues; i++) -			{ -				for(newest = 0; newest <= issue[i]->no_of_media; newest++) -					downloadmedia(NULL, save_path, issue[i]->media[newest], force); -			} -		} -		else if(downmediano >= 0) -		{ -			int med_global, med_no; - -			for(i=0,med_global=0; i<=no_of_issues; i++) -				if(issue[i]->no_of_media >= 0) -					for(med_no=0; med_no <= (issue[i]->no_of_media); med_no++,med_global++) -						if(med_global == downmediano) -							downloadmedia(NULL, save_path, issue[i]->media[med_no], force); -		} -	}  	if(listissues)  		list_issues(issue, no_of_issues, verbose); -	if(listmedia) -		list_media(issue, no_of_issues, verbose); -  	/* Ensure curl cleans itself up */  	curl_easy_cleanup(main_curl_handle); @@ -281,34 +210,6 @@ int update_contents_files()  {  	if(save_file(NULL, issue_url, issue_xml))  		return 1; -	 -	char isstitle[STR_MAX]; -	issdates date; - -	/*	see if current issue's media toc has already -		been written to the xml, if not do so */ -	if(access(issue_xml, R_OK) == 0) -	{ -		if(cur_identifiers(issue_xml, isstitle, &date)) -			return 1; -	}  	else -		return 1; - -	if(media_accounted_for(media_xml, &date)) -	{ -		if(save_file(NULL, media_url, media_rev)) -			return 1; -	 -		med ** temp_med; -		int med_no = -1; - -		temp_med = parsemediagz(media_rev, &med_no); - -		unlink(media_rev); - -		addmediaissue(media_xml, isstitle, &date, temp_med, med_no); -	} - -	return 0; +		return 0;  } diff --git a/src/getht.h b/src/getht.h index df2b1b2..ba138ff 100644 --- a/src/getht.h +++ b/src/getht.h @@ -20,16 +20,14 @@   */  #define XML_TOC_URL		"http://www.hinduismtoday.com/digital/htde_toc.xml" + +/* currently unused - see 0.1 patch-30 for latest version parsing media */  #define MEDIA_TOC_URL	"http://www.hinduismtoday.com/digital/htde_media-player.rev.gz" -#define MED_XML_FILE	"media_toc.xml"  #define ISS_XML_FILE	"htde_toc.xml" -#define MED_REVGZ_FILE	"htde_media-player.rev.gz"  #define STR_MAX		512 -#define MAX_ISS		10 -  typedef enum  {  	NONE, diff --git a/src/issue.h b/src/issue.h index 22499b5..e3fef70 100644 --- a/src/issue.h +++ b/src/issue.h @@ -47,31 +47,16 @@ typedef struct  typedef struct  { -	char uri[512]; -	char title[512]; -	char comment[512]; -	char preview_uri[512]; -	int size; -} med; - -typedef struct -{  	char preview_uri[512];  	char title[512];  	int size;  	issdates date;  	sec ** section;  	int no_of_sections; -	med ** media; -	int no_of_media;  } iss;  iss ** parsetoc(char *filepath, int * iss_no); -iss ** parsemedia(char * filepath, iss ** issue, int * no_of_issues); - -med ** parsemediagz(char * media_path, int * no_of_media);  iss ** assignnew_iss(iss ** issue, int *no_of_issues);  sec ** assignnew_sec(sec ** section, int * no_of_sections);  it ** assignnew_it(it ** item, int * no_of_items); -med ** assignnew_med(med ** media, int * no_of_media); diff --git a/src/issuemem.c b/src/issuemem.c index 63fe5b4..d4f922f 100644 --- a/src/issuemem.c +++ b/src/issuemem.c @@ -107,30 +107,6 @@ it ** assignnew_it(it ** item, int * no_of_items)  	return tmp;  } -med ** assignnew_med(med ** media, int * no_of_media) -{ -	med ** tmp = NULL; - -	if(*no_of_media < 0) -	{       /* make **section a new array of section pointers */ -		if( (tmp = malloc(sizeof(med *))) == NULL ) -			nogo_mem(); -	} -	else -	{       /* add a new pointer to media pointer list */ -		if( (tmp = realloc(media, sizeof(med *) + (((*no_of_media)+1) * sizeof(med *)))) == NULL ) -			nogo_mem(); -	} - -	(*no_of_media)++;                                          - -	/* make new array item a pointer to issue */ -	if( ( tmp[*no_of_media] = malloc(sizeof(med)) ) == NULL ) -		nogo_mem(); - -	return tmp; -} -  int issuesort(iss ** issue, int no_of_issues)  /* does a basic bubble sort, by date, returning sorted issue */  { diff --git a/src/mediarev.c b/src/mediarev.c deleted file mode 100644 index 975c971..0000000 --- a/src/mediarev.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright 2006 Nick White - * - * This mediagz 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 <zlib.h> - -#include "getht.h" -#include "issue.h" - -int gzgetstr(char * newstr, gzFile * gzfile); -int getquote(char * input, char * quote, int number); -int strcontains(char * source, char * comparison); - -med ** parsemediagz(char * media_path, int * no_of_media) -/*	Parses gzipped adobe pagemaker files for media urls and metadata, - *	filling media with the information. */ -{ -	char c; -	char cur_line[STR_MAX]; -	gzFile mediagz; - -	*no_of_media = -1; - -	med ** media = NULL; - -	strcpy(cur_line,""); /* reset cur_line */ - -	mediagz = gzopen(media_path, "r"); - -	med * cur_media; - -	while(gzeof(mediagz)==0) -	{ -		gzgetstr(cur_line, mediagz); - -		if(strcontains(cur_line,"on mouseUp") == 0) -		{ -			/* assign memory for the new media */ -			media = assignnew_med(media, no_of_media); - -			cur_media = media[*no_of_media]; - -			/* setup media globals */ -			cur_media->uri[0] = '\0'; -			cur_media->title[0] = '\0'; -			cur_media->comment[0] = '\0'; -			cur_media->preview_uri[0] = '\0'; -			cur_media->size = 0; - -			/* process rev file */ -			while(strcontains(cur_line,"end mouseUp") && gzeof(mediagz)==0) -			{ -				strcpy(cur_line,""); /* reset cur_line */ -				gzgetstr(cur_line, mediagz); - -				if(!strcontains(cur_line,"set the filename of player \"") && strcontains(cur_line,"empty")) -					getquote(cur_line, cur_media->uri, 2); -				else if(!strcontains(cur_line,"set the label of this stack to")) -					getquote(cur_line, cur_media->title, 1); -				else if(!strcontains(cur_line,"statusMsg\(\"") || !strcontains(cur_line,"StatusMsg \(\"")) -					getquote(cur_line, cur_media->comment, 1); -			} - -			/* if it turns out that there was nothing useful there, remove the new media */ -			if(cur_media->uri[0] == '\0') -				(*no_of_media)--; -		} -		strcpy(cur_line,""); /* reset cur_line */ -	} - -	return media; -} - -int getquote(char * input, char * quote, int number) -/*	assigns quote string from a line of the format: - *	'something "quote" something' */ -{ -	int curnum; - -	/* advance past earlier quotes */ -	for(curnum=0; curnum < ((number*2)-2); curnum++) -	{ -		/* advance until " character is reached */ -		while(*input != '"' && *input)	 -			input++; -		input++; -	} - -	/* advance until " character is reached */ -	while(*input != '"' && *input)	 -		input++; - -	input++; - -	/* copy characters in until next '"' */ -	while(*input != '"') -	{ -		/* if end is found without closing bracket, -		 * exit with error */ -		if(! *input) -			return 1; -		*quote = *input; -		quote++; -		input++; -	} - -	*quote = '\0'; - -	return 0; -} - -int strcontains(char * source, char * comparison) -{ -	int srcpos = 0; /* position in source string */ -	int compos = 0; /* position in comparison string */ - -	while(srcpos < strlen(source) && srcpos < STR_MAX) -	{ -		/* if the chars match, move to the next in comparison, -		 * otherwise only advance the source */ -		if(source[srcpos] == comparison[compos]) -			compos++; -		else -			compos = 0; - -		/* if we got to the end of comparison, there's a match */ -		if(compos == strlen(comparison)) -			return 0; - -		srcpos++; -	} - -	/* if we got all the way through the source, there's no match */ -	return 1; -} - -int gzgetstr(char * newstr, gzFile * gzfile) -/*	a reimplementation of gzgetstr, which doesn't choke at odd characters - */ -{ -	strcpy(newstr,""); /* reset cur_line */ -	char c; - -	while((c = gzgetc(gzfile)) != -1) -	{ -		if(c == '\n') -			break; - -		/* append the char if there's room in the str */ -		if(strlen(newstr)+1 < STR_MAX) -			strncat(newstr,&c,1); -		/* if the line is too long just break to pick up the 2nd half on next pass, -		 * not perfect (will miss strs cut into 2 sections), but good enough for now */ -		else -			break; -	} - -	return 0; -} diff --git a/src/mediaxml.c b/src/mediaxml.c deleted file mode 100644 index 54ed3ae..0000000 --- a/src/mediaxml.c +++ /dev/null @@ -1,249 +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 <libxml/xmlmemory.h> -#include <libxml/parser.h> - -#include "getht.h" -#include "issue.h" - -int media_accounted_for(char * filepath, issdates * date) -/*	checks if media for issue is found */ -{ -	xmlDocPtr media_file; -	xmlNodePtr node; - -	if(ready_xml(filepath, "media", &media_file, &node)) -		return 1; - -	*node = *node->xmlChildrenNode; - -	issdates curdate; -	int found = 1; - -	while (node != NULL) -	{ -		if(!xmlStrcmp(node->name,(char *) "issue")) -		{ -			curdate.year = atoi( (char *) xmlGetProp(node, "year")); -			curdate.firstmonth = atoi( (char *) xmlGetProp(node, "firstmonth")); -			curdate.lastmonth = atoi( (char *) xmlGetProp(node, "lastmonth")); -		} - -		if( curdate.year == date->year && -			curdate.firstmonth == date->firstmonth && -			curdate.lastmonth == date->lastmonth ) -		{ -			found = 0; -			break; -		} - -		node = node->next; -	} - -	xmlFreeDoc(media_file); - -	return found; -} - -int addmediaissue(char * filepath, char * title, issdates * date, med ** media, int med_no) -/*	Appends data from media structures to xml file. */ -{ -	xmlDocPtr media_file; -	xmlNodePtr node; - -	/* if xml file doesn't exist */ -	if(ready_xml(filepath, "media", &media_file, &node)) -	{ -		/* set up fresh xml file */ -		media_file = xmlNewDoc(NULL); -		node = xmlNewNode(NULL, "media"); -		xmlDocSetRootElement(media_file, node); -	} - -	xmlNodePtr curissue; -	char tmp[5]; - -	/* set up issue node */ -	curissue = xmlNewTextChild(node, NULL, "issue", NULL); - -	xmlNewProp(curissue, "title", title); - -	snprintf(tmp,5,"%i", date->year); -	xmlNewProp(curissue, "year", tmp); - -	snprintf(tmp,5,"%i",date->firstmonth); -	xmlNewProp(curissue, "firstmonth", tmp); - -	snprintf(tmp,5,"%i",date->lastmonth); -	xmlNewProp(curissue, "lastmonth", tmp); - -	xmlNodePtr curitem; - -	int count; -	for(count = 0; count <= med_no; count++) -	{ -		curitem = xmlNewTextChild(curissue, NULL, "item", media[count]->title); - -		xmlNewProp(curitem, "uri", media[count]->uri); - -		if(media[count]->comment) -			xmlNewProp(curitem, "comment", media[count]->comment); -		if(media[count]->preview_uri) -			xmlNewProp(curitem, "preview_uri", media[count]->preview_uri); -	} - -	xmlKeepBlanksDefault(0); - -	xmlSaveFormatFile(filepath, media_file, 1); - -	xmlFreeDoc(media_file); - -	return 0; -} - -iss ** parsemedia(char * filepath, iss ** issue, int * no_of_issues) -/*	Fills issues with relevant info from media xml, creating new -	ones where necessary. */ -{ -	issdates tmpdate; - -	iss * cur_issue; med * cur_media; - -	xmlDocPtr media_file; -	xmlNodePtr node, itnode; - -	if(ready_xml(filepath, "media", &media_file, &node)) -		return NULL; - -	*node = *node->xmlChildrenNode; - -	int issue_there = 0; - -	char title[STR_MAX]; -	issdates curdate; -	int tmp; - -	while (node != NULL) -	{ -		if(!xmlStrcmp(node->name,(char *) "issue")) -		{ -			/* check if issue with title already exists */ -			for(tmp = 0; tmp < *no_of_issues; tmp++) -			{ -				curdate.year = atoi( (char *) xmlGetProp(node, "year")); -				curdate.firstmonth = atoi( (char *) xmlGetProp(node, "firstmonth")); -				curdate.lastmonth = atoi( (char *) xmlGetProp(node, "lastmonth")); - -				if( curdate.year == issue[tmp]->date.year && -				curdate.firstmonth == issue[tmp]->date.firstmonth && -				curdate.lastmonth == issue[tmp]->date.lastmonth ) -				{ -					issue_there = 1; -					break; -				} -			} - -			if(!issue_there) -			{	/* advance to the next free issue */ -				iss ** tmpiss = NULL; -				if(*no_of_issues == -1) -				{	/* make issue** a new array of issue pointers */ -					if( (tmpiss = malloc(sizeof(iss *))) == NULL ) -						nogo_mem(); -				} -				else -				{	/* add a new pointer to issue pointer list */ -					if( (tmpiss = realloc(issue, sizeof(iss *) + (*no_of_issues * sizeof(iss *)))) == NULL ) -					nogo_mem(); -				} - -				(*no_of_issues)++; - -				/* make new array item a pointer to issue */ -				if( (tmpiss[*no_of_issues] = malloc(sizeof(iss))) == NULL ) -					nogo_mem(); - -				issue = tmpiss; - -				issue[*no_of_issues]->date.year = atoi( (char *) xmlGetProp(node, "year")); -				issue[*no_of_issues]->date.firstmonth = atoi( (char *) xmlGetProp(node, "firstmonth")); -				issue[*no_of_issues]->date.lastmonth = atoi( (char *) xmlGetProp(node, "lastmonth")); - -				strncpy(issue[*no_of_issues]->title, (char *) xmlGetProp(node, "title"), STR_MAX); - -				tmp = *no_of_issues; -			} - -			iss * cur_issue = issue[tmp]; - -			issue[tmp]->no_of_media = -1; - -			itnode = node->xmlChildrenNode; - -			while (itnode != NULL) -			{ - -				if(!xmlStrcmp(itnode->name,(char *) "item")) -				{ -					/* assign memory for the new media */ -					cur_issue->media = assignnew_med(cur_issue->media, &(cur_issue->no_of_media)); - -					/* setup media globals */ -					cur_media = cur_issue->media[cur_issue->no_of_media]; -					 -					cur_media->uri[0] = '\0'; -					cur_media->title[0] = '\0'; -					cur_media->comment[0] = '\0'; -					cur_media->preview_uri[0] = '\0'; -					cur_media->size = 0; - -					/* add media info to cur_media */ -					if(xmlGetProp(itnode, "uri")) -						strncpy(cur_media->uri, (char *) xmlGetProp(itnode, "uri"), STR_MAX); - -					if(xmlGetProp(itnode, "comment")) -						strncpy(cur_media->comment, (char *) xmlGetProp(itnode, "comment"), STR_MAX); - -					if(xmlGetProp(itnode, "preview")) -						strncpy(cur_media->preview_uri, (char *) xmlGetProp(itnode, "preview_uri"), STR_MAX); - -					if((char *) xmlNodeListGetString(media_file, itnode->xmlChildrenNode, 1)) -						strncpy(cur_media->title, (char *) xmlNodeListGetString(media_file, itnode->xmlChildrenNode, 1), STR_MAX); -					else -						strncpy(cur_media->title, "untitled", STR_MAX); -				} -				 -				itnode = itnode->next; -			} -		} - -		node = node->next; -	} - -	xmlFreeDoc(media_file); - -	issuesort(issue, *no_of_issues); - -	return issue; -} diff --git a/src/tocxml.c b/src/tocxml.c index 08ca12b..dc2bddb 100644 --- a/src/tocxml.c +++ b/src/tocxml.c @@ -68,7 +68,6 @@ iss ** parsetoc(char *filepath, int * iss_no)  					issue = assignnew_iss(issue, &no_of_issues);  					/* setup issue globals */ -					issue[no_of_issues]->no_of_media = -1;  					issue[no_of_issues]->no_of_sections = -1;  					issue[no_of_issues]->date.year =  						atoi( (const char *)(xmlStrsub(node->name,5,4)) );  | 
