Monday, November 08, 2010 at 12:04 AM.

system.verbs.builtins.mainResponder.search.client.indexDiscussionMessage

on indexDiscussionMessage (adrStorage, flSpawnThread=true) {
	<<Add a discussion group message to the search engine.
	
	<<Get the address of the message reader page.
	
	local (adrMessages = parentOf (adrStorage^));
	local (adrRoot = parentOf (adrMessages^));
	local (adrPrefs = @adrRoot^.prefs);
	local (adrMsgReader);
	
	local (rootName = nameOf (adrRoot^));
	local (lowerRootName = string.lower (rootName));
	
	if not defined (adrPrefs^.adrMsgReader) {
		mainResponder.search.client.logNoIndex (adrStorage, "the address of the msgReader page isn't specified in the prefs for this discussion group.");
		return (true)};
	
	adrMsgReader = adrPrefs^.adrMsgReader;
	
	if not defined (adrMsgReader) {
		mainResponder.search.client.logNoIndex (adrStorage, "adrMsgReader, in the prefs for this discussion group, points to a page that doesn't exist.");
		return (true)};
	
	<<Index the msgReader-type page.
	
	mainResponder.search.client.index (adrMsgReader, true, adrStorage);
	
	<<Handle alsoListedIn.
	
	if defined (adrStorage^.alsoListedIn) {
		local (i);
		
		<<Loop through each alsoListedIn category, and find and index each page.
		for i = 1 to sizeOf (adrStorage^.alsoListedIn) {
			local (site = adrStorage^.alsoListedIn [i]);
			local (adrStory);
			if not defined (config.mainResponder.search.sites.[site]) {
				mainResponder.search.client.logNoIndex (adrStorage, "the alsoListedIn site " + site + " has no table in config.mainResponder.search.sites.");
				continue};
			local (adrSiteTable = @config.mainResponder.search.sites.[site]);
			if not defined (adrSiteTable^.adrStories) {
				mainResponder.search.client.logNoIndex (adrStorage, "the site table for site " + site + " has no adrStories element.");
				continue};
			local (adrStoriesTable = adrSiteTable^.adrStories);
			if not defined (adrStoriesTable^) {
				mainResponder.search.client.logNoIndex (adrStorage, adrStoriesTable + ", referenced from the config.mainResponder.search.sites table for site " + site + ", is not defined.");
				continue};
			local (flFound = false);
			on checkTable (adrTable) {
				local (j);
				for j = 1 to sizeOf (adrTable^) {
					if flFound {
						break};
					local (adrItem = @adrTable^ [j]);
					if html.traversalSkip (adrItem) {
						continue};
					if defined (adrItem^.msgNum) and defined (adrItem^.discussionRoot) {
						if string.popLeading (adrItem^.msgNum, '0') == string.popLeading (nameOf (adrStorage^), '0') {
							if string.lower (adrItem^.discussionRoot) == lowerRootName {
								adrStory = adrItem;
								flFound = true;
								continue}}};
					if typeOf (adrItem^) == tableType {
						checkTable (adrItem);
						continue}}};
			checkTable (adrStoriesTable);
			if not flFound {
				mainResponder.search.client.logNoIndex (adrStorage, "the indexer couldn't find the story with a msgNum of " + nameOf (adrStorage^))}
			else { //the page has been found, index it
				mainResponder.search.client.index (adrStory, adrSiteTable:adrSiteTable)}}};
	
	return (true)}



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.