/* Evolution Mail Data Interface * * Copyright (C) 2005 Novell, Inc. * * Authors: Michael Zucchi */ #ifndef _EVOLUTION_DATASERVER_MAIL_IDL_ #define _EVOLUTION_DATASERVER_MAIL_IDL_ #include module Evolution { module Mail { /* ********************************************************************** */ // NB: tiny subset of omg properties service typedef string PropertyName; typedef sequence PropertyNames; struct Property { PropertyName name; any value; }; typedef sequence Properties; /* ********************************************************************** */ // exceptions enum ErrorType { SYSTEM_ERROR, CAMEL_ERROR, FAILED, NOT_SUPPORTED, NO_PERMISSION }; exception MailException { ErrorType id; string desc; }; /* ********************************************************************** */ // Main interfaces interface Folder; typedef sequence Folders; struct FolderInfo { string name; string full_name; Folder folder; }; typedef sequence FolderInfos; interface Store; typedef sequence Stores; struct StoreInfo { string name; string uid; Store store; }; typedef sequence StoreInfos; interface Session; // ********************************************************************** // MessageInfo wrappers typedef string UserFlag; typedef sequence UserFlags; struct UserTag { string name; string value; // value == "" == unset }; typedef sequence UserTags; struct MessageInfo { string uid; string subject; string to; string from; long flags; // CamelMessageInfo flag bits UserFlags userFlags; UserTags userTags; }; typedef sequence MessageInfos; // Used to pass to altering functions struct MessageInfoSet { string uid; long flagSet; // values bits to set in the flags long flagMask; // mask of bits to change in the flags UserFlags userFlagSet; UserFlags userFlagUnset; UserTags userTags; }; typedef sequence MessageInfoSets; /* ********************************************************************** */ /* Messages are passed as full rfc822 encoded messages in a stream */ typedef sequence Buffer; interface MessageStream : Bonobo::Unknown { Buffer next(in long size) raises (MailException); void dispose(); }; interface MessageIterator : Bonobo::Unknown { MessageInfos next(in long limit) raises (MailException); void dispose(); }; /* ********************************************************************** */ enum ChangeType { ADDED, REMOVED, CHANGED }; // ?? struct SessionChange { ChangeType type; StoreInfos stores; }; typedef sequence SessionChanges; struct StoreChange { ChangeType type; FolderInfos folders; }; typedef sequence StoreChanges; struct FolderChange { ChangeType type; MessageInfos messages; }; typedef sequence FolderChanges; /* ********************************************************************** */ /* listeners */ interface SessionListener : Bonobo::Unknown { oneway void changed(in Session session, in SessionChanges changes); oneway void shutdown(in Session session); // We need to use gnome-keyring instead of an interface like this? // Or does gnome-keyring run off this? //string getPassword(in Session session, string uri, string domain, string item, string prompt, long flags); }; interface StoreListener : Bonobo::Unknown { oneway void changed(in Store store, in StoreChanges changes); }; interface FolderListener : Bonobo::Unknown { oneway void changed(in Folder folder, in FolderChanges changes); }; /* ********************************************************************** */ // If this is done, then Session shouldn't have add/removeListener anymore // interface Factory : Bonobo::Unknown { // Session getSession(in string base, in SessionListener listener); // }; interface Session : Bonobo::Unknown { boolean getProperties(in PropertyNames names, out Properties props); StoreInfos getStores(in string pattern, in StoreListener listener) raises (MailException); void addListener(in SessionListener listener); void removeListener(in SessionListener listener); }; interface Store : Bonobo::Unknown { boolean getProperties(in PropertyNames names, out Properties props); FolderInfos getFolders(in string pattern, in FolderListener listener) raises (MailException); void sendMessage(in MessageStream msg) raises (MailException); }; interface Folder : Bonobo::Unknown { boolean getProperties(in PropertyNames names, out Properties props); MessageIterator getMessages(in string pattern) raises (MailException); void changeMessages(in MessageInfoSets infos) raises (MailException); MessageStream getMessage(in string uid) raises (MailException); void appendMessage(in MessageInfoSet info, in MessageStream msg) raises (MailException); }; }; }; #endif