wiki:design

Version 5 (modified by octo, 11 years ago) (diff)

--

Design Documentation

Overview

Unlike many similar open-source projects, LogicMail will actually be posting useful design documentation when and where it makes sense. The goal is to keep the code organized and well thought out, and to encourage planning of major features. Since the 0.5 goals include a major redesign of several key portions of the application, this page will be where that design is documented. Consider this a living document, to be updated throughout the brainstorming and designing process.

The biggest challenge will be making the whole application asynchronous. This means that network communications will take place in the background, and the UI will be automatically updated accordingly. This will make the application more responsive, flexible, and enable highly requested features like new mail notification.

The architecture currently being considered involves three main layers:

  • User Interface
  • Account/Folder/Message Unified Data Model
  • Asynchronous Mail Engine

These layers will be implemented by refactoring existing code, where possible, and writing new code, where necessary. Unit test coverage will be maximized to facilitate quality, as this new design will be much harder to fully test as a complete application.

Elements highlighted in red may require the use of signed code. See the FAQ for more details on this situation.

User Interface

This layer will most closely resemble the existing UI design, except for a few key differences:

  • Accounts and folder trees will be combined into a single main screen.
  • Network I/O threads will no longer be spawned at this layer, even if protocols were always abstracted.
  • Updates will happen asynchronously via events from the data model.

Unified Data Model

This data model integrates accounts, mailboxes, and messages into a single navigable tree structure. It will utilize on-demand loading for efficiency, provide events to update the UI layer, and interact with the mail engine layer. The goal is that the UI will just have to handle folders and messages, while everything else is done under the covers.

Mail Engine

The asynchronous mail engine is the core of this whole design. The higher level data model helps keep its interface simple and to the point, enabling it to specialize. At its core, is a MailStore class. All the important methods of this class will return immediately, with the results coming in later through events.

This is a preliminary class diagram, and will be updated as the design becomes more fleshed out.

Attachments