|
|
//-------------------------------------------------------------------------- // OEStore.idl //-------------------------------------------------------------------------- import "ocidl.idl"; import "objidl.idl"; import "imnact.idl"; import "mimeole.idl"; import "imnxport.idl"; import "directdb.idl";
//-------------------------------------------------------------------------- // Dependencies //-------------------------------------------------------------------------- cpp_quote("#include <stddef.h> // for offsetof")
//-------------------------------------------------------------------------- // Interfaces //-------------------------------------------------------------------------- interface IStoreCallback; interface IMessageStore; interface IMessageTable; interface IMessageTableNotify; interface IMessageFolder; interface IMessageServer; interface IEnumerateFolders; interface IImnAccount; interface IStoreNamespace; interface IStoreFolder;
//-------------------------------------------------------------------------- // Class Ids and Interface Ids //-------------------------------------------------------------------------- cpp_quote("// {101A8FB9-F1B9-11d1-9A56-00C04FA309D4}") cpp_quote("DEFINE_GUID(CLSID_MessageStore, 0x101a8fb9, 0xf1b9, 0x11d1, 0x9a, 0x56, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {522E4F81-2C98-11d2-AACA-006097D474C4}") cpp_quote("DEFINE_GUID(IID_INewsStore, 0x522e4f81, 0x2c98, 0x11d2, 0xaa, 0xca, 0x0, 0x60, 0x97, 0xd4, 0x74, 0xc4);") cpp_quote("") cpp_quote("// {06AE7A01-6C5B-11d2-AD88-0080C7B6E3C5}") cpp_quote("DEFINE_GUID(IID_IIMAPStore, 0x6ae7a01, 0x6c5b, 0x11d2, 0xad, 0x88, 0x0, 0x80, 0xc7, 0xb6, 0xe3, 0xc5);") cpp_quote("") cpp_quote("// {E883FC75-EC08-11d1-9A53-00C04FA309D4}") cpp_quote("DEFINE_GUID(IID_IMessageStore, 0xe883fc75, 0xec08, 0x11d1, 0x9a, 0x53, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {E883FC76-EC08-11d1-9A53-00C04FA309D4}") cpp_quote("DEFINE_GUID(IID_IMessageFolder, 0xe883fc76, 0xec08, 0x11d1, 0x9a, 0x53, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {E883FC77-EC08-11d1-9A53-00C04FA309D4}") cpp_quote("DEFINE_GUID(IID_IPop3UidlStore, 0xe883fc77, 0xec08, 0x11d1, 0x9a, 0x53, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {816C1167-F649-11d1-9A57-00C04FA309D4}") cpp_quote("DEFINE_GUID(IID_IMessageTableNotify, 0x816c1167, 0xf649, 0x11d1, 0x9a, 0x57, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {B4B796AA-EC1C-11d1-9A54-00C04FA309D4}") cpp_quote("DEFINE_GUID(IID_IMessageTable, 0xb4b796aa, 0xec1c, 0x11d1, 0x9a, 0x54, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {CFAD2437-EC54-11d1-9A54-00C04FA309D4}") cpp_quote("DEFINE_GUID(IID_IStoreCallback, 0xcfad2437, 0xec54, 0x11d1, 0x9a, 0x54, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {CFAD2438-EC54-11d1-9A54-00C04FA309D4}") cpp_quote("DEFINE_GUID(IID_IMessageServer, 0xcfad2438, 0xec54, 0x11d1, 0x9a, 0x54, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {A6630A5E-046A-11d2-ACEF-00C04FA31009}") cpp_quote("DEFINE_GUID(SID_MessageServer, 0xa6630a5e, 0x46a, 0x11d2, 0xac, 0xef, 0x0, 0xc0, 0x4f, 0xa3, 0x10, 0x9);") cpp_quote("") cpp_quote("// {7C9FB7A1-2C9E-11d2-AACA-006097D474C4}") cpp_quote("DEFINE_GUID(SID_LocalMessageFolder, 0x7c9fb7a1, 0x2c9e, 0x11d2, 0xaa, 0xca, 0x0, 0x60, 0x97, 0xd4, 0x74, 0xc4);") cpp_quote("") cpp_quote("// {28B44B1D-07A9-11d2-9A63-00C04FA309D4}") cpp_quote("DEFINE_GUID(IID_ICallbackTimeout, 0x28b44b1d, 0x7a9, 0x11d2, 0x9a, 0x63, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {8551C145-0C39-11d2-9A6A-00C04FA309D4}") cpp_quote("DEFINE_GUID(IID_IEnumerateFolders, 0x8551c145, 0xc39, 0x11d2, 0x9a, 0x6a, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {E70C92A9-4BFD-11d1-8A95-00C04FB951F3}") cpp_quote("DEFINE_GUID(CLSID_StoreNamespace, 0xe70c92a9, 0x4bfd, 0x11d1, 0x8a, 0x95, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf3);") cpp_quote("") cpp_quote("// {E70C92AA-4BFD-11d1-8A95-00C04FB951F3}") cpp_quote("DEFINE_GUID(IID_IStoreNamespace, 0xe70c92aa, 0x4bfd, 0x11d1, 0x8a, 0x95, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf3);") cpp_quote("") cpp_quote("// {E70C92AC-4BFD-11d1-8A95-00C04FB951F3}") cpp_quote("DEFINE_GUID(IID_IStoreFolder, 0xe70c92ac, 0x4bfd, 0x11d1, 0x8a, 0x95, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf3);") cpp_quote("") cpp_quote("// {BE09F473-7FEB-11d2-9962-00C04FA309D4}") cpp_quote("DEFINE_GUID(CLSID_MigrateMessageStore, 0xbe09f473, 0x7feb, 0x11d2, 0x99, 0x62, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
//-------------------------------------------------------------------------- // OEStore Database Extenstion CLSIDs //-------------------------------------------------------------------------- cpp_quote("// {6F74FDC5-E366-11d1-9A4E-00C04FA309D4}") cpp_quote("DEFINE_GUID(CLSID_MessageDatabase, 0x6f74fdc5, 0xe366, 0x11d1, 0x9a, 0x4e, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {6F74FDC6-E366-11d1-9A4E-00C04FA309D4}") cpp_quote("DEFINE_GUID(CLSID_FolderDatabase, 0x6f74fdc6, 0xe366, 0x11d1, 0x9a, 0x4e, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {6F74FDC7-E366-11d1-9A4E-00C04FA309D4}") cpp_quote("DEFINE_GUID(CLSID_Pop3UidlDatabase, 0x6f74fdc7, 0xe366, 0x11d1, 0x9a, 0x4e, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);") cpp_quote("") cpp_quote("// {5488C4BE-2247-11d2-9A7D-00C04FA309D4}") cpp_quote("DEFINE_GUID(CLSID_StreamDatabase, 0x5488c4be, 0x2247, 0x11d2, 0x9a, 0x7d, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
//-------------------------------------------------------------------------- // HRESULT Macros //-------------------------------------------------------------------------- cpp_quote("#ifndef FACILITY_INTERNET") cpp_quote("#define FACILITY_INTERNET 12") cpp_quote("#endif") cpp_quote("#ifndef HR_E") cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)") cpp_quote("#endif") cpp_quote("#ifndef HR_S") cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)") cpp_quote("#endif") cpp_quote("#ifndef HR_CODE") cpp_quote("#define HR_CODE(hr) (INT)(hr & 0xffff)") cpp_quote("#endif") cpp_quote("") cpp_quote("// --------------------------------------------------------------------------------") cpp_quote("// Error Codes") cpp_quote("// --------------------------------------------------------------------------------") cpp_quote("#define STORE_E_BUSY HR_E(100)") cpp_quote("#define STORE_E_OFFLINE HR_E(101)") cpp_quote("#define STORE_E_BADFOLDERNAME HR_E(102)") cpp_quote("#define STORE_E_INVALIDPARENT HR_E(103)") cpp_quote("#define STORE_E_CANTDELETESPECIAL HR_E(104)") cpp_quote("#define STORE_E_CANTMOVESERVERS HR_E(105)") cpp_quote("#define STORE_E_CANTMOVESPECIAL HR_E(106)") cpp_quote("#define STORE_E_CANTRENAMESPECIAL HR_E(107)") cpp_quote("#define STORE_E_NOBODY HR_E(108)") cpp_quote("#define STORE_E_NOSERVERCOPY HR_E(109)") // CMessageClass should do std copy cpp_quote("#define STORE_E_NOTINITIALIZED HR_E(110)") // Must initialize object first cpp_quote("#define STORE_E_OPERATION_CANCELED HR_E(111)") cpp_quote("#define STORE_E_FILENOEXIST HR_E(112)") cpp_quote("#define STORE_E_EXPIRED HR_E(113)") cpp_quote("#define STORE_E_NOSERVERSUPPORT HR_E(114)") // Server cannot support requested operation cpp_quote("#define STORE_E_NOTRANSLATION HR_E(115)") // New fldr has non-USASCII, parent is FOLDER_NOTRANSLATEUTF7 cpp_quote("#define STORE_E_NOREMOTESPECIALFLDR HR_E(116)") // User has disabled this special folder for this remote server cpp_quote("#define STORE_E_IMAP_HC_NOSLASH HR_E(117)") // No '/' characters permitted in folder name (hierarchy char) cpp_quote("#define STORE_E_IMAP_HC_NOBACKSLASH HR_E(118)") // No '\' characters permitted in folder name (hierarchy char) cpp_quote("#define STORE_E_IMAP_HC_NODOT HR_E(119)") // No '.' characters permitted in folder name (hierarchy char) cpp_quote("#define STORE_E_IMAP_HC_NOHC HR_E(120)") // Some other character is HC: not permitted in folder name // Not to exceed 300
cpp_quote("// --------------------------------------------------------------------------------") cpp_quote("// Success Codes") cpp_quote("// --------------------------------------------------------------------------------") cpp_quote("#define STORE_S_NOTOPEN HR_S(500)") cpp_quote("#define STORE_S_ALREADYEXISTS HR_S(507)") cpp_quote("#define STORE_S_ALREADYPENDING HR_S(508)") cpp_quote("#define STORE_S_NOOP HR_S(509)") // OK, nothing to do cpp_quote("#define STORE_S_IN_USE HR_S(510)") // in use by another client // Not to exceed 800
cpp_quote("// --------------------------------------------------------------------------------") cpp_quote("// String Definition Macros") cpp_quote("// --------------------------------------------------------------------------------") cpp_quote("#ifdef __cplusplus") cpp_quote("#define EXTERN_C extern \"C\"") cpp_quote("#else") cpp_quote("#define EXTERN_C extern") cpp_quote("#endif") cpp_quote("") cpp_quote("#ifndef STRCONSTA") cpp_quote("#ifdef DEFINE_STRCONST") cpp_quote("#define STRCONSTA(x,y) EXTERN_C const char x[] = y") cpp_quote("#define STRCONSTW(x,y) EXTERN_C const WCHAR x[] = L##y") cpp_quote("#else") cpp_quote("#define STRCONSTA(x,y) EXTERN_C const char x[]") cpp_quote("#define STRCONSTW(x,y) EXTERN_C const WCHAR x[]") cpp_quote("#endif") cpp_quote("#endif") cpp_quote("") cpp_quote("// --------------------------------------------------------------------------------") cpp_quote("// rfc822 Headers") cpp_quote("// --------------------------------------------------------------------------------") cpp_quote("STRCONSTA(STR_LOCALSTORE, \"LocalStore\");")
//-------------------------------------------------------------------------- // sizeofMember //-------------------------------------------------------------------------- cpp_quote("#define sizeofMember(s,m) sizeof(((s *)0)->m)")
//-------------------------------------------------------------------------- // DECLARE_HANDLE Macro //-------------------------------------------------------------------------- #ifndef DECLARE_HANDLE #define DECLARE_HANDLE(name) \ struct name##__ { DWORD unused; }; \ typedef struct name##__ _far* name #endif
// OE team hasn't fixed their idl to avoid the Win64 midl warnings - turn it off midl_pragma warning(disable:2395)
//-------------------------------------------------------------------------- // OEStore Type Library //-------------------------------------------------------------------------- [ uuid(E462D143-5162-11d1-8A95-00C04FB951F3), helpstring("Microsoft Outlook Express Store Type Library 1.0"), version(1.0) ] library OESTORE { //---------------------------------------------------------------------- // Standard Type Library Stuff //---------------------------------------------------------------------- importlib("stdole2.tlb");
//---------------------------------------------------------------------- // Stream Store Version //---------------------------------------------------------------------- const DWORD STREAM_STORE_VERSION = 5;
//---------------------------------------------------------------------- // STREAMUSERDATA //---------------------------------------------------------------------- typedef struct tagSTREAMUSERDATA { BYTE rgbReserved[512]; } STREAMUSERDATA, *LPSTREAMUSERDATA;
//---------------------------------------------------------------------- // STMCOLID //---------------------------------------------------------------------- typedef enum tagSTMCOLID { STMCOL_ID=0, STMCOL_REFCOUNT, STMCOL_STREAM, STMCOL_OFFSETS, STMCOL_LAST } STMCOLID;
//---------------------------------------------------------------------- // STREAMINFO //---------------------------------------------------------------------- typedef struct tagSTREAMINFO { BYTE *pAllocated; BYTE bVersion; DWORD idStream; FILEADDRESS faStream; DWORD cRefCount; BLOB Offsets; } STREAMINFO, *LPSTREAMINFO;
//---------------------------------------------------------------------- // Stream Property Store Binding Table //---------------------------------------------------------------------- cpp_quote("BEGIN_COLUMN_ARRAY(g_rgStmTblColumns, STMCOL_LAST)") cpp_quote(" DEFINE_COLUMN(STMCOL_ID, CDT_UNIQUE, STREAMINFO, idStream)") cpp_quote(" DEFINE_COLUMN(STMCOL_REFCOUNT, CDT_DWORD, STREAMINFO, cRefCount)") cpp_quote(" DEFINE_COLUMN(STMCOL_STREAM, CDT_STREAM, STREAMINFO, faStream)") cpp_quote(" DEFINE_COLUMN(STMCOL_OFFSETS, CDT_VARBLOB, STREAMINFO, Offsets)") cpp_quote("END_COLUMN_ARRAY")
//---------------------------------------------------------------------- // Folder Table Primary Index Definition //---------------------------------------------------------------------- cpp_quote("BEGIN_TABLE_INDEX(g_StmTblPrimaryIndex, 1)") cpp_quote(" DEFINE_KEY(STMCOL_ID, 0, 0)") cpp_quote("END_TABLE_INDEX")
//---------------------------------------------------------------------- // Folder Record Format //---------------------------------------------------------------------- cpp_quote("BEGIN_TABLE_SCHEMA(g_StreamTableSchema, CLSID_StreamDatabase, STREAMINFO)") cpp_quote(" SCHEMA_PROPERTY(STREAM_STORE_VERSION)") cpp_quote(" SCHEMA_PROPERTY(TSF_RESETIFBADVERSION | TSF_HASSTREAMS)") cpp_quote(" SCHEMA_PROPERTY(sizeof(STREAMUSERDATA))") cpp_quote(" SCHEMA_PROPERTY(offsetof(STREAMINFO, idStream))") cpp_quote(" SCHEMA_PROPERTY(STMCOL_LAST)") cpp_quote(" SCHEMA_PROPERTY(g_rgStmTblColumns)") cpp_quote(" SCHEMA_PROPERTY(&g_StmTblPrimaryIndex)") cpp_quote(" SCHEMA_PROPERTY(NULL)") cpp_quote("END_TABLE_SCHEMA")
//------------------------------------------------------------------ // Extern'ed Record Formats //------------------------------------------------------------------ cpp_quote("extern const TABLESCHEMA g_StreamTableSchema;")
//---------------------------------------------------------------------- // IMessageStore //---------------------------------------------------------------------- cpp_quote("#ifndef __LPMESSAGESTORE_DEFINED") cpp_quote("#define __LPMESSAGESTORE_DEFINED") [ object, uuid(E883FC75-EC08-11d1-9A53-00C04FA309D4), pointer_default(unique) ] interface IMessageStore : IDatabase { //------------------------------------------------------------------ // Pointer to an interface of this type //------------------------------------------------------------------ typedef IMessageStore *LPMESSAGESTORE;
//------------------------------------------------------------------ // Folder Database Version //------------------------------------------------------------------ const DWORD FOLDER_DATABASE_VERSION = 5;
//------------------------------------------------------------------ // FOLDERID //------------------------------------------------------------------ DECLARE_HANDLE(FOLDERID); typedef FOLDERID *LPFOLDERID;
//------------------------------------------------------------------ // FOLDERID Constants //------------------------------------------------------------------ const FOLDERID FOLDERID_ROOT = (FOLDERID)0x00000000; const FOLDERID FOLDERID_LOCAL_STORE = (FOLDERID)0x00000001; const FOLDERID FOLDERID_INVALID = (FOLDERID)-1;
//------------------------------------------------------------------ // Constants //------------------------------------------------------------------ const DWORD CCHMAX_FOLDER_NAME = 259; const DWORD CCHMAX_FOLDER_FILE = 260;
//------------------------------------------------------------------ // STOREUSERDATA //------------------------------------------------------------------ typedef struct tagSTOREUSERDATA { FILETIME ftCreated; BYTE fConvertedToDBX; BYTE rgbReserved[255]; } STOREUSERDATA, *LPSTOREUSERDATA; //------------------------------------------------------------------ // FLDCOLID //------------------------------------------------------------------ typedef enum tagFLDCOLID { FLDCOL_ID=0, FLDCOL_PARENT, FLDCOL_NAME, FLDCOL_FILE, FLDCOL_DESCRIPTION, FLDCOL_ACCOUNTID, FLDCOL_FLAGS, FLDCOL_MESSAGES, FLDCOL_UNREAD, FLDCOL_SPECIAL, FLDCOL_TYPE, FLDCOL_HIERARCHY, FLDCOL_LISTSTAMP, FLDCOL_SERVERHIGH, FLDCOL_SERVERLOW, FLDCOL_SERVERCOUNT, FLDCOL_CLIENTHIGH, FLDCOL_CLIENTLOW, FLDCOL_NOTDOWNLOADED, FLDCOL_REQUESTED, FLDCOL_URLCOMPONENT, FLDCOL_READ, FLDCOL_THREADUNREAD, FLDCOL_VIEWUNREAD, FLDCOL_STATUSMSGDELTA, FLDCOL_STATUSUNREADDELTA, FLDCOL_WATCHEDHIGH, FLDCOL_WATCHEDUNREAD, FLDCOL_WATCHED, FLDCOL_LAST } FLDCOLID;
//------------------------------------------------------------------ // Folder Flags - Reuse the commented out stuff //------------------------------------------------------------------ typedef DWORD FLDRFLAGS; cpp_quote("#define FOLDER_SUBSCRIBED 0x00000001 // Indicates that a folder is subscribed") // cpp_quote("#define FOLDER_HASSUBCHILD 0x00000002 // Indicates that a folder has an eventual subscribed child") cpp_quote("#define FOLDER_CHILDRENKNOWN 0x00000004 // Indicates that LIST % already issued to get immediate children") cpp_quote("#define FOLDER_SERVER 0x00000008 // Folder is a server node") cpp_quote("#define FOLDER_HASCHILDREN 0x00000010 // The folder has children - doesn't specify subscribed state") cpp_quote("#define FOLDER_CANDELETE 0x00000020 // The folder can be deleted") cpp_quote("#define FOLDER_FINDRESULTS 0x00000040 // This is a search Folder)") //cpp_quote("#define FOLDER_LOCALSTORE 0x00000080 // This is a store and it is the local store") cpp_quote("#define FOLDER_HIDDEN 0x00000100 // The Folder Node should be hidden from the user") cpp_quote("#define FOLDER_DROPTARGET 0x00000200 // Can drop to") cpp_quote("#define FOLDER_HASNEWGROUPS 0x00000400 // Has new groups (news server only)") cpp_quote("#define FOLDER_DOWNLOADHEADERS 0x00000800 // Synchronize new headers") cpp_quote("#define FOLDER_DOWNLOADNEW 0x00001000 // Synchronize message bodies") cpp_quote("#define FOLDER_DOWNLOADALL 0x00002000 // Synchronize all") cpp_quote("#define FOLDER_MODERATED 0x00004000 // The folder is moderated (newsgroups)") cpp_quote("#define FOLDER_BLOCKED 0x00008000 // The folder is blocked (newsgroups)") cpp_quote("#define FOLDER_NOPOSTING 0x00010000 // The folder can not be posted to") //cpp_quote("#define FOLDER_DEFAULTNEWSSTORE 0x00020000 // The folder is a store and is the default news store") cpp_quote("#define FOLDER_CANRENAME 0x00040000 // Can Rename this folder") cpp_quote("#define FOLDER_NOCHILDCREATE 0x00080000 // Child folders can not be created") cpp_quote("#define FOLDER_CANHAVESPECIAL 0x00100000 // Only set with FOLDER_SERVER to note that the server can have special folders") cpp_quote("#define FOLDER_NEW 0x00200000 // The folder is new (newsgroups)") cpp_quote("#define FOLDER_SHOWALL 0x00400000 // Show all folders for this account (IMAP server)") cpp_quote("#define FOLDER_EXPANDTREE 0x00800000 // Expand state of folder list treeview") cpp_quote("#define FOLDER_NOSELECT 0x01000000 // Folder cannot be selected (IMAP)") cpp_quote("#define FOLDER_NONEXISTENT 0x02000000 // Folder does not exist (IMAP)") cpp_quote("#define FOLDER_NOTRANSLATEUTF7 0x04000000 // Folder name must NOT be converted to UTF7 (IMAP)") cpp_quote("#define FOLDER_CREATEONDEMAND 0x08000000 // Folder was created offline, needs to be created on server") cpp_quote("#define FOLDER_MSNSERVER 0x10000000 // Folder is a server associated with MSN.com")
//---------------------------------------------------------------------- // SPECIALFOLDER - How to identify a special folder //---------------------------------------------------------------------- typedef BYTE SPECIALFOLDER; const SPECIALFOLDER FOLDER_NOTSPECIAL = 0; const SPECIALFOLDER FOLDER_INBOX = 1; const SPECIALFOLDER FOLDER_OUTBOX = 2; const SPECIALFOLDER FOLDER_SENT = 3; const SPECIALFOLDER FOLDER_DELETED = 4; const SPECIALFOLDER FOLDER_DRAFT = 5; const SPECIALFOLDER FOLDER_ERRORS = 6; const SPECIALFOLDER FOLDER_JUNK = 7; const SPECIALFOLDER FOLDER_MSNPROMO = 8; const SPECIALFOLDER FOLDER_BULKMAIL = 9; const SPECIALFOLDER FOLDER_MAX = 10;
//------------------------------------------------------------------ // FOLDERTYPE //------------------------------------------------------------------ typedef BYTE FOLDERTYPE; const FOLDERTYPE FOLDER_ROOTNODE = 4; const FOLDERTYPE FOLDER_LOCAL = 3; const FOLDERTYPE FOLDER_HTTPMAIL = 2; const FOLDERTYPE FOLDER_IMAP = 1; const FOLDERTYPE FOLDER_NEWS = 0; const FOLDERTYPE FOLDER_TYPESMAX = 5; const FOLDERTYPE FOLDER_INVALID = 0xFF;
//------------------------------------------------------------------ // FOLDERINFO //------------------------------------------------------------------ typedef struct tagFOLDERINFO { BYTE *pAllocated; BYTE bVersion; FOLDERID idFolder; FOLDERID idParent; LPSTR pszName; LPSTR pszFile; LPSTR pszDescription; LPSTR pszAccountId; // Server Nodes Only LPSTR pszUrlComponent; FLDRFLAGS dwFlags; DWORD cMessages; DWORD cUnread; DWORD cWatched; DWORD cThreadUnreadOld; DWORD cViewUnreadOld; DWORD cWatchedUnread; SPECIALFOLDER tySpecial; FOLDERTYPE tyFolder; BYTE bHierarchy; DWORD dwListStamp; DWORD dwServerHigh; // highest numbered article on server (news) DWORD dwServerLow; // lowest numbered article on server (news) DWORD dwServerCount; // count of articles on server (news) DWORD dwClientHigh; // highest numbered article known to client (news) DWORD dwClientLow; // lowest numbered article known to client (news) DWORD dwStatusMsgDelta; // total number of msgs added via STATUS resp. (IMAP) DWORD dwStatusUnreadDelta; // number of unread added via STATUS resp. (IMAP) DWORD dwNotDownloaded; BLOB Requested; BLOB Read; DWORD dwClientWatchedHigh; // Highest numbered article we've checked for watch info (news) } FOLDERINFO, *LPFOLDERINFO; //------------------------------------------------------------------ // Folder Record Members //------------------------------------------------------------------ cpp_quote("BEGIN_COLUMN_ARRAY(g_rgFldTblColumns, FLDCOL_LAST)") cpp_quote(" DEFINE_COLUMN(FLDCOL_ID, CDT_UNIQUE, FOLDERINFO, idFolder)") cpp_quote(" DEFINE_COLUMN(FLDCOL_PARENT, CDT_DWORD, FOLDERINFO, idParent)") cpp_quote(" DEFINE_COLUMN(FLDCOL_NAME, CDT_VARSTRA, FOLDERINFO, pszName)") cpp_quote(" DEFINE_COLUMN(FLDCOL_FILE, CDT_VARSTRA, FOLDERINFO, pszFile)") cpp_quote(" DEFINE_COLUMN(FLDCOL_DESCRIPTION, CDT_VARSTRA, FOLDERINFO, pszDescription)") cpp_quote(" DEFINE_COLUMN(FLDCOL_ACCOUNTID, CDT_VARSTRA, FOLDERINFO, pszAccountId)") cpp_quote(" DEFINE_COLUMN(FLDCOL_FLAGS, CDT_FLAGS, FOLDERINFO, dwFlags)") cpp_quote(" DEFINE_COLUMN(FLDCOL_MESSAGES, CDT_DWORD, FOLDERINFO, cMessages)") cpp_quote(" DEFINE_COLUMN(FLDCOL_UNREAD, CDT_DWORD, FOLDERINFO, cUnread)") cpp_quote(" DEFINE_COLUMN(FLDCOL_SPECIAL, CDT_BYTE, FOLDERINFO, tySpecial)") cpp_quote(" DEFINE_COLUMN(FLDCOL_TYPE, CDT_BYTE, FOLDERINFO, tyFolder)") cpp_quote(" DEFINE_COLUMN(FLDCOL_HIERARCHY, CDT_BYTE, FOLDERINFO, bHierarchy)") cpp_quote(" DEFINE_COLUMN(FLDCOL_LISTSTAMP, CDT_DWORD, FOLDERINFO, dwListStamp)") cpp_quote(" DEFINE_COLUMN(FLDCOL_SERVERHIGH, CDT_DWORD, FOLDERINFO, dwServerHigh)") cpp_quote(" DEFINE_COLUMN(FLDCOL_SERVERLOW, CDT_DWORD, FOLDERINFO, dwServerLow)") cpp_quote(" DEFINE_COLUMN(FLDCOL_SERVERCOUNT, CDT_DWORD, FOLDERINFO, dwServerCount)") cpp_quote(" DEFINE_COLUMN(FLDCOL_CLIENTHIGH, CDT_DWORD, FOLDERINFO, dwClientHigh)") cpp_quote(" DEFINE_COLUMN(FLDCOL_CLIENTLOW, CDT_DWORD, FOLDERINFO, dwClientLow)") cpp_quote(" DEFINE_COLUMN(FLDCOL_NOTDOWNLOADED, CDT_DWORD, FOLDERINFO, dwNotDownloaded)") cpp_quote(" DEFINE_COLUMN(FLDCOL_REQUESTED, CDT_VARBLOB, FOLDERINFO, Requested)") cpp_quote(" DEFINE_COLUMN(FLDCOL_URLCOMPONENT, CDT_VARSTRA, FOLDERINFO, pszUrlComponent)") cpp_quote(" DEFINE_COLUMN(FLDCOL_READ, CDT_VARBLOB, FOLDERINFO, Read)") cpp_quote(" DEFINE_COLUMN(FLDCOL_THREADUNREAD, CDT_DWORD, FOLDERINFO, cThreadUnreadOld)") cpp_quote(" DEFINE_COLUMN(FLDCOL_VIEWUNREAD, CDT_DWORD, FOLDERINFO, cViewUnreadOld)") cpp_quote(" DEFINE_COLUMN(FLDCOL_STATUSMSGDELTA, CDT_DWORD, FOLDERINFO, dwStatusMsgDelta)") cpp_quote(" DEFINE_COLUMN(FLDCOL_STATUSUNREADDELTA, CDT_DWORD, FOLDERINFO, dwStatusUnreadDelta)") cpp_quote(" DEFINE_COLUMN(FLDCOL_WATCHEDHIGH, CDT_DWORD, FOLDERINFO, dwClientWatchedHigh)") cpp_quote(" DEFINE_COLUMN(FLDCOL_WATCHEDUNREAD, CDT_DWORD, FOLDERINFO, cWatchedUnread)") cpp_quote(" DEFINE_COLUMN(FLDCOL_WATCHED, CDT_DWORD, FOLDERINFO, cWatched)") cpp_quote("END_COLUMN_ARRAY")
//------------------------------------------------------------------ // Folder Database Symbol Table for Regular Expression Support //------------------------------------------------------------------ cpp_quote("BEGIN_SYMBOL_TABLE(g_FldSymbolTable, 2)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"FOLDER_SUBSCRIBED\", FOLDER_SUBSCRIBED)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_COLUMN, \"FLDCOL_FLAGS\", FLDCOL_FLAGS)") cpp_quote("END_SYMBOL_TABLE")
//------------------------------------------------------------------ // Foldername - parent folderid index //------------------------------------------------------------------ cpp_quote("#define IINDEX_ALL 1") cpp_quote("#define IINDEX_SUBSCRIBED 2")
//------------------------------------------------------------------ // Folder Table Primary Index Definition //------------------------------------------------------------------ cpp_quote("BEGIN_TABLE_INDEX(g_FldTblPrimaryIndex, 1)") cpp_quote(" DEFINE_KEY(FLDCOL_ID, 0, 0)") cpp_quote("END_TABLE_INDEX")
//------------------------------------------------------------------ // ParentId/FolderName Index //------------------------------------------------------------------ cpp_quote("BEGIN_TABLE_INDEX(g_FolderNameIndex, 2)") cpp_quote(" DEFINE_KEY(FLDCOL_PARENT, 0, 0)") cpp_quote(" DEFINE_KEY(FLDCOL_NAME, COMPARE_ASANSI | COMPARE_IGNORECASE, 0)") cpp_quote("END_TABLE_INDEX")
//------------------------------------------------------------------ // Folder Record Format //------------------------------------------------------------------ cpp_quote("BEGIN_TABLE_SCHEMA(g_FolderTableSchema, CLSID_FolderDatabase, FOLDERINFO)") cpp_quote(" SCHEMA_PROPERTY(FOLDER_DATABASE_VERSION)") cpp_quote(" SCHEMA_PROPERTY(TSF_RESETIFBADVERSION | TSF_HASEXTENSION)") cpp_quote(" SCHEMA_PROPERTY(sizeof(STOREUSERDATA))") cpp_quote(" SCHEMA_PROPERTY(offsetof(FOLDERINFO, idFolder))") cpp_quote(" SCHEMA_PROPERTY(FLDCOL_LAST)") cpp_quote(" SCHEMA_PROPERTY(g_rgFldTblColumns)") cpp_quote(" SCHEMA_PROPERTY(&g_FldTblPrimaryIndex)") cpp_quote(" SCHEMA_PROPERTY(&g_FldSymbolTable)") cpp_quote("END_TABLE_SCHEMA") //------------------------------------------------------------------ // Extern'ed Record Formats //------------------------------------------------------------------ cpp_quote("extern const TABLESCHEMA g_FolderTableSchema;") cpp_quote("extern const TABLEINDEX g_FolderNameIndex;")
//------------------------------------------------------------------ // CONNECT_STATE //------------------------------------------------------------------ typedef enum tagCONNECT_STATE { CONNECT_STATE_DISCONNECT = 0, CONNECT_STATE_CONNECT, CONNECT_STATE_LAST } CONNECT_STATE;
//------------------------------------------------------------------ // CREATEFOLDERFLAGS //------------------------------------------------------------------ typedef DWORD CREATEFOLDERFLAGS; cpp_quote("#define CREATE_FOLDER_UNIQUIFYNAME 0x00000002") cpp_quote("#define CREATE_FOLDER_LOCALONLY 0x00000004")
//------------------------------------------------------------------ // STOREVALIDATEFLAGS //------------------------------------------------------------------ typedef DWORD STOREVALIDATEFLAGS; cpp_quote("#define STORE_VALIDATE_DONTSYNCWITHACCOUNTS 0x00000001")
//------------------------------------------------------------------ // RENAMEFOLDERFLAGS //------------------------------------------------------------------ typedef DWORD RENAMEFOLDERFLAGS;
//------------------------------------------------------------------ // MOVEFOLDERFLAGS //------------------------------------------------------------------ typedef DWORD MOVEFOLDERFLAGS;
//------------------------------------------------------------------ // OPENFOLDERFLAGS //------------------------------------------------------------------ typedef DWORD OPENFOLDERFLAGS; cpp_quote("#define OPEN_FOLDER_NOCREATE 0x00000001")
//------------------------------------------------------------------ // DELETEFOLDERFLAGS //------------------------------------------------------------------ typedef DWORD DELETEFOLDERFLAGS; cpp_quote("#define DELETE_FOLDER_CHILDRENONLY 0x00000001") cpp_quote("#define DELETE_FOLDER_RECURSIVE 0x00000002") cpp_quote("#define DELETE_FOLDER_NOTRASHCAN 0x00000004") cpp_quote("#define DELETE_FOLDER_DELETESPECIAL 0x00000008")
//------------------------------------------------------------------ // SYNCSTOREFLAGS //------------------------------------------------------------------ typedef DWORD SYNCSTOREFLAGS; cpp_quote("#define SYNC_STORE_REFRESH 0x00000001") cpp_quote("#define SYNC_STORE_GET_DESCRIPTIONS 0x00000002")
//------------------------------------------------------------------ // SETMESSAGEFLAGSFLAGS //------------------------------------------------------------------ typedef DWORD SETMESSAGEFLAGSFLAGS; cpp_quote("#define SET_MESSAGE_FLAGS_FORCE 0x00000001")
//------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT Initialize( [in] LPCSTR pszDirectory);
HRESULT Validate( [in] STOREVALIDATEFLAGS dwFlags);
HRESULT GetDirectory( [in] LPSTR pszDirectory, [in] DWORD cchMaxDir);
HRESULT Synchronize( [in] FOLDERID idFolder, [in] SYNCSTOREFLAGS dwFlags, [in] IStoreCallback *pCallback);
HRESULT FindServerId( [in] LPCSTR pszAcctId, [out] LPFOLDERID pidServer);
HRESULT CreateServer( [in] IImnAccount *pAccount, [in] FLDRFLAGS dwFlags, [out] LPFOLDERID pidFolder);
HRESULT CreateFolder( [in] CREATEFOLDERFLAGS dwCreateFlags, [in,out] LPFOLDERINFO pInfo, [in] IStoreCallback *pCallback);
HRESULT OpenSpecialFolder( [in] FOLDERID idStore, [in] IMessageServer *pServer, [in] SPECIALFOLDER tySpecial, [out] IMessageFolder **ppFolder);
HRESULT OpenFolder( [in] FOLDERID idFolder, [in] IMessageServer *pServer, [in] OPENFOLDERFLAGS dwFlags, [out] IMessageFolder **ppFolder);
HRESULT MoveFolder( [in] FOLDERID idFolder, [in] FOLDERID idParentNew, [in] MOVEFOLDERFLAGS dwFlags, [in] IStoreCallback *pCallback);
HRESULT RenameFolder( [in] FOLDERID idFolder, [in] LPCSTR pszName, [in] RENAMEFOLDERFLAGS dwFlags, [in] IStoreCallback *pCallback);
HRESULT DeleteFolder( [in] FOLDERID idFolder, [in] DELETEFOLDERFLAGS dwFlags, [in] IStoreCallback *pCallback);
HRESULT GetFolderInfo( [in] FOLDERID idFolder, [in,out] LPFOLDERINFO pInfo); // Call IMessageStore::FreeRecord on success
HRESULT GetSpecialFolderInfo( [in] FOLDERID idStore, [in] SPECIALFOLDER tySpecial, [in,out] LPFOLDERINFO pInfo); // Call IMessageStore::FreeRecord on success
HRESULT SubscribeToFolder( [in] FOLDERID idFolder, [in] BOOL fSubscribe, [in] IStoreCallback *pCallback);
HRESULT GetFolderCounts( [in] FOLDERID idFolder, [in] IStoreCallback *pCallback);
HRESULT UpdateFolderCounts( [in] FOLDERID idFolder, [in] LONG lMsgs, [in] LONG lUnread, [in] LONG lWatchedUnread, [in] LONG lWatched);
HRESULT EnumChildren( [in] FOLDERID idParent, [in] BOOL fSubscribed, [out] IEnumerateFolders **ppEnum);
HRESULT GetNewGroups( [in] FOLDERID idFolder, [in] LPSYSTEMTIME pSysTime, [in] IStoreCallback *pCallback); } cpp_quote("#endif // __LPMESSAGESTORE_DEFINED")
//---------------------------------------------------------------------- // IEnumerateFolders //---------------------------------------------------------------------- cpp_quote("#ifndef __LPENUMERATEFOLDERS_DEFINED") cpp_quote("#define __LPENUMERATEFOLDERS_DEFINED") [ object, uuid(8551C145-0C39-11d2-9A6A-00C04FA309D4), pointer_default(unique) ] interface IEnumerateFolders : IUnknown { //------------------------------------------------------------------ // Pointer to an interface of this type //------------------------------------------------------------------ typedef IEnumerateFolders *LPENUMERATEFOLDERS; //------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT Next( [in] ULONG cFetch, [in,out] LPFOLDERINFO prgInfo, [out] ULONG *pcFetched);
HRESULT Skip( [in] ULONG cItems);
HRESULT Reset(void);
HRESULT Clone( [out] IEnumerateFolders **ppEnum);
HRESULT Count( [out] ULONG *pcItems); } cpp_quote("#endif // __LPENUMERATEFOLDERS_DEFINED")
//---------------------------------------------------------------------- // IMessageFolder //---------------------------------------------------------------------- cpp_quote("#ifndef __LPMESSAGEFOLDER_DEFINED") cpp_quote("#define __LPMESSAGEFOLDER_DEFINED") [ object, uuid(E883FC76-EC08-11d1-9A53-00C04FA309D4), pointer_default(unique) ] interface IMessageFolder : IDatabase { //------------------------------------------------------------------ // Pointer to an interface of this type //------------------------------------------------------------------ typedef IMessageFolder *LPMESSAGEFOLDER; //------------------------------------------------------------------ // Types //------------------------------------------------------------------ DECLARE_HANDLE(MESSAGEID); typedef MESSAGEID *LPMESSAGEID;
//------------------------------------------------------------------ // MESSAGEID Constants //------------------------------------------------------------------ const MESSAGEID MESSAGEID_INVALID = (MESSAGEID)-1;
//------------------------------------------------------------------ // Message Database Version //------------------------------------------------------------------ const DWORD MESSAGE_DATABASE_VERSION = 5; const DWORD CB_COLUMNS = 256;
//------------------------------------------------------------------ // MSGTABLECOLID //------------------------------------------------------------------ typedef enum tagMSGTABLECOLID { MSGCOL_ID=0, MSGCOL_FLAGS, MSGCOL_DATE, MSGCOL_LINECOUNT, MSGCOL_STREAM, MSGCOL_NORMALSUBJ, MSGCOL_DOWNLOADTIME, MSGCOL_MESSAGEID, MSGCOL_SUBJECT, MSGCOL_FROMHEADER, MSGCOL_REFERENCES, MSGCOL_XREF, MSGCOL_SERVER, MSGCOL_DISPLAYFROM, MSGCOL_EMAILFROM, MSGCOL_LANGUAGE, MSGCOL_PRIORITY, MSGCOL_SIZE, MSGCOL_RECEIVEDDATE, MSGCOL_DISPLAYTO, MSGCOL_EMAILTO, MSGCOL_PARTIALINFO, MSGCOL_POP3UIDL, MSGCOL_USERNAMEOLD, MSGCOL_PARTIALID, MSGCOL_FORWARDTO, MSGCOL_ACCOUNTNAME, MSGCOL_ACCOUNTID, MSGCOL_OFFSETTABLE, MSGCOL_HIGHLIGHT, MSGCOL_FOLDER, MSGCOL_FINDFOLDER, MSGCOL_FINDSOURCE, MSGCOL_PARENTOLD, MSGCOL_THREADIDOLD, MSGCOL_URLCOMPONENT, MSGCOL_STREAMIDOLD, MSGCOL_VERSION, MSGCOL_MSOESREC, MSGCOL_LASTID } MSGTABLECOLID;
//---------------------------------------------------------------------- // RULEID //---------------------------------------------------------------------- DECLARE_HANDLE(RULEID); typedef RULEID *LPRULEID;
const RULEID RULEID_INVALID = (RULEID) -1; //------------------------------------------------------------------ // FOLDERUSERDATA - 1560 Bytes Long //------------------------------------------------------------------ typedef struct tagFOLDERUSERDATA { DWORD fInitialized; // 4 Has this folder been initialized yet FOLDERTYPE tyFolder; // the folder type CHAR szAcctId[CCHMAX_ACCOUNT_NAME]; // 276 Account Id that folder belongs to CHAR szFolder[CCHMAX_FOLDER_NAME]; // 532 Folder Name SPECIALFOLDER tySpecial; // 536 Special Folder Type DWORD fSubscribed; // 540 Is the folder subscribed ? DWORD idSort; // 544 Current View Sort Order DWORD fAscending; // 548 Current view is ascending ? DWORD fThreaded; // 552 Current view is threaded RULEID ridFilter; // 556 Current Filter for this Folder DWORD dwFilterVersion; // 560 Version of the filter FOLDERID idFolder; // 564 Id of this folder DWORD fWelcomeAdded; // 568 I have already added a welcome message... DWORD dwUIDValidity; // 572 IMAP: Tells us if current acache is invalid DWORD idMsgSelected; // The last Selected row BYTE rgbColumns[CB_COLUMNS]; // Persisted Column Set DWORD dwReserved1; // Used for sorting children DWORD dwReserved2; // Reserved DWORD fExpandAll; // Expand All Threads? DWORD dwReserved3; // Do we have a dead filter? BYTE fViewCounts; // Converted to view counts BYTE fNewThreadModel; // Converted to shared stream table ? BYTE fWatchedCounts; // Converted to watched unread counts? BYTE fTotalWatched; // Total Watched has been migrated. BYTE fShowDeleted; // Current view shows deleted messages BYTE fShowReplies; // Current view shows message replies BYTE fNoIndexes; // No more indexes BYTE rgReserved[717]; // Reserved } FOLDERUSERDATA, *LPFOLDERUSERDATA;
//------------------------------------------------------------------ // ARF_ article flags - These are the MSGFLAGS //------------------------------------------------------------------ typedef DWORD MESSAGEFLAGS; cpp_quote("#define ARF_HASBODY 0x00000001") cpp_quote("#define ARF_ARTICLE_EXPIRED 0x00000002") cpp_quote("#define ARF_KEEPBODY 0x00000004") cpp_quote("#define ARF_UNSENT 0x00000008") cpp_quote("#define ARF_MIGRATED 0x00000010") cpp_quote("#define ARF_FLAGGED 0x00000020") cpp_quote("#define ARF_ENDANGERED 0x00000040") cpp_quote("#define ARF_READ 0x00000080") cpp_quote("#define ARF_DOWNLOAD 0x00000100") //cpp_quote("#define ARF_VISIBLE 0x00000200") cpp_quote("#define ARF_NOSECUI 0x00000400") cpp_quote("#define ARF_NEWSMSG 0x00000800") cpp_quote("#define ARF_SIGNED 0x00001000") cpp_quote("#define ARF_ENCRYPTED 0x00002000") cpp_quote("#define ARF_HASATTACH 0x00004000") cpp_quote("#define ARF_VOICEMAIL 0x00008000") cpp_quote("#define ARF_SUBMITTED 0x00010000") cpp_quote("#define ARF_RECEIVED 0x00020000") cpp_quote("#define ARF_RCPTSENT 0x00040000") cpp_quote("#define ARF_REPLIED 0x00080000") cpp_quote("#define ARF_FORWARDED 0x00100000") //cpp_quote("#define ARF_EXPANDED 0x00200000") cpp_quote("#define ARF_WATCH 0x00400000") cpp_quote("#define ARF_IGNORE 0x00800000") //cpp_quote("#define ARF_HASCHILDREN 0x01000000") cpp_quote("#define ARF_RCPT_PROCESSED 0x01000000") cpp_quote("#define ARF_DELETED_OFFLINE 0x02000000") cpp_quote("#define ARF_PARTIAL_RECVTIME 0x04000000") cpp_quote("#define ARF_ALLFLAGS 0x0FFFFFFF")
//------------------------------------------------------------------ // MESSAGE_COMBINED //------------------------------------------------------------------ const DWORD MESSAGE_COMBINED = -1;
//------------------------------------------------------------------ // MESSAGEINFO //------------------------------------------------------------------ typedef struct tagMESSAGEINFO { BYTE *pAllocated; BYTE bVersion; DWORD_PTR dwReserved; MESSAGEID idMessage; MESSAGEFLAGS dwFlags; FILETIME ftSent; DWORD cLines; FILEADDRESS faStream; DWORD idStreamOld; LPSTR pszNormalSubj; FILETIME ftDownloaded; LPSTR pszMessageId; LPSTR pszSubject; LPSTR pszFromHeader; LPSTR pszReferences; LPSTR pszXref; LPSTR pszServer; LPSTR pszDisplayFrom; LPSTR pszEmailFrom; WORD wLanguage; WORD wPriority; // IMSGPRIORITY DWORD cbMessage; FILETIME ftReceived; LPSTR pszDisplayTo; LPSTR pszEmailTo; DWORD dwPartial; // Set to MESSAGE_COMBINED to indicate its a combined message LPSTR pszUidl; LPSTR pszUserNameOld; LPSTR pszPartialId; LPSTR pszForwardTo; LPSTR pszAcctName; LPSTR pszAcctId; LPSTR pszUrlComponent; BLOB Offsets; WORD wHighlight; LPSTR pszFolder; // Only used in a find folder DWORD iFindFolder; // Only used in a find folder MESSAGEID idFindSource; // Only used in a find folder MESSAGEID idParentOld; // Used for Message Threading BLOB ThreadIdOld; // Used for custom threaded view BYTE bUnused; // The major version of oe in which this was downloaded by LPSTR pszMSOESRec; } MESSAGEINFO, *LPMESSAGEINFO; //------------------------------------------------------------------ // Message Record Members //------------------------------------------------------------------ cpp_quote("BEGIN_COLUMN_ARRAY(g_rgMsgTblColumns, MSGCOL_LASTID)") cpp_quote(" DEFINE_COLUMN(MSGCOL_ID, CDT_UNIQUE, MESSAGEINFO, idMessage)") cpp_quote(" DEFINE_COLUMN(MSGCOL_FLAGS, CDT_FLAGS, MESSAGEINFO, dwFlags)") cpp_quote(" DEFINE_COLUMN(MSGCOL_DATE, CDT_FILETIME, MESSAGEINFO, ftSent)") cpp_quote(" DEFINE_COLUMN(MSGCOL_LINECOUNT, CDT_DWORD, MESSAGEINFO, cLines)") cpp_quote(" DEFINE_COLUMN(MSGCOL_STREAM, CDT_STREAM, MESSAGEINFO, faStream)") cpp_quote(" DEFINE_COLUMN(MSGCOL_NORMALSUBJ, CDT_VARSTRA, MESSAGEINFO, pszNormalSubj)") cpp_quote(" DEFINE_COLUMN(MSGCOL_DOWNLOADTIME, CDT_FILETIME, MESSAGEINFO, ftDownloaded)") cpp_quote(" DEFINE_COLUMN(MSGCOL_MESSAGEID, CDT_VARSTRA, MESSAGEINFO, pszMessageId)") cpp_quote(" DEFINE_COLUMN(MSGCOL_SUBJECT, CDT_VARSTRA, MESSAGEINFO, pszSubject)") cpp_quote(" DEFINE_COLUMN(MSGCOL_FROMHEADER, CDT_VARSTRA, MESSAGEINFO, pszFromHeader)") cpp_quote(" DEFINE_COLUMN(MSGCOL_REFERENCES, CDT_VARSTRA, MESSAGEINFO, pszReferences)") cpp_quote(" DEFINE_COLUMN(MSGCOL_XREF, CDT_VARSTRA, MESSAGEINFO, pszXref)") cpp_quote(" DEFINE_COLUMN(MSGCOL_SERVER, CDT_VARSTRA, MESSAGEINFO, pszServer)") cpp_quote(" DEFINE_COLUMN(MSGCOL_DISPLAYFROM, CDT_VARSTRA, MESSAGEINFO, pszDisplayFrom)") cpp_quote(" DEFINE_COLUMN(MSGCOL_EMAILFROM, CDT_VARSTRA, MESSAGEINFO, pszEmailFrom)") cpp_quote(" DEFINE_COLUMN(MSGCOL_LANGUAGE, CDT_WORD, MESSAGEINFO, wLanguage)") cpp_quote(" DEFINE_COLUMN(MSGCOL_PRIORITY, CDT_WORD, MESSAGEINFO, wPriority)") cpp_quote(" DEFINE_COLUMN(MSGCOL_SIZE, CDT_DWORD, MESSAGEINFO, cbMessage)") cpp_quote(" DEFINE_COLUMN(MSGCOL_RECEIVEDDATE, CDT_FILETIME, MESSAGEINFO, ftReceived)") cpp_quote(" DEFINE_COLUMN(MSGCOL_DISPLAYTO, CDT_VARSTRA, MESSAGEINFO, pszDisplayTo)") cpp_quote(" DEFINE_COLUMN(MSGCOL_EMAILTO, CDT_VARSTRA, MESSAGEINFO, pszEmailTo)") cpp_quote(" DEFINE_COLUMN(MSGCOL_PARTIALINFO, CDT_DWORD, MESSAGEINFO, dwPartial)") cpp_quote(" DEFINE_COLUMN(MSGCOL_POP3UIDL, CDT_VARSTRA, MESSAGEINFO, pszUidl)") cpp_quote(" DEFINE_COLUMN(MSGCOL_USERNAMEOLD, CDT_VARSTRA, MESSAGEINFO, pszUserNameOld)") cpp_quote(" DEFINE_COLUMN(MSGCOL_PARTIALID, CDT_VARSTRA, MESSAGEINFO, pszPartialId)") cpp_quote(" DEFINE_COLUMN(MSGCOL_FORWARDTO, CDT_VARSTRA, MESSAGEINFO, pszForwardTo)") cpp_quote(" DEFINE_COLUMN(MSGCOL_ACCOUNTNAME, CDT_VARSTRA, MESSAGEINFO, pszAcctName)") cpp_quote(" DEFINE_COLUMN(MSGCOL_ACCOUNTID, CDT_VARSTRA, MESSAGEINFO, pszAcctId)") cpp_quote(" DEFINE_COLUMN(MSGCOL_OFFSETTABLE, CDT_VARBLOB, MESSAGEINFO, Offsets)") cpp_quote(" DEFINE_COLUMN(MSGCOL_HIGHLIGHT, CDT_WORD, MESSAGEINFO, wHighlight)") cpp_quote(" DEFINE_COLUMN(MSGCOL_FOLDER, CDT_VARSTRA, MESSAGEINFO, pszFolder)") cpp_quote(" DEFINE_COLUMN(MSGCOL_FINDFOLDER, CDT_DWORD, MESSAGEINFO, iFindFolder)") cpp_quote(" DEFINE_COLUMN(MSGCOL_FINDSOURCE, CDT_DWORD, MESSAGEINFO, idFindSource)") cpp_quote(" DEFINE_COLUMN(MSGCOL_PARENTOLD, CDT_DWORD, MESSAGEINFO, idParentOld)") cpp_quote(" DEFINE_COLUMN(MSGCOL_THREADIDOLD, CDT_VARBLOB, MESSAGEINFO, ThreadIdOld)") cpp_quote(" DEFINE_COLUMN(MSGCOL_URLCOMPONENT, CDT_VARSTRA, MESSAGEINFO, pszUrlComponent)") cpp_quote(" DEFINE_COLUMN(MSGCOL_STREAMIDOLD, CDT_DWORD, MESSAGEINFO, idStreamOld)") cpp_quote(" DEFINE_COLUMN(MSGCOL_VERSION, CDT_BYTE, MESSAGEINFO, bUnused)") cpp_quote(" DEFINE_COLUMN(MSGCOL_MSOESREC, CDT_VARSTRA, MESSAGEINFO, pszMSOESRec)") cpp_quote("END_COLUMN_ARRAY")
//------------------------------------------------------------------ // Database MethodIds //------------------------------------------------------------------ cpp_quote("#define METHODID_ISREPLYPOSTVISIBLE 100") cpp_quote("#define METHODID_MESSAGEAGEINDAYS 101")
//------------------------------------------------------------------ // Message Database Symbol Table for Regular Expression Support //------------------------------------------------------------------ cpp_quote("BEGIN_SYMBOL_TABLE(g_MsgSymbolTable, 21)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_READ\", ARF_READ)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_HASBODY\", ARF_HASBODY)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_ENDANGERED\", ARF_ENDANGERED)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_COLUMN, \"MSGCOL_FLAGS\", MSGCOL_FLAGS)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_COLUMN, \"MSGCOL_EMAILFROM\", MSGCOL_EMAILFROM)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_WATCH\", ARF_WATCH)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_IGNORE\", ARF_IGNORE)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_HASATTACH\", ARF_HASATTACH)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_SIGNED\", ARF_SIGNED)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_ENCRYPTED\", ARF_ENCRYPTED)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_COLUMN, \"MSGCOL_PRIORITY\", MSGCOL_PRIORITY)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_COLUMN, \"MSGCOL_SUBJECT\", MSGCOL_SUBJECT)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_COLUMN, \"MSGCOL_FROMHEADER\", MSGCOL_FROMHEADER)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_COLUMN, \"MSGCOL_ACCOUNTID\", MSGCOL_ACCOUNTID)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_COLUMN, \"MSGCOL_LINECOUNT\", MSGCOL_LINECOUNT)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"IMSG_PRI_HIGH\", IMSG_PRI_HIGH)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"IMSG_PRI_LOW\", IMSG_PRI_LOW)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_COLUMN, \"MSGCOL_DISPLAYFROM\", MSGCOL_DISPLAYFROM)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_FLAGGED\", ARF_FLAGGED)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_METHOD, \"MessageAgeInDays\", METHODID_MESSAGEAGEINDAYS)") cpp_quote(" DEFINE_SYMBOL(SYMBOL_DWORD, \"ARF_DELETED_OFFLINE\", ARF_DELETED_OFFLINE)") cpp_quote("END_SYMBOL_TABLE")
//------------------------------------------------------------------ // Index Constants //------------------------------------------------------------------ const INDEXORDINAL IINDEX_HTTPURL = 3; const INDEXORDINAL IINDEX_FINDER = 2; const INDEXORDINAL IINDEX_WATCHIGNORE = 1;
//------------------------------------------------------------------ // g_MsgTblPrimaryIndex //------------------------------------------------------------------ cpp_quote("BEGIN_TABLE_INDEX(g_MsgTblPrimaryIndex, 1)") cpp_quote(" DEFINE_KEY(MSGCOL_ID, 0, 0)") cpp_quote("END_TABLE_INDEX")
//------------------------------------------------------------------ // g_WatchIgnoreIndex //------------------------------------------------------------------ cpp_quote("BEGIN_TABLE_INDEX(g_WatchIgnoreIndex, 2)") cpp_quote(" DEFINE_KEY(MSGCOL_MESSAGEID, 0, 0)") cpp_quote(" DEFINE_KEY(MSGCOL_ID, 0, 0)") cpp_quote("END_TABLE_INDEX")
//------------------------------------------------------------------ // g_HttpUrlIndex //------------------------------------------------------------------ cpp_quote("BEGIN_TABLE_INDEX(g_HttpUrlIndex, 2)") cpp_quote(" DEFINE_KEY(MSGCOL_URLCOMPONENT, 0, 0)") cpp_quote(" DEFINE_KEY(MSGCOL_ID, 0, 0)") cpp_quote("END_TABLE_INDEX")
//------------------------------------------------------------------ // Message Record Format //------------------------------------------------------------------ cpp_quote("BEGIN_TABLE_SCHEMA(g_MessageTableSchema, CLSID_MessageDatabase, MESSAGEINFO)") cpp_quote(" SCHEMA_PROPERTY(MESSAGE_DATABASE_VERSION)") cpp_quote(" SCHEMA_PROPERTY(TSF_HASSTREAMS | TSF_RESETIFBADVERSION | TSF_HASEXTENSION)") cpp_quote(" SCHEMA_PROPERTY(sizeof(FOLDERUSERDATA))") cpp_quote(" SCHEMA_PROPERTY(offsetof(MESSAGEINFO, idMessage))") cpp_quote(" SCHEMA_PROPERTY(MSGCOL_LASTID)") cpp_quote(" SCHEMA_PROPERTY(g_rgMsgTblColumns)") cpp_quote(" SCHEMA_PROPERTY(&g_MsgTblPrimaryIndex)") cpp_quote(" SCHEMA_PROPERTY(&g_MsgSymbolTable)") cpp_quote("END_TABLE_SCHEMA")
//------------------------------------------------------------------ // Extern'ed Record Formats //------------------------------------------------------------------ cpp_quote("extern const TABLESCHEMA g_MessageTableSchema;") cpp_quote("extern const TABLEINDEX g_WatchIgnoreIndex;") cpp_quote("extern const TABLEINDEX g_HttpUrlIndex;")
//---------------------------------------------------------------------- // COLUMN_ID //---------------------------------------------------------------------- typedef enum tagCOLUMN_ID { COLUMN_TO = 0, COLUMN_FROM, COLUMN_SUBJECT, COLUMN_RECEIVED, COLUMN_SENT, COLUMN_SIZE, COLUMN_FOLDER, COLUMN_TOTAL, COLUMN_UNREAD, COLUMN_NEW, COLUMN_DESCRIPTION, COLUMN_LAST_UPDATED, COLUMN_WASTED_SPACE, COLUMN_ACCOUNT, COLUMN_LINES, COLUMN_PRIORITY, COLUMN_ATTACHMENT, COLUMN_SHOW, COLUMN_DOWNLOAD, COLUMN_NEWSGROUP, COLUMN_FLAG, COLUMN_SUBSCRIBE, COLUMN_DOWNLOADMSG, COLUMN_THREADSTATE, COLUMN_MSGID, COLUMN_MAX } COLUMN_ID;
//------------------------------------------------------------------ // RESULTINFO //------------------------------------------------------------------ typedef struct tagRESULTINFO { HRESULT hrResult; // Result of Operation (S_OK means it succeeded) MESSAGEID idMessage; // MessageId Of Affected Message MESSAGEFLAGS dwFlags; // Flags of the message } RESULTINFO, *LPRESULTINFO;
//------------------------------------------------------------------ // RESULTLIST //------------------------------------------------------------------ typedef struct tagRESULTLIST { DWORD cAllocated; DWORD cMsgs; DWORD cValid; LPRESULTINFO prgResult; } RESULTLIST, *LPRESULTLIST;
//---------------------------------------------------------------------- // MESSAGEIDLIST - A list of message ids (DWORDs) //---------------------------------------------------------------------- typedef struct tagMESSAGEIDLIST { DWORD cAllocated; DWORD cMsgs; LPMESSAGEID prgidMsg; } MESSAGEIDLIST, *LPMESSAGEIDLIST;
//------------------------------------------------------------------ // FOLDERSORTINFO //------------------------------------------------------------------ typedef struct tagFOLDERSORTINFO { COLUMN_ID idColumn; BOOL fAscending; BOOL fThreaded; BOOL fExpandAll; RULEID ridFilter; BOOL fShowDeleted; BOOL fShowReplies; } FOLDERSORTINFO, *LPFOLDERSORTINFO;
//------------------------------------------------------------------ // ADJUSTFLAGS //------------------------------------------------------------------ typedef struct tagADJUSTFLAGS { MESSAGEFLAGS dwRemove; MESSAGEFLAGS dwAdd; } ADJUSTFLAGS, *LPADJUSTFLAGS;
//------------------------------------------------------------------ // OPENMESSAGEFLAGS //------------------------------------------------------------------ typedef DWORD OPENMESSAGEFLAGS; cpp_quote("#define OPEN_MESSAGE_SECURE 0x00000001") cpp_quote("#define OPEN_MESSAGE_CACHEDONLY 0x00000002")
//------------------------------------------------------------------ // SAVEMESSAGEFLAGS //------------------------------------------------------------------ typedef DWORD SAVEMESSAGEFLAGS; cpp_quote("#define SAVE_MESSAGE_GENID 0x00000001")
//------------------------------------------------------------------ // COPYMESSAGEFLAGS //------------------------------------------------------------------ typedef DWORD COPYMESSAGEFLAGS; cpp_quote("#define COPY_MESSAGE_MOVE 0x00000001")
//------------------------------------------------------------------ // DELETEMESSAGEFLAGS //------------------------------------------------------------------ typedef DWORD DELETEMESSAGEFLAGS; cpp_quote("#define DELETE_MESSAGE_NOTRASHCAN 0x00000001") cpp_quote("#define DELETE_MESSAGE_UNDELETE 0x00000002 // IMAP-only, unmarks msg for deletion") cpp_quote("#define DELETE_MESSAGE_NOPROMPT 0x00000004") cpp_quote("#define DELETE_MESSAGE_MAYIGNORENOTRASH 0x00000008 // For HTTPMail. HTTPServer doesn't support NOTRASH yet") cpp_quote("#define DELETE_MESSAGE_NOUIDLUPDATE 0x00000010")
//------------------------------------------------------------------ // SYNCFOLDERFLAGS //------------------------------------------------------------------ typedef DWORD SYNCFOLDERFLAGS; cpp_quote("#define SYNC_FOLDER_DEFAULT 0x00000000") cpp_quote("#define SYNC_FOLDER_XXX_HEADERS 0x00000001") cpp_quote("#define SYNC_FOLDER_NEW_HEADERS 0x00000002") cpp_quote("#define SYNC_FOLDER_CACHED_HEADERS 0x00000004") cpp_quote("#define SYNC_FOLDER_PURGE_DELETED 0x00000008") cpp_quote("#define SYNC_FOLDER_ALLFLAGS 0x0000000F")
//------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT Initialize( [in] IMessageStore *pStore, [in] IMessageServer *pServer, [in] OPENFOLDERFLAGS dwFlags, [in] FOLDERID idFolder);
HRESULT SetOwner( [in] IStoreCallback *pDefaultCallback);
HRESULT Close();
HRESULT GetFolderId( [out] LPFOLDERID pidFolder);
HRESULT GetMessageFolderId( [in] MESSAGEID idMessage, [out] LPFOLDERID pidFolder);
HRESULT Synchronize( [in] SYNCFOLDERFLAGS dwFlags, [in] DWORD cHeaders, [in] IStoreCallback *pCallback);
HRESULT OpenMessage( [in] MESSAGEID idMessage, [in] OPENMESSAGEFLAGS dwFlags, [out] IMimeMessage **ppMessage, [in] IStoreCallback *pCallback);
HRESULT SaveMessage( [in,out] LPMESSAGEID pidMessage, [in] SAVEMESSAGEFLAGS dwOptions, [in] MESSAGEFLAGS dwFlags, [in] IStream *pStream, // Efficient if this is a Stream Opened from IDatabase::CreateStream [in] IMimeMessage *pMessage, [in] IStoreCallback *pCallback);
HRESULT SetMessageStream( [in] MESSAGEID idMessage, [in] IStream *pStream);
HRESULT SetMessageFlags( [in] LPMESSAGEIDLIST pList, [in] LPADJUSTFLAGS pFlags, [in,out] LPRESULTLIST pResults, [in] IStoreCallback *pCallback);
HRESULT CopyMessages( [in] IMessageFolder *pDest, [in] COPYMESSAGEFLAGS dwFlags, [in] LPMESSAGEIDLIST pList, [in] LPADJUSTFLAGS pFlags, [in,out] LPRESULTLIST pResults, [in] IStoreCallback *pCallback);
HRESULT DeleteMessages( [in] DELETEMESSAGEFLAGS dwFlags, [in] LPMESSAGEIDLIST pList, [in,out] LPRESULTLIST pResults, [in] IStoreCallback *pCallback);
HRESULT ResetFolderCounts( [in] DWORD cMessages, [in] DWORD cUnread, [in] DWORD cWatchedUnread, [in] DWORD cWatched);
HRESULT IsWatched( [in] LPCSTR pszReferences, [in] LPCSTR pszSubject);
HRESULT GetDatabase( [out] IDatabase **ppDB);
HRESULT ConnectionAddRef(void);
HRESULT ConnectionRelease(void);
HRESULT GetAdBarUrl( [in] IStoreCallback *pCallback); } cpp_quote("#endif // __LPMESSAGEFOLDER_DEFINED")
//---------------------------------------------------------------------- // ITimeoutCallback //---------------------------------------------------------------------- cpp_quote("#ifndef __LPTIMEOUTCALLBACK_DEFINED") cpp_quote("#define __LPTIMEOUTCALLBACK_DEFINED") [ object, uuid(28B44B1D-07A9-11d2-9A63-00C04FA309D4), pointer_default(unique) ] interface ITimeoutCallback : IUnknown { //------------------------------------------------------------------ // Pointer to an interface of this type //------------------------------------------------------------------ typedef ITimeoutCallback *LPTIMEOUTCALLBACK;
//------------------------------------------------------------------ // TIMEOUTRESPONSE //------------------------------------------------------------------ typedef enum tagTIMEOUTRESPONSE { TIMEOUT_RESPONSE_STOP, TIMEOUT_RESPONSE_WAIT } TIMEOUTRESPONSE;
//------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT OnTimeoutResponse( [in] TIMEOUTRESPONSE eResponse); }; cpp_quote("#endif // __LPTIMEOUTCALLBACK_DEFINED")
//---------------------------------------------------------------------- // IOperationCancel //---------------------------------------------------------------------- cpp_quote("#ifndef __LPOPERATIONCANCEL_DEFINED") cpp_quote("#define __LPOPERATIONCANCEL_DEFINED") [ object, uuid(F4DA2F80-07A0-11d2-AAB3-006097D474C4), pointer_default(unique) ] interface IOperationCancel : IUnknown { typedef enum tagCANCELTYPE { CT_INVALID, CT_ABORT, CT_CANCEL } CANCELTYPE;
//------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT Cancel( [in] CANCELTYPE tyCancel);
} cpp_quote("#endif // __LPOPERATIONCANCEL_DEFINED")
//---------------------------------------------------------------------- // IStoreCallback //---------------------------------------------------------------------- cpp_quote("#ifndef __LPSTORECALLBACK_DEFINED") cpp_quote("#define __LPSTORECALLBACK_DEFINED") [ object, uuid(CFAD2437-EC54-11d1-9A54-00C04FA309D4), pointer_default(unique) ] interface IStoreCallback : IUnknown { //------------------------------------------------------------------ // Pointer to an interface of this type //------------------------------------------------------------------ typedef IStoreCallback *LPSTORECALLBACK;
//------------------------------------------------------------------ // STOREOPERATION //------------------------------------------------------------------ typedef enum tagSTOREOPERATIONTYPE { SOT_INVALID, SOT_CONNECTION_STATUS, // Connect and logon to server. pszStatus = Server Name, dwCurrent = IXPSTATUS SOT_SYNC_FOLDER, // Synchronizing fldr (new hdr DL/cached hdr upld). pszStatus = Folder Name SOT_GET_MESSAGE, // Downloading message body into folder. pszStatus = NULL SOT_PUT_MESSAGE, // Uploading message body into folder. pszStatus = dest Folder Name SOT_COPYMOVE_MESSAGE, // Copying/moving msg. pszStatus = dest Folder Name SOT_SYNCING_STORE, // Synchronizing folder list. pszStatus = Account Name, OnProgress is STEPPED (dwCurrent = 1, dwMax = 0) SOT_CREATE_FOLDER, // Creating folder. pszStatus = New Folder Name SOT_SEARCHING, // Searching the Store: pszStatus equals current folder name SOT_DELETING_MESSAGES, // Deleting messages. pszStatus = NULL SOT_SET_MESSAGEFLAGS, // Setting message flags pszStatus = NULL SOT_MOVE_FOLDER, SOT_DELETE_FOLDER, SOT_RENAME_FOLDER, SOT_SUBSCRIBE_FOLDER, SOT_UPDATE_FOLDER, SOT_SYNCING_DESCRIPTIONS, SOT_GET_NEW_GROUPS, SOT_NEW_MAIL_NOTIFICATION, // Notification of new mail arrival (returned via OnProgress only) pszStatus = NULL SOT_PURGING_MESSAGES, // Purging messages (IMAP only at this point). pszStatus = NULL SOT_GET_WATCH_INFO, // Searching for messages in watched threads SOT_SORTING, // Sorting the folder pszStatus=NULL. SOT_GET_ADURL, // Get the Ad URL from Hotmail SOT_GET_HTTP_MINPOLLINGINTERVAL // Get the maximum polling interval } STOREOPERATIONTYPE;
//------------------------------------------------------------------ // STOREERROR //------------------------------------------------------------------ typedef struct tagSTOREERROR { HRESULT hrResult; // Error code (same val as hrComplete in OnComplete) UINT uiServerError; // Server generated error number HRESULT hrServerError; // Associated HRESULT of server error DWORD dwSocketError; // Socket error as defined in winsock.h LPSTR pszProblem; // Description of the problem LPSTR pszDetails; // Last server response/detailed problem info LPSTR pszAccount; // Friendly name for this account LPSTR pszServer; // Name of the server we tried to connect to LPSTR pszFolder; // Name of the folder/group LPSTR pszUserName; // Plaintext name user tried to log in with LPSTR pszProtocol; // Protocol in use LPSTR pszConnectoid; // RAS connection name RASCONNTYPE rasconntype; // RAS connection type IXPTYPE ixpType; // Protocol in use (machine-identifiable) DWORD dwPort; // Port number we tried to connect with BOOL fSSL; // Is this an SSL secure connection? BOOL fTrySicily; // Try using sicily authentication DWORD dwFlags; // Various additional information } STOREERROR, *LPSTOREERROR;
//------------------------------------------------------------------ // Constants //------------------------------------------------------------------ cpp_quote("#define NOSTORECALLBACK NULL") const DWORD SE_FLAG_FLUSHALL = 0x00000001; // Flush all pending operations: IMessageServer has disconnected
const DWORD CC_FLAG_DONTPROMPT = 0x00000001; // Do not prompt user during call to CanConnect
//------------------------------------------------------------------ // STOREOPERATIONINFO //------------------------------------------------------------------ typedef struct tagSTOREOPERATIONINFO { DWORD cbSize; MESSAGEID idMessage; LPSTR pszUrl; DWORD dwMinPollingInterval; } STOREOPERATIONINFO, *LPSTOREOPERATIONINFO;
//------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT OnBegin( [in] STOREOPERATIONTYPE tyOperation, [in] LPSTOREOPERATIONINFO pOpInfo, [in] IOperationCancel *pCancel);
HRESULT OnProgress( [in] STOREOPERATIONTYPE tyOperation, [in] DWORD dwCurrent, [in] DWORD dwMax, [in] LPCSTR pszStatus);
HRESULT OnTimeout( [in] LPINETSERVER pServer, [in,out] LPDWORD pdwTimeout, [in] IXPTYPE ixpServerType);
HRESULT CanConnect( [in] LPCSTR pszAccountId, [in] DWORD dwFlags);
HRESULT OnLogonPrompt( [in,out] LPINETSERVER pServer, [in] IXPTYPE ixpServerType);
HRESULT OnComplete( [in] STOREOPERATIONTYPE tyOperation, [in] HRESULT hrComplete, [in] LPSTOREOPERATIONINFO pOpInfo, [in] LPSTOREERROR pErrorInfo);
HRESULT OnPrompt( [in] HRESULT hrError, [in] LPCTSTR pszText, [in] LPCTSTR pszCaption, [in] UINT uType, [out] INT *piUserResponse);
HRESULT GetParentWindow( [in] DWORD dwReserved, [out] HWND *phwndParent);
} cpp_quote("#endif // __LPSTORECALLBACK_DEFINED")
//---------------------------------------------------------------------- // IMessageServer //---------------------------------------------------------------------- cpp_quote("#ifndef __LPMESSAGESERVER_DEFINED") cpp_quote("#define __LPMESSAGESERVER_DEFINED") [ object, uuid(86847A47-EDAF-11d1-9A54-00C04FA309D4), pointer_default(unique) ] interface IMessageServer : IUnknown { //------------------------------------------------------------------ // Pointer to an interface of this type //------------------------------------------------------------------ typedef IMessageServer *LPMESSAGESERVER;
//------------------------------------------------------------------ // CLOSEFLAGS //------------------------------------------------------------------ cpp_quote("#define MSGSVRF_DROP_CONNECTION 0x00000001") cpp_quote("#define MSGSVRF_HANDS_OFF_SERVER 0x00000002")
//------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT Initialize( [in] IMessageStore *pStore, [in] FOLDERID idStoreRoot, [in] IMessageFolder *pFolder, [in] FOLDERID idFolder);
HRESULT ResetFolder( [in] IMessageFolder *pFolder, [in] FOLDERID idFolder);
HRESULT Close( [in] DWORD dwFlags);
HRESULT SetIdleCallback( [in] IStoreCallback *pDefaultCallback);
HRESULT SynchronizeFolder( [in] SYNCFOLDERFLAGS dwFlags, [in] DWORD cHeaders, [in] IStoreCallback *pCallback);
HRESULT GetMessage( [in] MESSAGEID idMessage, [in] IStoreCallback *pCallback);
HRESULT PutMessage( [in] FOLDERID idFolder, [in] MESSAGEFLAGS dwFlags, [in] LPFILETIME pftReceived, [in] IStream *pStream, [in] IStoreCallback *pCallback);
HRESULT CopyMessages( [in] IMessageFolder *pDest, [in] COPYMESSAGEFLAGS dwOptions, [in] LPMESSAGEIDLIST pList, [in] LPADJUSTFLAGS pFlags, [in] IStoreCallback *pCallback);
HRESULT DeleteMessages( [in] DELETEMESSAGEFLAGS dwOptions, [in] LPMESSAGEIDLIST pList, [in] IStoreCallback *pCallback);
HRESULT SetMessageFlags( [in] LPMESSAGEIDLIST pList, [in] LPADJUSTFLAGS pFlags, [in] SETMESSAGEFLAGSFLAGS dwFlags, [in] IStoreCallback *pCallback);
HRESULT GetServerMessageFlags( [in,out] MESSAGEFLAGS *pFlags);
HRESULT SynchronizeStore( [in] FOLDERID idParent, [in] SYNCSTOREFLAGS dwFlags, [in] IStoreCallback *pCallback);
HRESULT CreateFolder( [in] FOLDERID idParent, [in] SPECIALFOLDER tySpecial, [in] LPCSTR pszName, [in] FLDRFLAGS dwFlags, [in] IStoreCallback *pCallback);
HRESULT MoveFolder( [in] FOLDERID idFolder, [in] FOLDERID idParentNew, [in] IStoreCallback *pCallback);
HRESULT RenameFolder( [in] FOLDERID idFolder, [in] LPCSTR pszName, [in] IStoreCallback *pCallback);
HRESULT DeleteFolder( [in] FOLDERID idFolder, [in] DELETEFOLDERFLAGS dwFlags, [in] IStoreCallback *pCallback);
HRESULT SubscribeToFolder( [in] FOLDERID idFolder, [in] BOOL fSubscribe, [in] IStoreCallback *pCallback);
HRESULT GetFolderCounts( [in] FOLDERID idFolder, [in] IStoreCallback *pCallback);
HRESULT GetNewGroups( [in] LPSYSTEMTIME pSysTime, [in] IStoreCallback *pCallback);
HRESULT ConnectionAddRef();
HRESULT ConnectionRelease();
HRESULT GetWatchedInfo( [in] FOLDERID idFolder, [in] IStoreCallback *pCallback);
HRESULT GetAdBarUrl( [in] IStoreCallback *pCallback);
HRESULT GetMinPollingInterval( [in] IStoreCallback *pCallback); } cpp_quote("#endif // __LPMESSAGESERVER_DEFINED")
//---------------------------------------------------------------------- // IIMAPStore //---------------------------------------------------------------------- cpp_quote("#ifndef __LPIMAPSTORE_DEFINED") cpp_quote("#define __LPIMAPSTORE_DEFINED") [ object, uuid(06AE7A01-6C5B-11d2-AD88-0080C7B6E3C5), pointer_default(unique) ] interface IIMAPStore : IUnknown {
//------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT ExpungeOnExit(void);
} cpp_quote("#endif // __LPIMAPSTORE_DEFINED")
//---------------------------------------------------------------------- // INewsStore //---------------------------------------------------------------------- cpp_quote("#ifndef __LPNEWSSTORE_DEFINED") cpp_quote("#define __LPNEWSSTORE_DEFINED") [ object, uuid(522E4F81-2C98-11d2-AACA-006097D474C4), pointer_default(unique) ] interface INewsStore : IUnknown {
//------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT MarkCrossposts( [in] LPMESSAGEIDLIST pList, [in] BOOL fRead); } cpp_quote("#endif // __LPNEWSSTORE_DEFINED")
//---------------------------------------------------------------------- // IPop3UidlStore //---------------------------------------------------------------------- cpp_quote("#ifndef __LPPOP3UIDLStore_DEFINED") cpp_quote("#define __LPMESSAGEFOLDER_DEFINED") [ object, uuid(E883FC77-EC08-11d1-9A53-00C04FA309D4), pointer_default(unique) ] interface IPop3UidlStore : IUnknown { //------------------------------------------------------------------ // Pointer to an interface of this type //------------------------------------------------------------------ typedef IPop3UidlStore *LPPOP3UIDLSTORE;
//------------------------------------------------------------------ // POP3UIDL Database Version //------------------------------------------------------------------ const DWORD POP3UIDL_DATABASE_VERSION = 5;
//------------------------------------------------------------------ // UIDL Store Record Ordinals //------------------------------------------------------------------ typedef enum tagUIDLCOLID { UIDLCOL_DLTIME, UIDLCOL_DELETED, UIDLCOL_DOWNLOADED, UIDLCOL_UIDL, UIDLCOL_SERVER, UIDLCOL_ACCOUNTID, UIDLCOL_LAST } UIDLCOLID;
//------------------------------------------------------------------ // UIDLRECORD //------------------------------------------------------------------ typedef struct tagUIDLRECORD { BYTE *pAllocated; BYTE bVersion; BYTE fDownloaded; BYTE fDeleted; FILETIME ftDownload; LPSTR pszUidl; LPSTR pszServer; LPSTR pszAccountId; } UIDLRECORD, *LPUIDLRECORD;
//------------------------------------------------------------------ // UIDL Record Members //------------------------------------------------------------------ cpp_quote("BEGIN_COLUMN_ARRAY(g_rgUidlTblColumns, UIDLCOL_LAST)") cpp_quote(" DEFINE_COLUMN(UIDLCOL_DLTIME, CDT_FILETIME, UIDLRECORD, ftDownload)") cpp_quote(" DEFINE_COLUMN(UIDLCOL_DELETED, CDT_BYTE, UIDLRECORD, fDeleted)") cpp_quote(" DEFINE_COLUMN(UIDLCOL_DOWNLOADED, CDT_BYTE, UIDLRECORD, fDownloaded)") cpp_quote(" DEFINE_COLUMN(UIDLCOL_UIDL, CDT_VARSTRA, UIDLRECORD, pszUidl)") cpp_quote(" DEFINE_COLUMN(UIDLCOL_SERVER, CDT_VARSTRA, UIDLRECORD, pszServer)") cpp_quote(" DEFINE_COLUMN(UIDLCOL_ACCOUNTID, CDT_VARSTRA, UIDLRECORD, pszAccountId)") cpp_quote("END_COLUMN_ARRAY")
//------------------------------------------------------------------ // UIDL Table Primary Index Definition //------------------------------------------------------------------ cpp_quote("BEGIN_TABLE_INDEX(g_UidlTblPrimaryIndex, 3)") cpp_quote(" DEFINE_KEY(UIDLCOL_UIDL, COMPARE_ASANSI, 0)") cpp_quote(" DEFINE_KEY(UIDLCOL_SERVER, COMPARE_ASANSI | COMPARE_IGNORECASE, 0)") cpp_quote(" DEFINE_KEY(UIDLCOL_ACCOUNTID,COMPARE_ASANSI | COMPARE_IGNORECASE, 0)") cpp_quote("END_TABLE_INDEX")
//------------------------------------------------------------------ // UIDL Record Format //------------------------------------------------------------------ cpp_quote("BEGIN_TABLE_SCHEMA(g_UidlTableSchema, CLSID_Pop3UidlDatabase, UIDLRECORD)") cpp_quote(" SCHEMA_PROPERTY(POP3UIDL_DATABASE_VERSION)") cpp_quote(" SCHEMA_PROPERTY(TSF_RESETIFBADVERSION)") cpp_quote(" SCHEMA_PROPERTY(0)") cpp_quote(" SCHEMA_PROPERTY(0xffffffff)") cpp_quote(" SCHEMA_PROPERTY(UIDLCOL_LAST)") cpp_quote(" SCHEMA_PROPERTY(g_rgUidlTblColumns)") cpp_quote(" SCHEMA_PROPERTY(&g_UidlTblPrimaryIndex)") cpp_quote(" SCHEMA_PROPERTY(NULL)") cpp_quote("END_TABLE_SCHEMA")
//------------------------------------------------------------------ // Extern'ed Record Formats //------------------------------------------------------------------ cpp_quote("extern const TABLESCHEMA g_UidlTableSchema;")
} cpp_quote("#endif // __LPPOP3UIDLSTORE_DEFINED")
//---------------------------------------------------------------------- // IMessageTable //---------------------------------------------------------------------- cpp_quote("#ifndef __LPMESSAGETABLE_DEFINED") cpp_quote("#define __LPMESSAGETABLE_DEFINED") [ object, uuid(B4B796AA-EC1C-11d1-9A54-00C04FA309D4), pointer_default(unique) ] interface IMessageTable : IUnknown { //------------------------------------------------------------------ // Pointer to an interface of this type //------------------------------------------------------------------ typedef IMessageTable *LPMESSAGETABLE;
//---------------------------------------------------------------------- // Types //---------------------------------------------------------------------- typedef DWORD ROWINDEX; typedef DWORD *LPROWINDEX;
//---------------------------------------------------------------------- // GETCOUNTTYPE //---------------------------------------------------------------------- typedef enum tagGETCOUNTTYPE { MESSAGE_COUNT_VISIBLE, MESSAGE_COUNT_ALL, MESSAGE_COUNT_FILTERED, MESSAGE_COUNT_UNREAD, MESSAGE_COUNT_NOTDOWNLOADED } GETCOUNTTYPE;
//---------------------------------------------------------------------- // RELATIVEROWTYPE //---------------------------------------------------------------------- typedef enum tagRELATIVEROWTYPE { RELATIVE_ROW_PARENT, RELATIVE_ROW_CHILD, RELATIVE_ROW_ROOT } RELATIVEROWTYPE;
//---------------------------------------------------------------------- // GETNEXTTYPE //---------------------------------------------------------------------- typedef enum tagGETNEXTTYPE { GETNEXT_NEXT, GETNEXT_PREVIOUS } GETNEXTTYPE;
//---------------------------------------------------------------------- // ROWMESSAGETYPE //---------------------------------------------------------------------- typedef enum tagROWMESSAGETYPE { ROWMSG_ALL, ROWMSG_NEWS, ROWMSG_MAIL } ROWMESSAGETYPE;
//------------------------------------------------------------------ // MARK_TYPE //------------------------------------------------------------------ typedef enum tagMARK_TYPE { MARK_MESSAGE_READ = 0, MARK_MESSAGE_UNREAD, MARK_MESSAGE_DELETED, MARK_MESSAGE_UNDELETED, MARK_MESSAGE_DOWNLOAD, MARK_MESSAGE_UNDOWNLOAD, MARK_MESSAGE_FLAGGED, MARK_MESSAGE_UNFLAGGED, MARK_MESSAGE_FORWARDED, MARK_MESSAGE_UNFORWARDED, MARK_MESSAGE_REPLIED, MARK_MESSAGE_UNREPLIED, MARK_MESSAGE_SECUI, MARK_MESSAGE_NOSECUI, MARK_MESSAGE_WATCH, MARK_MESSAGE_IGNORE, MARK_MESSAGE_NORMALTHREAD, MARK_MESSAGE_RCPT_PROCESSED, MARK_MAX } MARK_TYPE;
//---------------------------------------------------------------------- // APPLYCHILDRENTYPE //---------------------------------------------------------------------- typedef enum tagAPPLYCHILDRENTYPE { APPLY_SPECIFIED, // apply only to the set of row index specified (won't recurse into children) APPLY_CHILDREN, // apply to all specified rows and all the children of the specified rows APPLY_COLLAPSED // apply to all specified rows and the children of any collapsed threads } APPLYCHILDRENTYPE;
//---------------------------------------------------------------------- // GETNEXTFLAGS //---------------------------------------------------------------------- typedef DWORD GETNEXTFLAGS; cpp_quote("#define GETNEXT_UNREAD 0x00000001") cpp_quote("#define GETNEXT_THREAD 0x00000002")
//---------------------------------------------------------------------- // ROWSTATE //---------------------------------------------------------------------- typedef DWORD ROWSTATE; cpp_quote("#define ROW_STATE_READ 0x00000001") cpp_quote("#define ROW_STATE_DELETED 0x00000002") cpp_quote("#define ROW_STATE_HAS_CHILDREN 0x00000004") cpp_quote("#define ROW_STATE_EXPANDED 0x00000008") cpp_quote("#define ROW_STATE_HAS_BODY 0x00000010") cpp_quote("#define ROW_STATE_MARKED_DOWNLOAD 0x00000020") cpp_quote("#define ROW_STATE_FLAGGED 0x00000040") cpp_quote("#define ROW_STATE_WATCHED 0x00000080") cpp_quote("#define ROW_STATE_IGNORED 0x00000100") cpp_quote("#define ROW_STATE_VALID 0x00000200")
//---------------------------------------------------------------------- // SELECTIONSTATE //---------------------------------------------------------------------- typedef DWORD SELECTIONSTATE; cpp_quote("#define SELECTION_STATE_DELETABLE 0x00000200")
//---------------------------------------------------------------------- // FINDINFO Masks //---------------------------------------------------------------------- cpp_quote("#define FIM_FROM 0x00000001") cpp_quote("#define FIM_SUBJECT 0x00000002") cpp_quote("#define FIM_TO 0x00000004") cpp_quote("#define FIM_DATEFROM 0x00000008") cpp_quote("#define FIM_DATETO 0x00000010") cpp_quote("#define FIM_BODYTEXT 0x00000020") cpp_quote("#define FIM_ATTACHMENT 0x00000040") cpp_quote("#define FIM_FLAGGED 0x00000080") cpp_quote("#define FIM_FORWARDED 0x00000100") cpp_quote("#define FIM_REPLIED 0x00000200")
//---------------------------------------------------------------------- // FINDINFO //---------------------------------------------------------------------- typedef struct tagFINDINFO { DWORD cbSize; ULONG mask; LPSTR pszFrom; LPSTR pszTo; LPSTR pszSubject; LPSTR pszBody; FILETIME ftDateFrom; FILETIME ftDateTo; BOOL fSubFolders; } FINDINFO, *LPFINDINFO;
//---------------------------------------------------------------------- // FINDNEXTFLAGS //---------------------------------------------------------------------- typedef enum tagFINDNEXTFLAGS { FINDNEXT_TYPEAHEAD = 0, FINDNEXT_ALLCOLUMNS, FINDNEXT_MAX } FINDNEXTFLAGS;
//---------------------------------------------------------------------- // IMessageTable Methods //---------------------------------------------------------------------- HRESULT Initialize( [in] FOLDERID idFolder, [in] IMessageServer *pServer, [in] BOOL fFind, [in] IStoreCallback *pCallback);
HRESULT StartFind( [in] LPFINDINFO pCriteria, [in] IStoreCallback *pCallback); HRESULT SetOwner( [in] IStoreCallback *pDefaultCallback);
HRESULT Close();
HRESULT Synchronize( [in] SYNCFOLDERFLAGS dwFlags, [in] DWORD cHeaders, [in] IStoreCallback *pCallback);
HRESULT GetCount( [in] GETCOUNTTYPE tyCount, [out] DWORD *pdwCount);
HRESULT GetRow( [in] ROWINDEX iRow, [out] LPMESSAGEINFO *ppInfo);
HRESULT ReleaseRow( [in,out] LPMESSAGEINFO pInfo);
HRESULT GetIndentLevel( [in] ROWINDEX iRow, [out] LPDWORD pcIndent);
HRESULT Mark( [in] LPROWINDEX rgiRow, [in] DWORD cRows, [in] APPLYCHILDRENTYPE tyApply, [in] MARK_TYPE mark, [in] IStoreCallback *pCallback);
HRESULT GetSortInfo( [out] LPFOLDERSORTINFO pSortInfo);
HRESULT OnSynchronizeComplete(void);
HRESULT SetSortInfo( [in] LPFOLDERSORTINFO pSortInfo, [in] IStoreCallback *pCallback);
HRESULT GetLanguage( [in] ROWINDEX iRow, [out] LPDWORD pdwCodePage);
HRESULT SetLanguage( [in] DWORD cRows, [in] LPROWINDEX prgiRow, [in] DWORD dwCodePage);
HRESULT GetNextRow( [in] ROWINDEX iCurrentRow, [in] GETNEXTTYPE tyDirection, [in] ROWMESSAGETYPE tyMessage, [in] GETNEXTFLAGS dwFlags, [out] LPROWINDEX piNewRow);
HRESULT GetRelativeRow( [in] ROWINDEX iRow, [in] RELATIVEROWTYPE tyRelative, [out] LPROWINDEX piRelative);
HRESULT GetRowState( [in] ROWINDEX iRow, [in] ROWSTATE dwStateMask, [out] ROWSTATE *pdwState);
HRESULT GetSelectionState( [in] DWORD cRows, [in] LPROWINDEX prgiRow, [in] SELECTIONSTATE dwMask, [in] BOOL fIncludeChildren, [out] SELECTIONSTATE *pdwState);
HRESULT Expand( [in] ROWINDEX iRow);
HRESULT Collapse( [in] ROWINDEX iRow);
HRESULT OpenMessage( [in] ROWINDEX iRow, [in] OPENMESSAGEFLAGS dwFlags, [in] IMimeMessage **ppMessage, [in] IStoreCallback *pCallback);
HRESULT GetRowMessageId( [in] ROWINDEX iRow, [out] LPMESSAGEID pidMessage);
HRESULT GetRowIndex( [in] MESSAGEID idMessage, [out] LPROWINDEX piRow);
HRESULT DeleteRows( [in] DELETEMESSAGEFLAGS dwFlags, [in] DWORD cRows, [in] LPROWINDEX prgiRow, [in] BOOL fIncludeChildren, [in] IStoreCallback *pCallback);
HRESULT CopyRows( [in] FOLDERID idFolder, [in] COPYMESSAGEFLAGS dwOptions, [in] DWORD cRows, [in] LPROWINDEX prgiRow, [in] LPADJUSTFLAGS pFlags, [in] IStoreCallback *pCallback);
HRESULT RegisterNotify( [in] REGISTERNOTIFYFLAGS dwFlags, [in] IMessageTableNotify *pNotify);
HRESULT UnregisterNotify( [in] IMessageTableNotify *pNotify);
HRESULT FindNextRow( [in] ROWINDEX iStartRow, [in] LPCTSTR pszFindString, [in] FINDNEXTFLAGS dwFlags, [in] BOOL fIncludeBody, [out] ROWINDEX *piNextRow, [out] BOOL *pfWrapped);
HRESULT GetRowFolderId( [in] ROWINDEX iRow, [out] LPFOLDERID pidFolder);
HRESULT GetMessageIdList( [in] BOOL fRootsOnly, [in] DWORD cRows, [in] LPROWINDEX prgiRow, [out] LPMESSAGEIDLIST pIdList);
HRESULT ConnectionAddRef(void);
HRESULT ConnectionRelease(void);
HRESULT IsChild( [in] ROWINDEX iRowParent, [in] ROWINDEX iRowChild);
HRESULT GetAdBarUrl(IStoreCallback *pCallback);
}; cpp_quote("#endif // __LPMESSAGETABLE_DEFINED")
//---------------------------------------------------------------------- // IMessageTableNotify //---------------------------------------------------------------------- cpp_quote("#ifndef __LPMESSAGETABLENOTIFY_DEFINED") cpp_quote("#define __LPMESSAGETABLENOTIFY_DEFINED") [ object, uuid(816C1167-F649-11d1-9A57-00C04FA309D4), pointer_default(unique) ] interface IMessageTableNotify : IUnknown { //------------------------------------------------------------------ // Pointer to an interface of this type //------------------------------------------------------------------ typedef IMessageTableNotify *LPMESSAGETABLENOTIFY;
//------------------------------------------------------------------ // Methods //------------------------------------------------------------------ HRESULT OnInsertRows( [in] DWORD cRows, [in] LPROWINDEX prgiRow, [in] BOOL fExpanded);
HRESULT OnDeleteRows( [in] DWORD cRows, [in] LPROWINDEX prgiRow, [in] BOOL fCollapsed);
HRESULT OnUpdateRows( [in] ROWINDEX iRowMin, [in] ROWINDEX iRowMax);
HRESULT OnRedrawState( [in] BOOL fRedraw);
HRESULT OnResetView(void); } cpp_quote("#endif // __LPMESSAGETABLENOTIFY_DEFINED")
//---------------------------------------------------------------------- // IStoreNamespace - Used by Outlook 9 and MS-Phone //---------------------------------------------------------------------- cpp_quote("#ifdef OE5_BETA2") cpp_quote("#ifndef __LPSTORENAMESPACE_DEFINED") cpp_quote("#define __LPSTORENAMESPACE_DEFINED") [ object, uuid(E70C92AA-4BFD-11d1-8A95-00C04FB951F3), pointer_default(unique) ] interface IStoreNamespace : IUnknown { //---------------------------------------------------------------------- // Pointer to an Object of this type //---------------------------------------------------------------------- typedef IStoreNamespace *LPSTORENAMESPACE;
//---------------------------------------------------------------------- // Some Special MESSAGEID values //---------------------------------------------------------------------- const MESSAGEID MESSAGEID_FIRST = -1;
//---------------------------------------------------------------------- // HENUMSTORE //-------------------------------------------------------------------------- DECLARE_HANDLE(HENUMSTORE); typedef HENUMSTORE *LPHENUMSTORE;
//---------------------------------------------------------------------- // Notification Messages //---------------------------------------------------------------------- cpp_quote("#define WM_FOLDERNOTIFY (WM_USER + 1600) // IStoreNamespace Notification - lparam=LPFOLDERNOTIFYEX, client must call CoTaskMemFree(lParam)") cpp_quote("#define WM_NEWMSGS (WM_USER + 1650) // IStoreFolder Notification: wParam=MESSAGEID, lParam=Reserved (No need to free anything)") cpp_quote("#define WM_DELETEMSGS (WM_USER + 1651) // IStoreFolder Notification: wParam=prgdwMsgId, lParam=cMsgs (You must CoTaskMemFree(prgdwMsgId)") cpp_quote("#define WM_DELETEFOLDER (WM_USER + 1652) // IStoreFolder Notification: wParam=FOLDERID or HFOLDER (No need to free anything)")
// If wParam is equal to 0xffffffff then that means that all messages in the folder // were either marked as read (WM_MARKEDASREAD) or unread (WM_MARKEDASUNREAD) cpp_quote("#define WM_MARKEDASREAD (WM_USER + 1653) // IStoreFolder Notification: wParamprgdwMsgId, lParam=cMsgs (No need to free anything)") cpp_quote("#define WM_MARKEDASUNREAD (WM_USER + 1654) // IStoreFolder Notification: wParamprgdwMsgId, lParam=cMsgs (No need to free anything)")
//---------------------------------------------------------------------- // FOLDERNOTIFYTYPE //---------------------------------------------------------------------- typedef enum tagFOLDERNOTIFYTYPE { NEW_FOLDER = 1, DELETE_FOLDER, RENAME_FOLDER, MOVE_FOLDER, UNREAD_CHANGE, IMAPFLAG_CHANGE, UPDATEFLAG_CHANGE, FOLDER_PROPS_CHANGED } FOLDERNOTIFYTYPE;
//---------------------------------------------------------------------- // FOLDERNOTIFYEX //---------------------------------------------------------------------- typedef struct tagFOLDERNOTIFYEX { FOLDERNOTIFYTYPE type; FOLDERID idFolderOld; // not used for CREATEFOLDER and DELETEFOLDER FOLDERID idFolderNew; } FOLDERNOTIFYEX, *LPFOLDERNOTIFYEX;
//---------------------------------------------------------------------- // FOLDERPROPS - Properties of a folder //---------------------------------------------------------------------- typedef struct tagFOLDERPROPS { DWORD cbSize; // Size of this structure FOLDERID dwFolderId; // Handle of this folder INT cSubFolders; // Number of sub-folders LONG sfType; // Special folder type DWORD cUnread; // Number of un-read messages DWORD cMessage; // Total # of messages CHAR szName[256]; // The Folder Name } FOLDERPROPS, *LPFOLDERPROPS;
//---------------------------------------------------------------------- // IMessageTable Methods //---------------------------------------------------------------------- cpp_quote("#define NAMESPACE_INITIALIZE_CURRENTIDENTITY 0x00000001") HRESULT Initialize( // Initialize the object [in] HWND hwndOwner, // Window owner for things like compaction dialog [in] DWORD dwFlags); // Reserved for future use
HRESULT GetDirectory( // Get the location of the store (filepath) [in,out,size_is(cchMaxPath)] LPSTR pszPath, // Buffer to put path of store into [in] DWORD cchMaxPath); // in: byte count size of pszPath, out: char count size of pszPath
HRESULT OpenSpecialFolder( [in] LONG sfType, // Special folder type [in] DWORD dwReserved, // Reserved for future use [out] IStoreFolder **ppFolder); // Pointer to an IStoreFolder
HRESULT OpenFolder( [in] FOLDERID dwFolderId, // Folder to open [in] DWORD dwReserved, // Reserved for future use [out] IStoreFolder **ppFolder); // Pointer to an IStoreFolder
HRESULT CreateFolder( [in] FOLDERID dwParentId, // Parent of the new folder, can use FOLDERID_ROOT [in] LPCSTR pszName, // Name of new folder, must be less than MAX_FOLDER_NAME [in] DWORD dwReserved, // Reserved for future use [out] LPFOLDERID pdwFolderId); // Handle to the new folder
HRESULT RenameFolder( [in] FOLDERID dwFolderId, // Folder to rename [in] DWORD dwReserved, // Reserved for future use [in] LPCSTR pszNewName); // New folder name, must be less than MAX_FOLDER_NAME
HRESULT MoveFolder( [in] FOLDERID dwFolderId, // Folder to move [in] FOLDERID dwParentId, // FolderId of the new Parent [in] DWORD dwReserved); // Reserved for future use
HRESULT DeleteFolder( [in] FOLDERID dwFolderId, // Folder to delete [in] DWORD dwReserved); // Reserved for future use
HRESULT GetFolderProps( [in] FOLDERID dwFolderId, // FolderId to get info for [in] DWORD dwReserved, // Reserved for future use [in,out] LPFOLDERPROPS pProps); // in: set cbSize, out: Holds folder information
HRESULT CopyMoveMessages( [in] IStoreFolder *pSource, // Source store folder [in] IStoreFolder *pDest, // Destination Store Folder [in] LPMESSAGEIDLIST pMsgIdList, // List of MESSAGEIDs to move/copy [in] COPYMESSAGEFLAGS dwFlags, // CMF_xxx Flags [in] DWORD dwFlagsRemove, // MSG_xxx Flags to remove from copied/moved messages [in] IProgressNotify *pProgress); // Store progress callback (client implements)
HRESULT RegisterNotification( [in] DWORD dwReserved, // Reserved for future use [in] HWND hwnd); // Handle to window to send notifications
HRESULT UnregisterNotification( [in] DWORD dwReserved, // Reserved for future use [in] HWND hwnd); // Handle to window to un-register for notifications
HRESULT CompactAll( // Compacts all folders in the store [in] DWORD dwReserved); // Reserved for future use
HRESULT GetFirstSubFolder( // Enumerate sub folders [in] FOLDERID dwFolderId, // Pass FOLDERID_ROOT to enum root folders [in,out] LPFOLDERPROPS pProps, // If function succeeds, contents are valid [out] LPHENUMSTORE phEnum); // Use in call to GetNextSubFolder, and then GetSubFolderClose
HRESULT GetNextSubFolder( // Get the next subfolder, returns S_FALSE if no more folders [in] HENUMSTORE hEnum, // Handle received from GetFirstSubFolder [in,out] LPFOLDERPROPS pProps); // If function returns S_OK, contains folder properties
HRESULT GetSubFolderClose( // Closes the handle associated with a folder enumeration [in] HENUMSTORE hEnum); // Handle received from GetFirstSubFolder } cpp_quote("#endif // __LPSTORENAMESPACE_DEFINED") cpp_quote("#endif // OE5_BETA2")
//---------------------------------------------------------------------- // IStoreFolder - Used by Outlook 9 and MS-Phone //---------------------------------------------------------------------- cpp_quote("#ifdef OE5_BETA2") cpp_quote("#ifndef __LPSTOREFOLDER_DEFINED") cpp_quote("#define __LPSTOREFOLDER_DEFINED") [ object, uuid(E70C92AC-4BFD-11d1-8A95-00C04FB951F3), pointer_default(unique) ] interface IStoreFolder : IUnknown { //---------------------------------------------------------------------- // Pointer to an Object of this type //---------------------------------------------------------------------- typedef IStoreFolder *LPSTOREFOLDER;
//---------------------------------------------------------------------- // Message State Flags used in MESSAGEINFO::dwState //---------------------------------------------------------------------- cpp_quote("#define MSG_DELETED 0x0001 // The message has been deleted, compaction will remove it") cpp_quote("#define MSG_UNREAD 0x0002 // The message is marked as un-read") cpp_quote("#define MSG_SUBMITTED 0x0004 // For messages waiting to be sent: OUTBOX ONLY") cpp_quote("#define MSG_UNSENT 0x0008 // For msgs-in-progress saved to a folder") cpp_quote("#define MSG_RECEIVED 0x0010 // For messages that came from a server") cpp_quote("#define MSG_NEWSMSG 0x0020 // For news messages") cpp_quote("#define MSG_NOSECUI 0x0040 // For messages where the user wants to die") cpp_quote("#define MSG_VOICEMAIL 0x0080 // The message has the X-Voicemail header set...") cpp_quote("#define MSG_REPLIED 0x0100 // The message has been replied to") cpp_quote("#define MSG_FORWARDED 0x0200 // The message has been forwarded to") cpp_quote("#define MSG_RCPTSENT 0x0400 // S/MIME Receipt has been sent") cpp_quote("#define MSG_FLAGGED 0x0800 // The message is currently flags") cpp_quote("#define MSG_LAST 0x0200 // ** Keep this puppy updated!! **") cpp_quote("#define MSG_EXTERNAL_FLAGS 0x00fe") cpp_quote("#define MSG_FLAGS 0x000f")
//---------------------------------------------------------------------- // MESSAGEPROPS //---------------------------------------------------------------------- typedef struct tagMESSAGEPROPS { DWORD cbSize; // Size of this structure DWORD_PTR dwReserved; // Reserved don't use MESSAGEID dwMessageId; // Handle to this message DWORD dwLanguage; // Codepage of this message DWORD dwState; // MSG_xxx Flags
// Things you don't get when MSGPROPS_FAST DWORD cbMessage; // Size of the message IMSGPRIORITY priority; // Message Priority FILETIME ftReceived; // When the message was received FILETIME ftSent; // When the message was sent LPSTR pszSubject; // The subject of the message LPSTR pszDisplayTo; // The display to line of the message LPSTR pszDisplayFrom; // The display from line of the message LPSTR pszNormalSubject; // The normalized subject of the message DWORD dwFlags; // IMF_xxx Flags defined in mimeole.idl IStream *pStmOffsetTable; // Use with IMimeMessage::LoadOffsetTable } MESSAGEPROPS, *LPMESSAGEPROPS;
//---------------------------------------------------------------------- // HBATCHLOCK //---------------------------------------------------------------------- DECLARE_HANDLE(HBATCHLOCK); typedef HBATCHLOCK *LPHBATCHLOCK;
//---------------------------------------------------------------------- // Method //---------------------------------------------------------------------- HRESULT GetFolderProps( // Get folder info for this folder [in] DWORD dwReserved, // Reserved for future use [in,out] LPFOLDERPROPS pProps); // in: set cbSize, out: contains folder information
cpp_quote("#define MSGPROPS_FAST 0x00000001 // See MESSAGEPROPS structure, improved performance") HRESULT GetMessageProps( [in] MESSAGEID dwMessageId, // Message Identifier [in] DWORD dwFlags, // GETMSGINFO_xxx Flags [in,out] LPMESSAGEPROPS pProps); // Message Info - set cbSize before calling
HRESULT FreeMessageProps( // Handles the case where pMsgInfo->dwMask has MIP_BYREF [in,out] LPMESSAGEPROPS pProps); // Pointer to MESSAGEINFO structure to free
HRESULT DeleteMessages( [in] LPMESSAGEIDLIST pMsgIdList, // List of HMESSAGEs [in] DWORD dwReserved, // Reserved for future use [in] IProgressNotify *pProgress); // Progress information
HRESULT SetLanguage( [in] DWORD dwLanguage, // MLANG Codepage ID of message [in] DWORD dwReserved, // Reserved for future use [in] LPMESSAGEIDLIST pMsgIdList); // List of HMESSAGEs to apply new language to
HRESULT MarkMessagesAsRead( [in] BOOL fRead, // Mark as Read or Unread [in] DWORD dwReserved, // Reserved for future use [in] LPMESSAGEIDLIST pMsgIdList); // List of HMESSAGEs to mark as (un)read
HRESULT SetFlags( // Modify the flags of a message [in] LPMESSAGEIDLIST pMsgIdList, // Array of messages to modify flags for [in] DWORD dwState, // MSG_xxx Flags to set on pMsgIdList [in] DWORD dwStatemask, // ????? [out] LPDWORD prgdwNewFlags); // Array of new message state flags that match pMsgIdList array
HRESULT OpenMessage( // Open a message (get a stream or a message object) [in] MESSAGEID dwMessageId, // Handle to the message to open [in] REFIID riid, // IID_IStream or IID_IMimeMessage stream is readonly [out,iid_is(riid)] LPVOID *ppvObject); // The object, you must ->Release it
HRESULT SaveMessage( // Add a new entry to a folder. [in] REFIID riid, // IID_IStream or IID_IMimeMessage [in,iid_is(riid)] LPVOID pvObject, // Pointer to a stream or mime message [in] DWORD dwMsgFlags, // MSG_xxx Flags [out] LPMESSAGEID pdwMessageId); // Handle to the new message
HRESULT BatchLock( // Lock to prepare for a batch operation [in] DWORD dwReserved, // Reserved for future use [out] LPHBATCHLOCK phBatchLock); // Handle to newly created lock
HRESULT BatchFlush( // Flush the current batch operation [in] DWORD dwReserved, // Reserved for future use [in] HBATCHLOCK hBatchLock); // Folder lock obtained from BatchLock
HRESULT BatchUnlock( // Unlocks a batched operation [in] DWORD dwReserved, // Reserved for future use [in] HBATCHLOCK hBatchLock); // Handle to lock obtained from BatchLock
HRESULT CreateStream( // Create a new stream in a folder [in] HBATCHLOCK hBatchLock, // Handle to a folder lock, optional if doing a one-of [in] DWORD dwReserved, // Reserved for future use [out] IStream **ppStream, // Pointer to new stream can be used for read/write [out] LPMESSAGEID pdwMessageId); // Handle to the new message
cpp_quote("#define COMMITSTREAM_REVERT 0x00000001 // Don't add this stream/message to the folder") HRESULT CommitStream( // Commit/Revert a stream created with CreateStream [in] HBATCHLOCK hBatchLock, // Folder lock obtained from BatchLock [in] DWORD dwFlags, // COMMITSTREAM_xxx Flags [in] DWORD dwMsgFlags, // MSG_xxx Flags [in] IStream *pStream, // Stream obtained from CreateStream [in] MESSAGEID dwMessageId, // dwMessageId obtained from CreateStream [in] IMimeMessage *pMessage); // Message to commit, if not passed in, pStream will be pared.
HRESULT RegisterNotification( [in] DWORD dwReserved, // Reserved for future use [in] HWND hwnd); // Handle to window to send notifications
HRESULT UnregisterNotification( [in] DWORD dwReserved, // Reserved for future use [in] HWND hwnd); // Handle to window to un-register for notifications
HRESULT Compact( // Compacts this folder [in] DWORD dwReserved); // Reserved for future use
HRESULT GetFirstMessage( // Get the first message in a folder [in] DWORD dwFlags, // MSGPROPS_xxx Flags [in] DWORD dwMsgFlags, // MSG_xxx Flags to enumerate on, pass 0 for none [in] MESSAGEID dwMsgIdFirst, // MessageId to start enumerating at, Use MESSAGEID_FIRST [in,out] LPMESSAGEPROPS pProps, // When function returns S_OK, contains message properties [out] LPHENUMSTORE phEnum); // Upon successful return, contains handle to enumeration
HRESULT GetNextMessage( // Get the next message in the enumeration [in] HENUMSTORE hEnum, // Handle to the enumeration received in GetFirstMessage [in] DWORD dwFlags, // MSGPROPS_xxx Flags [in,out] LPMESSAGEPROPS pProps); // When function returns S_OK, contains message properties
HRESULT GetMessageClose( [in] HENUMSTORE hEnum); // Handle to the enumeration received in GetFirstMessage } cpp_quote("#endif // __LPSTOREFOLDER_DEFINED") cpp_quote("#endif // OE5_BETA2")
} // OEStore Library Object Definition
|