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

<<10/6/01; 11:54:05 PM by JES
	<<This script changes your default upstream server to the new server at Radio.xmlStorageSystem.Com.
	<<Radio.xmlStorageSystem.Com will be the default server for all Radio UserLand 7.1 installations.
	<<The script first moves your weblog files into the www/system/upstream folder, and updates your weblog prefs.
	<<Next, it registers with the new xmlStorageSystem server, and creates a #upstream.xml file which points at your new account. The original #upstream.xml is backed up to #upstream.bkp.
	<<Last, it invalidates the upstream cache for all the files in the upstream folder, causing the files to be upstreamed to the new server.

local (server = "");
local (port = 80);
local (protocol = "xml-rpc");
local (rpcPath = "/RPC2");
local (soapAction = "/xmlStorageSystem");
local (passwordName = "defaultXssPassword");
bundle { //ask for a password if needed
	if string ([passwordName]) == "" {
		if not dialog.getPassword ("Enter a password for your upstream account:",[passwordName]) {
			return (false)}}};

local (upstreamFolder, upstreamRelativeFolder);
bundle { //get the absolute and relative path to the upstream folder
	upstreamRelativeFolder = + "/" + + "/";
	upstreamFolder = radio.file.getSubFolder (upstreamRelativeFolder)};
bundle { //move the weblog to the upstream folder, if necessary; update prefs
	local (adrblog = radio.weblog.init ());
	local (adrprefs = @adrblog^.prefs);
	local (weblogFolder, homePageFileName, rssFileName);
	bundle { //calculate the original weblog folder, and home page filename
		weblogFolder = adrprefs^.homePageFilePath;
		weblogFolder = string.popSuffix (weblogFolder, "/") + "/";
		homePageFileName = string.delete (adrprefs^.homePageFilePath, 1, sizeOf (weblogFolder));
		weblogFolder = string.popLeading (weblogFolder, "/");
		weblogFolder = radio.file.getAbsolutePath (weblogFolder)};
	if weblogFolder != upstreamFolder { //move all the files to the upstream folder
		local (pc = file.getPathChar ());
		on moveFile (fname) {
			local (f = weblogFolder + fname);
			if file.exists (f) {
				file.move (f, upstreamFolder)}};
		moveFile (homePageFileName);
		moveFile ("rss.xml");
		moveFile ("categories" + pc);
		moveFile ("2001" + pc);
		moveFile ("2000" + pc);
		moveFile ("1999" + pc)};
	bundle { //update prefs
		adrprefs^.homePageFilePath = upstreamRelativeFolder + homePageFileName;
		adrprefs^.rssFilePath = upstreamRelativeFolder + "rss.xml";
		adrprefs^.rssCategoryFolderPath = upstreamRelativeFolder + "categories/"}};

local (upstreamSpecPath = upstreamFolder +;
bundle { //make a backup of the existing #upstream.xml
	local (backupFileName = "#upstream_backup.txt");
	local (backupPath = upstreamFolder + backupFileName);
	if file.exists (backupPath) {
		file.delete (backupPath)};
	if file.exists (upstreamSpecPath) {
		file.rename (upstreamSpecPath, backupFileName)};
	if file.exists (upstreamFolder + "#upstream.bkp") { //this will confuse the upstreaming code -- delete the file.
		file.delete (upstreamFolder + "#upstream.bkp")}};

local (greeting);
bundle { //register with the new server
	local (data, response);
	bundle { //init the data table
		new (tableType, @data);
		data.server = server;
		data.port = port;
		data.protocol = protocol;
		data.rpcPath = rpcPath;
		data.soapAction = soapAction;
		data.flDebug = false};
	if not xmlStorageSystem.register (user.prefs.mailAddress,[passwordName],, @greeting, @data, @response) {
		scriptError ("Can't register with " + server + " because the server returned an error: \"" + greeting + "\".")}; = response.usernum};
bundle { //write out the new spec
	local (adrdriver);
	radio.upstream.findDriver ("xmlStorageSystem", @adrdriver);
	adrdriver^.saveUpstreamSpec (upstreamSpecPath, string (,, passwordName, protocol, server, port)};
bundle { //invalidate cache
	local (adr);
	for adr in {
		local (name = nameOf (adr^));
		if name beginsWith upstreamFolder {
			adr^.modified = date (0);
			if defined (adr^.upstream) {
				adr^.upstream.url = "";
				adr^.upstream.whenLastUploaded = date (0)}}}};

dialog.alert ("The server said: " + greeting + ".")

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.