Sigrid Solveig Haflínudóttirfirst tryf951b4f5 years agoHistory
74 lines · 1.9 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <bio.h>#include "feed.h"#include "xml.h" static char rssdate[] = "?WWW, ?DD ?MM YYYY hh:mm:ss ?Z"; static voidfreerss(Feed *f){	xmlfree(f->aux);} Feed *parserss(Biobuf *b){	Xelem *x, *i;	Item *item;	Xattr *a;	Feed *f; 	if((x = xmlread(b, 0)) == nil)		return nil;	if((f = calloc(1, sizeof(*f))) == nil){		xmlfree(x);		return nil;	} 	f->aux = x;	f->free = freerss; 	if((x = xmlget(x, "channel", nil)) == nil){		werrstr("no channel");		goto error;	} 	for(i = x->ch; i != nil; i = i->next)		f->nitems += strcmp(i->n, "item") == 0;	if((f->items = calloc(f->nitems, sizeof(Item))) == nil)		goto error;	item = f->items - 1;	for(i = x->ch; i != nil; i = i->next){		if(strcmp(i->n, "link") == 0)                f->link = i->v;		else if(strcmp(i->n, "title") == 0)          f->title = i->v;		else if(strcmp(i->n, "description") == 0)    f->descr = i->v;		else if(strcmp(i->n, "managingEditor") == 0) f->editor = i->v;		else if(strcmp(i->n, "ttl") == 0)            f->ttl = atoi(i->v);		else if(strcmp(i->n, "image") == 0)          f->image = (x = xmlget(i, "url", nil)) != nil ? x->v : nil;		else if(strcmp(i->n, "item") == 0){			item++;			for(x = i->ch; x != nil; x = x->next){				if(strcmp(x->n, "guid") == 0)             item->guid = x->v;				else if(strcmp(x->n, "link") == 0)        item->link = x->v;				else if(strcmp(x->n, "title") == 0)       item->title = x->v;				else if(strcmp(x->n, "description") == 0) item->descr = x->v;				else if(strcmp(x->n, "author") == 0)      item->author = x->v;				else if(strcmp(x->n, "pubDate") == 0)     tmparse(&item->published, rssdate, x->v, tzone, nil);				else if(strcmp(x->n, "enclosure") == 0){					if((a = xmlgetattr(x->a, "url")) != nil){						item->nencls++;						item->encls = realloc(item->encls, item->nencls*sizeof(char*));						item->encls[item->nencls-1] = a->v;					}				}			}		}	} 	return f;error:	freerss(f);	return nil;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t