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

system.verbs.builtins.radio.cloud.getInitialResources

on getInitialResources (adrCloudInfo=@user.radio.prefs.defaultCloud) {
	<<Changes
		<<5/14/02; 6:36:11 PM by JES
			<<If the server doesn't return a themesDirectoryOpml url, set radio.data.cloudUrls.themesDirectoryOpml to the empty string.
		<<3/20/02; 4:52:48 PM by JES
			<<Only apply the default theme if this is a fresh install -- if user.radio.prefs.usernum is defined.
		<<3/11/02; 4:08:29 PM by JES
			<<Moved to the cloud sub-table.
		<<3/10/02; 10:43:43 PM by JES
			<<Commented out debugging code.
		<<3/10/02; 10:40:29 PM by JES
			<<Make the getInitialResources RPC call in a try block, in case the server doesn't understand the message -- for backward-compatibility.
		<<3/10/02; 10:39:10 PM by JES
			<<Make sure that the rpcPath begins with a slash-character.
		<<3/10/02; 2:18:39 PM by JES
			<<Factored from radio.bootstrap. Now we synchronize themes, and apply the default theme, if it exists. We also set the commentsPageUrl, if defined in the initialResources return struct.
		<<3/1/02; 11:38:27 AM by JES
			<<Perform all of the bootstrapping needed to connect to a community for the first time.
	
	local (rcsServer, rcsPort, rcsProtocol, rcsRpcPath);
	with adrCloudInfo^ { //get cloud info
		rcsServer = server;
		rcsPort = port;
		rcsProtocol = protocol;
		rcsRpcPath = rpcPath;
		if not (rcsRpcPath beginsWith "/") {
			rcsRpcPath = "/" + rcsRpcPath}};
		<<bundle //old hard-coded values
			<<rcsServer = "subhonker7.userland.com"
			<<rcsPort = 80
			<<rcsProtocol = "xml-rpc"
			<<rcsRpcPath = "/RPC2"
	local (rcs = string.dropNonAlphas (rcsProtocol) + "://" + rcsServer + ":" + rcsPort + rcsRpcPath);
	local (initialResources); new (tableType, @initialResources);
	<<initialResources = [rcs].radioCommunityServer.getInitialResources ()
	try {initialResources = [rcs].radioCommunityServer.getInitialResources ()}; //backward-compatible
	
	local (adrdata = radio.weblog.init ());
	
	on readOpmlUrl (url) { //like tcp.httpReadUrl, but passes flAcceptOpml as true
		local (urllist = string.urlsplit (url));
		return (string.httpResultSplit (tcp.httpClient (server:urllist [2], path:urllist [3], flAcceptOpml:true)))};
	
	bundle { //default stats group
		if rcsServer == "radio.xmlstoragesystem.com" {
			radio.data.staticSiteStats.groupName = "radio1"}
		else {
			radio.data.staticSiteStats.groupName = "default"}};
	bundle { //categories
		if defined (initialResources.defaultCategories) {
			local (categories);
			xml.compile (readOpmlUrl (initialResources.defaultCategories), @categories);
			local (nomad = xml.getAddress (@categories, "opml"));
			nomad = xml.getAddress (nomad, "body");
			nomad = xml.getAddress (nomad, "outline");
			local (adr);
			for adr in nomad {
				if (nameOf (adr^) == "/atts") {continue};
				local (catname = xml.getAttributeValue (adr, "text"));
				if defined (adrdata^.categories.[catname]) {continue};
				local (description = "Describe this category here.");
				try {description = xml.getAttributeValue (adr, "description")};
				local (flRenderHtml = false);
				try {flRenderHtml = boolean (xml.getAttributeValue (adr, "flRenderHtml"))};
				local (language = "en-us");
				try {language = boolean (xml.getAttributeValue (adr, "language"))};
				local (flNotifyWeblogsCom = true);
				try {flNotifyWeblogsCom = boolean (xml.getAttributeValue (adr, "flNotifyWeblogsCom"))};
				radio.weblog.newCategory (catname, description, flRenderHtml, language, flNotifyWeblogsCom)}}
		else {
			on initCategory (catname) {
				radio.weblog.newCategory (catname, "Describe this category here.")};
			initCategory ("My Friends");
			initCategory ("My Hobbies");
			initCategory ("My Interests");
			initCategory ("My Organization");
			initCategory ("My Profession")}};
	bundle { //comments page
		if defined (initialResources.commentsPageUrl) {
			radio.data.cloudUrls.commentsPageUrl = initialResources.commentsPageUrl;
			local (adrblog = radio.weblog.init ());
			adrblog^.prefs.commentsPageUrl = initialResources.commentsPageUrl}};
	bundle { //themes
		if defined (initialResources.themesDirectory) {
			radio.data.cloudUrls.themesDirectoryOpml = initialResources.themesDirectory}
		else { //this server doesn't supply Themes -- set to the empty string
			radio.data.cloudUrls.themesDirectoryOpml = ""};
		if not defined (user.radio.prefs.usernum) {
			radio.theme.updateThemes ()}};
	bundle { //apply default theme
		local (f = radio.theme.getThemeFilePath ("default"));
		if file.exists (f) {
			local (theme);
			radio.theme.importThemeFile (f, @theme);
			radio.theme.apply.main (@theme)}};
	bundle { //rss feeds
		if defined (initialResources.defaultFeeds) {
			radio.data.cloudUrls.aggregatorBootstrap = initialResources.defaultFeeds};
		if radio.data.flDoInitialScan { //read default subscriptions, and run the first news scan
			radio.data.flDoInitialScan = false;
			thread.callScript (@xml.aggregator.bootstrap, {radio.data.cloudUrls.aggregatorBootstrap})}};
	
	return (initialResources)};

<<bundle //testing
	<<local (cloudInfo = user.radio.prefs.defaultCloud)
	<<cloudInfo.server = "127.0.0.1"
	<<cloudInfo.port = "8888"
	<<getInitialResources (@cloudInfo)



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.