CrystalBall aims to be a unified cross-desktop system to provide passive alerts.

The way it does this, is by separating itself into two parts: receivers and outputs. CrystalBall uses both a pool of receivers and a pool of outputs, so many receivers and outputs can be used simultaneously. Receivers in the receiver pool create notification objects, and pass them up to the output pool for display. To keep things from being gui system dependant, notifications implement no gui code. Instead, a notification is simply a collection of fields and values, each with a hint on their purpose or display method. Notifications are sent to all running outputs, which construct a gui for them and are responsible for all display characteristics.

Hint System

Notifications are normal python classes holding a collection of data associated with hints. Data is displayed in the order fields are defined in the Notification's data. A Notification class looks like this:

class GUIStandard(Notification):

         def __init__(self, source, title, description, data=None, hint=None):
                  Notification.__init__(self, data, hint)

        "title", title, hints.DATUM_TITLE)
        "source", source, hints.DATUM_SOURCE)
        "description", description, hints.DATUM_DESCRIPTION)

Recievers instantiate a Notification class with the data they desire, and then pass it up to a pool of Outputs. Each output is responsible for it's own interpretation of the data and it's hints. Notification classes can inherit from other Notifications, expanding on a layout and adding data at the end. For instance, ?GuiStandardWithImage adds images to the Notifications:

class GUIStandardWithImage(GUIStandard):

         def __init__(self, source, title, description, image, data=None, hint=None):
                  GUIStandard.__init__(self, source, title, description, data, hint)
        "image", image, hints.DATUM_TITLEIMAGE)

Current Features

Here's what CrystalBall can currently do:

                 * Basic GTK Output 
                 * Debug Console Output 
                 * HAL DeviceAdded Receiver 
                 * Clock Example Receiver 
                 * Welcome Receiver (Shows version at startup) 


CrystalBall is still in it's early stages, so most of the action can be found in the CVS.

-- ?MaxGoodman - 29 Jul 2004