Update Camino to latest nightly without losing open tab URLs.

-- "This script gets the URLs on each of the open tabs in a single Camino window, then calls CaminoKnight to update to the latest nightly build of Camino if there is one, repopulating the saved tabs in a new window of the latest nightly or the current version of Camino iif there isn't a new nightly."
-- "The script requires that CaminoKnight is set to Auto Start and to Quit when done, but NOT to launch Camino again (the middle check box) - that is done by the script."

set theTabs to getTabs()

tell application "CaminoKnight"
	delay 5 -- wait for CK to open rather than testing for it. 
	-- Note: this is a weakness in this script. If CaminoKnight has trouble connecting (i.e. takes more than 5 seconds and your version of Camino is current so a dialog is coming),  the script will still move on. If a dialog is posted after 5 seconds, then either the user has to click "Quit" or we wait for CK to quit by itself (20 seconds). Either way, when it quits, we reopen the tabs.
	-- Test to see if there is a dialog box -- meaning no new nightly yet -- then dismiss the dialog (with the default "Quit" button). Key Code 76 is "Enter" {keystroke (ASCII character 3) doesn't seem to work on this dialog}.
	if (name of window 1 is "dialog1") then
		tell application "System Events" to key code 76 -- dismiss the dialog
		my openTabs(theTabs)
		return -- we're done
	end if
end tell

-- If there is no dialog box, wait for CaminoKnight to install the new nightly over the older version (CK quits the old Camino itself). CK quits itself automatically (set in its preferences to do so). Restart Camino with the saved tabs when CK quits.

tell application "System Events"
		if exists process "CaminoKnight" then
			delay 2
			exit repeat
		end if
	end repeat
end tell
delay 3


to getTabs()
	set TabURLs to {}
	tell application "Camino"
		-- get the tab URLs. Camino is not very scriptable. There is no way to find out how many tabs are open, for example, so getting the URL of the front window returns the URL of whichever tab has focus and the only way to get them all is to close them. Eventually that closes the window and the repeat loop errors out.
				set aURL to URL of front window
				tell application "System Events" to keystroke "w" using {command down}
				if aURL is not in TabURLs then set end of TabURLs to aURL
			on error -- No more tabs to get when Cmd-w has closed Camino's window.
				exit repeat
			end try
		end repeat
	end tell
	return TabURLs
end getTabs

to openTabs(tabList)
	tell application "Camino" to activate
	if (count of tabList) = 0 then return
	set tabCount to count of tabList
	repeat with k from 1 to tabCount
		open location (item k of tabList)
	end repeat
end openTabs