Top Level Namespace

Includes:
Redwood::LogsStuff

Defined Under Namespace

Modules: Curses, Enumerable, Ncurses, RMail, Redwood, Rfc2047, Singleton Classes: Array, FinishLine, Fixnum, Hash, Iconv, Lockfile, Module, Numeric, Object, OrderedHash, Pathname, Range, SavingHash, String, Symbol, Tempfile, Time

Constant Summary collapse

Enumerator =
Enumerable::Enumerator

Instance Method Summary collapse

Instance Method Details

#setObject

Herein lies all the code responsible for threading messages. It’s basically an online version of the JWZ threading algorithm: www.jwz.org/doc/threading.html

I didn’t implement it for efficiency, but thanks to our search engine backend, it’s typically not applied to very many messages at once.

At the top level, we have a ThreadSet, which represents a set of threads, e.g. a message folder or an inbox. Each ThreadSet contains zero or more Threads. A Thread represents all the message related to a particular subject. Each Thread has one or more Containers. A Container is a recursive structure that holds the message tree as determined by the references: and in-reply-to: headers. Each Container holds zero or one messages. In the case of zero messages, it means we’ve seen a reference to the message but haven’t (yet) seen the message itself.

A Thread can have multiple top-level Containers if we decide to group them together independent of tree structure, typically if (e.g. due to someone using a primitive MUA) the messages have the same subject but we don’t have evidence from in-reply-to: or references: headers. In this case Thread#each can optionally yield a faked root object tying them all together into one tree structure.



27
# File 'lib/sup/thread.rb', line 27

require 'set'