Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.rootUpdates.getUpdate
on getUpdate (serverName) {
<<This script is now obsolete: use rootUpdates.update instead.
<<Mon, Feb 22, 1999 at 5:44:28 PM by PBS
local (frontierVersion = Frontier.version ());
local (platform = string.mid (sys.os (), 1, 3));
local (ctnewparts = 0, adrPrefs);
local (flDialogs = true);
rootUpdates.init ();
adrPrefs = @user.rootUpdates.servers.[serverName];
if defined (adrPrefs^.dialogs) and not adrPrefs^.dialogs {
flDialogs = false};
if not defined (user.prefs.serialNumber) {
user.prefs.serialNumber = ""};
try { //try to get the root update from the server
if flDialogs {
if not dialog.confirm ("Connect with " + adrPrefs^.server + " to get latest update?") {
return (false)}};
window.about ();
local (paramlist = {adrPrefs^.lastupdate, platform, user.prefs.serialNumber, user.prefs.name, user.prefs.mailAddress, frontierVersion});
local (newpartstable);
local (i);
msg ("Connecting to " + adrPrefs^.server + " to get " + serverName + " update...");
newpartstable = betty.rpc.client (adrPrefs^.server, adrPrefs^.port, adrPrefs^.method, @paramlist, false);
if not defined (newPartsTable.parts) {
if newPartsTable beginsWith "There are no new or changed parts available." or newPartsTable beginsWith "Your root is already updated" {
msg ("");
if flDialogs {
dialog.notify (newPartsTable)}
else {
msg (newPartsTable)};
return (true)}};
if adrPrefs^.autobackup {
backups.backuproot ()};
for i = 1 to sizeof (newpartstable.parts) {
local (adrnewpart = @newpartstable.parts [i]);
local (bytes = binary (base64.decode (adrnewpart^)));
local (flpartinstalled = true);
setBinaryType (@bytes, tableType);
unpack (@bytes, adrnewpart);
on installPart (adrpart) {
on cleanNote (s) {
s = string.replaceAll (s, "\r\n", "\r");
s = string.replace (s, ": ", ":\r");
s = string.replaceAll (s, ". ", ".\r");
s = string.replaceAll (s, "-- ", "--\r");
s = "Changed " + s;
s = string.replaceAll (s, "\r\r\r\r", "\r\r");
s = string.replaceAll (s, "\r\r\r", "\r\r");
s = string.popTrailing (s, "\r");
return (s)};
if defined (user.rootUpdates.protected) { //Don't import into these places.
local (j);
for j = 1 to sizeOf (user.rootUpdates.protected) {
local (oneItem = address (user.rootUpdates.protected [j]));
if table.tableContains (oneItem, adrpart^.adr) { //Don't install.
flpartinstalled = false;
return (true)}}};
if defined (adrpart^.platform) {
if string.lower (adrpart^.platform) != "both" { // Only install parts for this platform.
if string.lower (adrpart^.platform) != string.lower (platform) {
return (true)}}};
try {
msg ("Importing " + adrpart^.adr + ".");
adrpart^.adr^ = adrpart^.data}
else {
flpartinstalled = false;
if flDialogs {
if not dialog.yesNo ("Installation of \"" + adrpart^.adr + "\" failed. Continue installation?") {
return (false)}}};
export.addToLog (adrpart^.adr, adrPrefs^.url, cleanNote (string (adrpart^.changes)));
return (true)};
if not installPart (adrnewpart) {
break};
if flpartinstalled {
ctnewparts++}};
adrPrefs^.lastUpdate = date.netStandardString (clock.now ());
adrPrefs^.serialNum = newPartsTable.serialNum;
menu.installMainMenu ();
system.menus.buildSuitesSubMenu (); //re-build in case any new suites were imported.
msg ("Saving Frontier.root...");
fileMenu.save ();
msg ("");
thread.sleepFor (0);
if ctnewparts == 1 {
if flDialogs {
dialog.alert ("1 new part loaded from \"" + adrPrefs^.server + "\".")}
else {
msg ("1 new part loaded from \"" + adrPrefs^.server + "\".")}}
else {
if flDialogs {
dialog.alert (ctnewparts + " new parts loaded from \"" + adrPrefs^.server + "\".")}
else {
msg (ctnewparts + " new parts loaded from \"" + adrPrefs^.server + "\".")}};
if adrPrefs^.openLog {
if not defined (user.prefs.frontierIsServer) {
user.prefs.frontierIsServer = false};
if not (user.prefs.frontierIsServer) {
edit (@user.export.importLog)}}}
else { //handle errors
on alert (message) {
if flDialogs {
return (dialog.alert (message))};
scriptError (message)};
local (lowerError = string.lower (tryerror));
local (errmsg = "Can't update the root because ");
case true {
lowerError contains "socket is not connected" {
alert (errmsg + "the server is not responding.")};
lowerError contains "can't get the address of";
lowerError contains "poorly formed xml text";
lowerError contains "missing tag" {
alert (errmsg + "the server timed out.")}}
else {
alert (errmsg + "\"" + tryError + ".\"")};
return (false)};
return (true)}
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.