/* Evolution Mail Interface * * Copyright (C) 2005 Novell, Inc. * * Authors: Michael Zucchi */ #ifndef _EVOLUTION_DATASERVER_MAIL_IDL_ #define _EVOLUTION_DATASERVER_MAIL_IDL_ #include module Evolution { module Mail { exception NOT_SUPPORTED { // string why; }; exception FAILED { // string why; }; 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; /* ********************************************************************** */ // NB: tiny subset of omg properties service typedef string PropertyName; typedef sequence PropertyNames; struct Property { PropertyName name; any value; }; typedef sequence Properties; /* ********************************************************************** */ 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); }; 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); 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 (NOT_SUPPORTED, FAILED); void sendMessage(in Bonobo::Stream msg) raises (NOT_SUPPORTED, FAILED); }; interface MessageIterator : Bonobo::Unknown { MessageInfos next(in long limit) raises (FAILED); void dispose(); }; interface Folder : Bonobo::Unknown { boolean getProperties(in PropertyNames names, out Properties props); MessageIterator getMessages(in string pattern) raises (NOT_SUPPORTED, FAILED); void changeMessages(in MessageInfoSets infos) raises (NOT_SUPPORTED); Bonobo::Stream getMessage(in string uid) raises (NOT_SUPPORTED, FAILED); void appendMessage(in MessageInfoSet info, in Bonobo::Stream msg) raises (NOT_SUPPORTED, FAILED); }; }; }; #endif