Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.Manila.windowTypes.types.manilaMessage.openMessage
on openMessage (siteurl, msgnum, flHidden=false, flHomePage=false, adradrwindow=nil) { <<Open a message in a Manila site. <<Changes <<3/11/02; 11:56:46 AM by JES <<If this is a Mac, and the message is opml, convert to Mac text. bundle { //if the window is already open, bring it to the front local (t); new (tableType, @t); local (adrtype = parentOf (this^)); t.type = nameOf (adrtype^); t.msgnum = msgnum; manila.windowTypes.findSiteInfo (siteurl, @t.adrSiteInfo); local (adrwindow); if Frontier.tools.windowTypes.findWindowWithMatchingAtts (@t, @adrwindow) { local (title, flReadOnly = false); window.attributes.getOne ("title", @title, adrwindow); window.attributes.getOne ("flReadOnly", @flReadOnly, adrwindow); if not flHidden { edit (adrwindow, title, flReadOnly)}; return (true)}}; local (username, password); on createInfoCallback (adrinfo) { if manila.windowTypes.getUsernameAndPassword (adrinfo, @username, @password) { manila.windowTypes.setUsernameAndPassword (adrinfo, username, password)} else { bundle { //don't leave stale data lying around local (adrtempinfo = @system.temp.manila.data.sites.[nameOf (adrinfo^)]); if defined (adrtempinfo^) {delete (adrtempinfo)}; delete (adrinfo)}; return (false)}}; local (adrinfo); if not manila.windowTypes.findSiteInfo (siteUrl, @adrinfo, @createInfoCallback) { return (false)}; //the user cancelled the username/password dialog bundle { //get the site name and displaySiteName if we need them if adrinfo^.siteName == "" { adrinfo^.siteName = manila.getSiteName (nameOf (adrinfo^))}; if adrinfo^.displaySiteName == "" { adrinfo^.displaySiteName = adrinfo^.siteName}}; manila.windowTypes.getUsernameAndPassword (adrinfo, @username, @password); local (siteinfo = adrinfo^); siteinfo.username = username; siteinfo.password = password; local (msg = manila.message.get (@siteinfo, msgnum)); //get the message from the server bundle { //update server info if defined (msg.flServerAcceptsOpml) { adrinfo^.flServerAcceptsOpml = msg.flServerAcceptsOpml}; if defined (msg.displaySiteName) { adrinfo^.displaySiteName = msg.displaySiteName}}; local (windowTitle = adrinfo^.displaySiteName + ": " + msg.subject); local (flReadOnly = false); //the server doesn't support this, but there may be need in the future local (adr = Frontier.tools.windowTypes.newWindow ("manilaMessage", true, windowTitle)); window.attributes.setOne ("adrSiteInfo", adrinfo, adr); bundle { //put the message text in the window local (bodyType = "text/html"); if defined (msg.bodyType) { bodyType = msg.bodyType}; case bodyType { "text/html" { op.newOutlineObject (msg.body, adr)}; "text/x-outline-tabbed" { op.newOutlineObject (msg.outline, adr)}; "text/x-opml" { if defined (msg.opml) { local (opmltext = msg.opml); if system.environment.isMac { opmltext = latinToMac.convert (opmltext)}; op.xmlToOutline (opmltext, adr)} else { op.newOutlineObject (msg.body, adr)}}}; if defined (msg.windowInfo) { manila.windowTypes.restoreWindowState (adr, @msg.windowInfo)}; if defined (msg.flReadOnly) { flReadOnly = msg.flReadOnly}}; bundle { //set window attributes local (atts); new (tableType, @atts); atts.subject = msg.subject; atts.msgnum = msg.msgnum; atts.inResponseTo = msg.inResponseTo; atts.responses = msg.responses; atts.flAddToStoriesList = false; //if it's already a story, we don't need to add it again atts.timeCreated = msg.postTime; if defined (msg.lastUpdate) { //set lastSaved and the window's timeModified local (lastSaved = msg.lastUpdate, now = clock.now ()); if msg.lastUpdate > now { //make sure lastSaved is not later than now lastSaved = now}; atts.lastSaved = lastSaved; setTimeModified (adr, lastSaved)}; if defined (msg.url) { atts.url = msg.url}; if flHomePage { //get the home page url from the siteinfo table's name local (url = nameOf (adrinfo^)); local (parts = string.urlSplit (url)); if parts[2] contains ":" { if string.nthField (parts[2], ':', 2) == "80" { url = parts[1] + string.nthField (parts[2], ':', 1) + "/" + parts[3]}}; atts.url = url}; if defined (msg.rendererInfo) { atts.rendererInfo = msg.rendererInfo}; if defined (msg.member) { atts.authorEmail = msg.member}; if defined (msg.memberName) { atts.authorName = msg.memberName}; if defined (msg.ctReads) { atts.ctReads = msg.ctReads}; window.attributes.addGroup (@atts, adr)}; manila.message.checkOut (adrinfo, msgnum); if not flHidden { //open the window edit (adr, windowTitle, flReadOnly)}; if adradrwindow != nil { adradrwindow^ = adr}; return (true)}; bundle { //debugging openMessage ("http://test.w2k.jspace.org/", 3)}
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.