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.