Monday, April 04, 2011 at 1:05 AM.

feedhoseSuite.client.itemArrived

on itemArrived (hosename, adrx) {
	<<Changes
		<<12/3/10; 5:16:37 PM by DW
			<<Update for Hacker News which doesn't have descriptions in its feed.
		<<12/2/10; 5:54:40 PM by DW
			<<Decode titles and descriptions.
		<<10/5/10; 1:08:22 PM by DW
			<<Created. 
	local (adrhose = feedhosesuite.client.inithose (hosename), now = clock.now ());
	on decode (s) { //12/2/10 by DW
		return (xml.entitydecode (s, true, flSkipMalformedEntities:true, flDecodeHexEntities:false))};
	adrhose^.stats.lastx = adrx^;
	local (title = decode (xml.getvalue (adrx, "title")));
	if not defined (adrhose^.outline) {
		new (outlinetype, @adrhose^.outline)};
	local (oldtarget = target.set (@adrhose^.outline));
	<<local (oldcursor = op.getcursor ())
	op.firstsummit ();
	<<speaker.sound (3, 10, 9000)
	bundle { //add main headline
		local (time = date.timestring (now, false) - " ");
		local (feedtitle = decode (xml.getvalue (adrx, "feedTitle")));
		if string.lower (hosename) == "nytimes" {
			feedtitle = string.trimwhitespace (string.nthfield (feedtitle, ">", 2));
			feedtitle = string.replace (feedtitle, "Most Recent Headlines", "Realtime Feed")};
		op.insert (time + ": " + title + " (" + feedtitle + ")", up)};
	bundle { //add description
		local (flhavedescription = false);
		try {
			op.insert (decode (xml.getvalue (adrx, "description")), right);
			flhavedescription = true};
		bundle { //add attributes
			try {
				local (atts);
				new (tabletype, @atts);
				atts.type = "link";
				atts.title = title;
				atts.url = xml.getvalue (adrx, "link");
				op.attributes.addgroup (@atts)}};
		if flhavedescription {
			op.go (left, 1);
			op.collapse ()}};
	<<op.setcursor (oldcursor)
	target.set (oldtarget)};
	<<speaker.sound (3, 10, 6000)
bundle { //test code
	itemArrived ("hackerNews", @config.feedhose.client.hoses.hackerNews.calendar.["2010"].["12"].["03"].["00018"])}



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.