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

system.verbs.builtins.radio.theme.apply.textFiles

on textFiles (adrTheme, folder=user.radio.prefs.wwwFolder) {
	<<Changes
		<<2/23/02; 7:58:33 PM by JES
			<<Don't save #prefs files stored in the Theme. This fixes a problem with applying Themes to category sub-folders, where the #categoryName directive would be overwritten when the #prefs file is saved. A corresponding change is in radio.theme.create.textFiles, where #prefs files are not saved with the Theme.
		<<1/1/02; 10:37:42 PM by JES
			<<Delete #homeTemplate.* and #subTemplate.* before applying the Theme's text files, since the Theme might not contain those files.
		<<12/30/01; 7:29:59 PM by JES
			<<Apply the templates and #prefs files stored in the Theme table at adrTheme, to the specified folder.
	
	local (adrFiles = @adrTheme^.textFiles);
	local (adrFile);
	bundle { //delete #homeTemplate and #subTemplate -- a Theme might not contain them
		on deleteFileIgnoringExtension (fname) {
			local (fileToDelete);
			if radio.file.locateFileIgnoringExtension (folder + fname, @fileToDelete) {
				file.delete (fileToDelete)}};
		deleteFileIgnoringExtension ("#homeTemplate.txt");
		deleteFileIgnoringExtension ("#subTemplate.txt")};
	for adrFile in adrFiles {
		local (fname = nameOf (adrFile^));
		if string.lower (fname) beginsWith "#prefs." {
			continue};
		local (f = folder + fname);
		if file.exists (f) { //skip files which already exist, and haven't changed
			if file.modified (f) == timeModified (adrFile) {
				if file.created (f) == timeCreated (adrFile) {
					continue}}};
		local (fileToReplace);
		if radio.file.locateFileIgnoringExtension (f, @fileToReplace) {
			file.delete (fileToReplace)};
		file.writeTextFile (f, string (adrFile^));
		file.setCreated (f, timeCreated (adrfile));
		file.setModified (f, timeModified (adrfile))};
	
	return (true)};

bundle { //test code
	local (adrTheme = @scratchpad.testTheme);
	textFiles (adrTheme, user.radio.prefs.wwwFolder + "categories:jake'sTestChannel:")}



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.