Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.Manila.nodeTypes.types.manilaDiscussContainer.expand
<<Changes <<Mon, Aug 21, 2000 at 5:34:19 PM by PBS <<Created. Expand a node that contains messages and/or other discuss containers. <<Saturday, September 30, 2000 at 10:57:10 AM by DW <<When expanding a "toplevel" subtype, add another node, "threads". <<Then add a "threads" branch to the case statement. <<9/17/01; 12:33:33 PM by JES <<Fixed a bug where discussion group nodes wouldn't be expanded, if the site contains only one year. local (oldTarget = target.set (window.frontmost ())); local (oldDisplay = op.getDisplay ()); op.setDisplay (false); local (flGoneRight = false); local (atts); op.attributes.getAll (@atts); local (baseDiscussUrl = atts.baseDiscussUrl); local (siteUrl = atts.siteUrl); local (adrinfo); local (username, password); on createInfoCallback (adrinfo) { if not (manila.windowTypes.getUsernameAndPassword (adrinfo, @username, @password)) { 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)}}; if not manila.windowTypes.findSiteInfo (siteUrl, @adrinfo, @createInfoCallback) { return (true)}; if adrinfo^.siteName == "" { adrinfo^.siteName = manila.getSiteName (nameOf (adrinfo^))}; local (siteprefs = manila.nodeTypes.attsToSitePrefsTable (@atts)); //a table for RPC calls if not manila.windowTypes.getUsernameAndPassword (adrinfo, @username, @password) { return (true)}; //user cancelled the dialog siteprefs.username = username; siteprefs.password = password; local (type = string.lower (atts.discussContainerType)); on addContainer (linetext, containerType, url, year=nil, month=nil, day=nil) { local (dir = down); if not flGoneRight { dir = right; flGoneRight = true}; op.insert (linetext, dir); local (atts); new (tableType, @atts); atts.type = "manilaDiscussContainer"; atts.discussContainerType = containerType; atts.url = url; atts.baseDiscussUrl = baseDiscussUrl; atts.siteUrl = siteUrl; if year != nil { atts.year = year}; if month != nil { atts.month = month}; if day != nil { atts.day = day}; manila.nodeTypes.addSitePrefsToAtts (adrinfo, @atts); op.attributes.addGroup (@atts)}; on addMessage (adrTable, flLastMessage=false) { <<scratchpad.msgtable = adrtable^ local (linetext = adrTable^.subject); local (author = adrTable^.memberName); if author != adrTable^.member { author = author + " (" + adrTable^.member + ")"}; linetext = linetext + " -- " + author; if system.environment.isMac { linetext = string.latinToMac (linetext)}; local (dir = down); if not flGoneRight { dir = right; flGoneRight = true}; op.insert (linetext, dir); adrTable^.siteUrl = siteUrl; adrTable^.baseDiscussUrl = baseDiscussUrl; adrTable^.type = "manilaMessageReadOnly"; adrTable^.flLastMessage = flLastMessage; manila.nodeTypes.addSitePrefsToAtts (adrinfo, adrTable); op.attributes.addGroup (adrTable)}; on passwordLoop (adrCallback) { //PBS 09/11/00: handle password errors loop { try { adrCallback^ (); //RPC method call return (true)} else { local (lowerError = string.lower (tryError)); if (lowerError contains "password") or (lowerError contains "not a member") { if not (manila.windowTypes.getUsernameAndPassword (adrinfo, @username, @password, true)) { return (false)}; manila.windowTypes.setUsernameAndPassword (adrinfo, username, password)} else { scriptError (tryError)}}}}; op.deleteSubs (); local (cursor = op.getCursor ()); on resetOpState () { op.setCursor (cursor); op.setDisplay (oldDisplay); try {target.set (oldTarget)}}; case type { "toplevel" { //it contains Current and year nodes <<Insert Current container. local (url = baseDiscussUrl); <<Insert years. local (years); on getYears () { <<Copied from suites.playlist.manila.rpc.getDiscussCalendarYears firstDate = manila.message.calendar.getFirstDate (@sitePrefs); lastDate = manila.message.calendar.getLastDate (@sitePrefs); local (firstYear = date.year (firstDate)); local (lastYear = date.year (lastDate)); if firstYear == lastYear { years = {firstYear}; return (true)}; years = {firstYear}; for i = (firstYear + 1) to lastYear - 1 { years = years + i}; years = years + lastYear; return (true)}; if not (passwordLoop (@getYears)) { resetOpState (); return (false)}; //user cancelled if years == nil { resetOpState (); return (false)}; addContainer ("Current", "current", url); addContainer ("Threads", "threads", url); local (oneYear, i); for i = sizeOf (years) downTo 1 { oneYear = years [i]; addContainer (oneYear, "year", url, year:oneYear)}}; //years don't really have URLs "current" { //get the message headers for the current day local (messageHeaders); on getMessageHeaders () { <<playlist.manila.rpc.getDiscussCurrentMessageHeaders (siteUrl, @messageHeaders) <<local (sitePrefs = suites.playlist.manila.getRpcInfoTableFromPrefs (siteUrl)) messageHeaders = manila.message.getCurrentHeaders (@siteprefs); return (true)}; if not (passwordLoop (@getMessageHeaders)) { resetOpState (); return (false)}; //user cancelled local (i); for i = 1 to sizeOf (messageHeaders) { local (flLastMessage = false); if i == 1 { flLastMessage = true}; addMessage (@messageHeaders [i], flLastMessage)}}; "threads" { //get the most recent top-level messages in the DG local (messageHeaders); on getMessageHeaders () { <<playlist.manila.rpc.getDiscussCurrentThreadsHeaders (siteUrl, @messageHeaders) <<scratchpad.messageHeaders = messageHeaders messageHeaders = manila.message.getCurrentThreads (@siteprefs)}; if not (passwordLoop (@getMessageHeaders)) { resetOpState (); return (false)}; //user cancelled local (i); for i = 1 to sizeOf (messageHeaders) { local (flLastMessage = false); if i == 1 { flLastMessage = true}; addMessage (@messageHeaders [i], flLastMessage)}}; "year" { //get the months in this year local (url = baseDiscussUrl); local (year); op.attributes.getOne ("year", @year); local (months); on getMonths () { <<months = suites.playlist.manila.rpc.getDiscussCalendarMonths (siteUrl, year) months = manila.message.calendar.getMonthsInYear (@siteprefs, year)}; if not (passwordLoop (@getMonths)) { resetOpState (); return (false)}; //user cancelled local (oneMonth, i); for i = sizeOf (months) downTo 1 { oneMonth = months [i]; addContainer (oneMonth, "month", url, year:year, month:oneMonth)}}; //months don't really have URLs "month" { //get the days in this month local (month); local (atts); op.attributes.getAll (@atts); year = atts.year; month = atts.month; local (days); on getDays () { <<days = playlist.manila.rpc.getDiscussCalendarDays (siteUrl, year, month) days = manila.message.calendar.getDaysInMonth (@siteprefs, year, month)}; if not (passwordLoop (@getDays)) { resetOpState (); return (false)}; //user cancelled local (oneDay, i); for i = sizeOf (days) downTo 1 { oneDay = days [i]; local (url = baseDiscussUrl + "$" + year + "/" + string.padWithZeros (month, 2) + "/" + string.padWithZeros (oneDay, 2)); addContainer (oneDay, "day", url, year:year, month:month, day:oneDay)}}; //days have URLs "day" { //get the messages for one day local (atts); op.attributes.getAll (@atts); local (year = atts.year); local (month = atts.month); local (day = atts.day); local (messageHeaders); local (d = date.set (day, month, year, 0, 0, 0)); on getDayHeaders () { <<playlist.manila.rpc.getDiscussMessageHeaders (siteUrl, @messageHeaders, d) messageHeaders = manila.message.getHeaders (@siteprefs, d)}; if not (passwordLoop (@getDayHeaders)) { resetOpState (); return (false)}; //user cancelled local (i); for i = 1 to sizeOf (messageHeaders) { addMessage (@messageHeaders [i])}}}; resetOpState (); 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.