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

system.verbs.builtins.radio.utilities.backup

<<Changes
	<<11/21/01; 6:35:23 PM by JES
		<<Changed smurf references to radio71 references.
semaphore.lock ("radio.upstream", 7200); //lock for two minutes
window.about ();
local (oldRunThreads = user.scheduler.prefs.runThreads);
user.scheduler.prefs.runThreads = false;
scheduler.monitorThreads ();

radio.data.flinstall = true;
table.emptytable (@radio.data.website.["#glossary"]);
radio.utilities.systemFolderTextFiles.save ();
radio.utilities.homeFolderTextFiles.save ();

local (pc = file.getPathChar ());
local (folder = user.radio.prefs.wwwfolder + "system" + pc + "upstream" + pc);
if defined (user.prefs.radio71BackupFolder) {
	folder = user.prefs.radio71BackupFolder};

bundle { //save smurfTurfInstaller
	local (f = folder + "smurfTurfInstaller.ftsc");
	workspace.radio71Installer = radio.utilities.radio71Installer;
	file.surefilepath (f);
	export.sendobject (@workspace.radio71Installer, f)};

<<bundle //Dave's backup code
	<<local (downloadsfolder = "I:\\Guest Databases\\www\\downloads\\") //on Pebbles, http://64.220.161.55/
	<<bundle //copy data files
		<<local (f)
		<<fileloop (f in "c:\\program files\\radio userland\\guest databases\\ops\\datafiles\\")
			<<msg (f)
			<<file.copy (f, "c:\\program files\\radio userland\\www\\downloads\\" + file.filefrompath (f))

local (backupsfolder = Frontier.pathString + "backups" + pc + "Radio UserLand 7.1" + pc, archives = backupsfolder + "archives" + pc, f);
<<bundle //move all non-folders into the archives folder
	<<file.sureFilePath (archives)
	<<file.sureFolder (archives)
	<<fileloop (f in folder)
		<<if not file.isfolder (f)
			<<if string.lower (f) endsWith ".fttb" or string.lower (f) endsWith ".ftsc"
				<<msg (f)
				<<file.copy (f, archives + file.filefrompath (f))
				<<file.delete (f)

on dobackup (adr) {
	local (extension);
	bundle { //get file extension
		case typeOf (adr^) {
			tableType {
				extension = ".fttb"};
			scriptType {
				extension = ".ftsc"}}};
	<<local (fname = (string (adr) - "system.verbs.") + string.padwithzeros (scratchpad.radiobackupserialnum, 3) + extension)
	local (fname);
	bundle { //build fname
		fname = string.popFileFromAddress (adr);
		on popFirstField (s) {
			return (s - (string.nthField (fname, '.', 1) + "."))};
		while string.countFields (fname, '.') > 2 {
			fname = popFirstField (fname)};
		if sizeOf (fname) > 26 {
			fname = popFirstField (fname)};
		if sizeOf (fname) > 26 {
			fname = string.mid (fname, 1, 26)};
		fname = fname + extension};
	local (f = folder + fname);
	msg (f);
	file.surefilepath (f);
	if file.exists (f) {
		file.delete (f)};
	export.sendobject (adr, f)};
	<<bundle //export to downloadsfolder
		<<f = downloadsfolder + (string (adr) - "system.verbs.") + ".fttb"
		<<msg (f)
		<<file.surefilepath (f)
		<<export.sendobject (adr, f)
bundle { //do the backups
	dobackup (@agents.statusMessage);
	try {
		dobackup (@playlist.init)};
	dobackup (@weblogsCom);
	dobackup (@xmlStorageSystem);
	dobackup (@bookmarksMenu);
	dobackup (@chatClient);
	dobackup (@radio);
	dobackup (@file.getSpecialFolderPath);
	dobackup (@Frontier.clickers.typeOPML);
	dobackup (@Frontier.clickers.typeTEXT);
	dobackup (@html.prefs);
	dobackup (@html.editor);
	dobackup (@manila);
	dobackup (@op.rssToOutline);
	dobackup (@pike.init);
	dobackup (@pike.runFileMenuScript);
	dobackup (@pike.runEditMenuScript);
	dobackup (@scheduler.monitorThreads);
	dobackup (@startup.startupScript);
	dobackup (@tcp.httpClient);
	dobackup (@xml.aggregator);
	dobackup (@xml.rpc);
	dobackup (@Frontier.tools)};

user.scheduler.prefs.runThreads = oldRunThreads;
scheduler.monitorThreads ();

if not defined (scratchpad.radiobackupserialnum) {
	scratchpad.radiobackupserialnum = 0};
scratchpad.radiobackupserialnum++;
scratchpad.radiobackupdate = clock.now ();
msg ("");
semaphore.unlock ("radio.upstream")



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.