Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.utilities.systemFolderTextFiles.install
<<Changes <<12/20/01; 1:28:37 AM by JES <<Use file.writeTextFile to write the files to disk, instead of file.writeWholeFile. This also removes the necessity for a bunch of code used to calculate Mac type/creator codes and line-endings. <<12/13/01; 4:34:37 PM by JES <<On MacOS X, write text files with a type of ' ' and a creator of 'text'. <<11/30/01; 12:59:47 PM by JES <<Write the files with the line-ending native to the platform. <<10/17/01; 1:41:42 AM by JES <<Delete any obsolete files. A file is obsolete if it's not defined at radio.data.systemFolderTextFiles.[relativePath], where relativePath is a slash-delimited path starting in the www/system/ sub-folder. <<6/18/01; 9:13:42 AM by DW <<This runs every time we do an install. Make sure the contents of the system folder is in synch with the one in the object database. local (adrtable = @radio.data.systemFolderTextFiles); local (systemfolder = user.radio.prefs.wwwfolder + radio.data.folderNames.wwwSystemSubfolderName + file.getpathchar ()); local (adr); for adr in adrtable { //install any files that don't exist or have been changed local (objectname = string.replaceall (nameof (adr^), "/", file.getpathchar ())); local (f = systemfolder + objectname); file.surefilepath (f); <<local (macCreator, macType) <<if system.environment.isCarbon //on MacOS X, creator is TextEdit, type is ' ' <<macCreator = 'text' <<macType = ' ' <<else //for Classic, creator is SimpleText, type is 'TEXT' <<macCreator = 'ttxt' <<macType = 'TEXT' <<bundle //set the mac type and creator <<local (extension = string.lower (string.nthField (objectname, '.', string.countFields (objectname, '.')))) <<case extension <<"opml" <<macCreator = Frontier.id <<macType = 'OPML' <<"html" <<macCreator = user.html.prefs.textFileCreator local (flinstall = true); if file.exists (f) { if timemodified (adr) == file.modified (f) { flinstall = false}}; if flinstall { <<local (eol = "\r\n") <<if system.environment.isMac //set eol <<if system.environment.isCarbon // eol is \n <<eol = "\n" <<else // eol is \r <<eol = "\r" <<local (filetext = string (adr^)) <<bundle //convert to native line-endings <<filetext = string.replaceAll (filetext, "\r\n", "\r") <<filetext = string.replaceAll (filetext, "\n", "\r") <<filetext = string.replaceAll (filetext, "\r", eol) <<file.writewholefile (f, filetext, macType, macCreator) file.writeTextFile (f, string (adr^)); file.setmodified (f, timemodified (adr)); file.setcreated (f, timecreated (adr))}}; <<else //on the mac, make sure the type and creator code are correct <<if system.environment.isMac <<file.setType (f, macType) <<file.setCreator (f, macCreator) local (f); fileloop (f in systemfolder, infinity) { //delete any files that should be deleted if f beginsWith user.radio.prefs.upstream.folder { continue}; if radio.webserver.getfilemimetype (f) beginswith "text" { local (objectname = string.delete (f, 1, sizeof (systemfolder))); objectname = string.replaceall (objectname, file.getpathchar (), "/"); local (adrobject = @radio.data.systemFolderTextFiles.[objectname]); if not defined (adrobject^) { try {file.delete (f)}}}} //in a try because the file may be busy or locked
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.