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

system.verbs.builtins.radio.upstream.oldstuff.uploadMultipleFiles

on uploadMultipleFiles (filelist) {
	<<Changes
		<<Wednesday, September 20, 2000 at 3:32:33 PM by DW
			<<Delete temporary debugging code.
			<<On Macintosh, replace colons with backslashes in relativePath elements.
		<<Thursday, September 21, 2000 at 2:28:39 PM by JES
			<<Replace the path character with forward slashes, not backslashes, since the server is expecting a forward-slash-delimited relative path.
			<<The reason why it was working on windows, even without this is that the server is a windows computer, so the delimiter was already correct. If the server had been a Macintosh, then Mac users would have been fine, and the bug would have been reported by Windows users.
		<<Sunday, September 24, 2000 at 7:23:04 PM by JES
			<<Cosmetic change to msg text.
		<<10/17/00; 6:07:34 PM by PBS
			<<If the password or username are empty, don't attempt to upstream, generate a scriptError.
		<<Friday, December 29, 2000 at 9:10:16 AM by DW
			<<Added logging code.
		<<12/30/00; 7:36:46 PM by DW
			<<Move the logging code into radio.log.add, call it.
		<<12/30/00; 9:30:46 PM by DW
			<<Pass startticks to radio.log.add.
		<<1/3/01; 8:04:43 PM by DW
			<<Added callback support.
		<<1/22/01; 11:04:06 AM by DW
			<<Set user.radio.settings.wwwUpstreamFolderUrl after every upstream event.
		<<2/10/01; 9:54:06 PM by DW
			<<Raise the timeout to sixty seconds. Some people have slow connections or might be far away from the cloud. Let's give this a try.
		<<2/12/01; 1:27:52 PM by DW
			<<Make timeout a pref.
	<<bundle //debugging code
		<<if not defined (system.temp.radio.upstream)
			<<new (tabletype, @system.temp.radio.upstream)
		<<system.temp.radio.upstream.lastfilelist = filelist
	local (startticks = clock.ticks ());
	local (timeout = user.radio.prefs.upstream.timeoutSeconds * 60);
	local (f, relativePathList = {}, fileTextList = {}, s, pc = file.getPathChar ());
	for f in filelist {
		s = string.delete (string (f), 1, sizeof (user.radio.prefs.upstream.folder));
		s = string.replaceAll (s, pc, '/');
		relativePathList = relativePathList + {s};
		fileTextList = fileTextList + radio.upstream.getUpstreamText (f)};
	local (useremail, userpassword);
	with user.radio.prefs.upstream.account {
		bundle { //error checking
			if email == "" {
				scriptError ("Can't upstream because your email address has not been specified.")};
			if password == "" {
				scriptError ("Can't upstream because your password has not been specified.")};
			useremail = email;
			userpassword = password}};
	local (flerror, message, urllist, logdata);
	new (tabletype, @logdata);
	logdata.filelist = filelist;
	bundle { //make the xml-rpc call
		if sizeof (filelist) == 1 {
			msg ("Upstreaming " + filelist [1] + ".")}
		else {
			msg ("Upstreaming " + sizeof (filelist) + " files.")};
		try {
			xmlStorageSystem.writeMultipleFiles (useremail, userpassword, relativepathlist, filetextlist, @response, adrdata:@user.radio.prefs.upstream.xmlStorageSystem);
			<<response = betty.rpc.client (server, port, saveMultipleProcedure, @params, flShowMessages:false, ticksToTimeOut:timeout)
			flerror = response.flerror;
			message = response.message;
			urllist = response.urllist;
			user.radio.settings.wwwUpstreamFolderUrl = response.yourUpstreamFolderUrl;
			logdata.response = response}
		else {
			flerror = true;
			message = tryerror;
			urllist = {}};
		msg ("")};
	bundle { //logging
		if user.radio.prefs.upstream.logging {
			local (htmltext = "");
			if flerror {
				htmltext = "Error: " + message}
			else {
				local (url);
				for url in urllist {
					htmltext = htmltext + "<a href=\"" + url + "\">" + string.nthfield (url, "/", string.countfields (url, "/")) + "</a>, "};
				htmltext = string.delete (htmltext, sizeof (htmltext) -  1, 2) + " copied to the cloud."};
			radio.log.add ("Upstream", htmltext, startticks, @logdata)}};
	bundle { //call the callbacks, if present
		local (adr, adrcallbacks = @user.radio.callbacks.upstream);
		if defined (adrcallbacks^) {
			for adr in adrcallbacks {
				while typeof (adr^) == addresstype {
					adr = adr^};
				try {adr^ (filelist)}}}};
	return (urllist)};
bundle { //test code
	local (filelist = {"C:\\Program Files\\Radio UserLand\\www\\stories\\2001\\05\\13\\thisIsAlsoATestStory.opml", "C:\\Program Files\\Radio UserLand\\www\\stories\\2001\\05\\13\\testStory.opml"});
	dialog.alert (uploadMultipleFiles (filelist))}



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.