//--------------------------------------------------------------------------- // OERules.idl //--------------------------------------------------------------------------- import "objidl.idl"; import "ocidl.idl"; import "mimeole.idl"; import "oestore.idl"; //--------------------------------------------------------------------------- // Interfaces //--------------------------------------------------------------------------- interface IOERulesManager; interface IOEEnumRules; interface IOEExecRules; interface IOERule; interface IOECriteria; interface IOEActions; // Make sure we only bring in this file only once cpp_quote("// Bring in only once") cpp_quote("#if _MSC_VER > 1000") cpp_quote("#pragma once") cpp_quote("#endif") cpp_quote("") //--------------------------------------------------------------------------- // 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("") typedef struct tagRULEFOLDERDATA { FILETIME ftStamp; FOLDERID idFolder; } RULEFOLDERDATA, * PRULEFOLDERDATA; typedef enum tagRULE_TYPE { RULE_TYPE_MAIL = 0, RULE_TYPE_NEWS, RULE_TYPE_FILTER, RULE_TYPE_MAX } RULE_TYPE; typedef DWORD RULE_SESSION; typedef enum tagACT_TYPE { ACT_TYPE_NULL = 0, ACT_TYPE_COPY, ACT_TYPE_FWD, ACT_TYPE_NOTIFYMSG, ACT_TYPE_NOTIFYSND, ACT_TYPE_REPLY, ACT_TYPE_MOVE, ACT_TYPE_DELETE, ACT_TYPE_DELETESERVER, ACT_TYPE_DONTDOWNLOAD, ACT_TYPE_HIGHLIGHT, ACT_TYPE_FLAG, ACT_TYPE_STOP, ACT_TYPE_READ, ACT_TYPE_MARKDOWNLOAD, ACT_TYPE_SHOW, ACT_TYPE_JUNKMAIL, ACT_TYPE_WATCH, ACT_TYPE_MAX } ACT_TYPE; const DWORD ACT_FLAG_DEFAULT = 0x00000000; const DWORD ACT_FLAG_INVERT = 0x00000001; typedef struct tagACT_ITEM { ACT_TYPE type; DWORD dwFlags; PROPVARIANT propvar; } ACT_ITEM, * PACT_ITEM; typedef struct tagRULEINFO { RULEID ridRule; IOERule * pIRule; } RULEINFO, *PRULEINFO; //--------------------------------------------------------------------------- // Rules Manager IDs //--------------------------------------------------------------------------- // For Rules const RULEID RULEID_JUNK = (RULEID) -3; const RULEID RULEID_SENDERS = (RULEID) -2; // For Views const RULEID RULEID_VIEW_ALL = (RULEID) 0x00000FFA; const RULEID RULEID_VIEW_UNREAD = (RULEID) 0x00000FFB; const RULEID RULEID_VIEW_DOWNLOADED = (RULEID) 0x00000FFC; const RULEID RULEID_VIEW_DELETED = (RULEID) 0x00000FFD; const RULEID RULEID_VIEW_REPLIES = (RULEID) 0x00000FFE; const RULEID RULEID_VIEW_IGNORED = (RULEID) 0x00000FFF; //--------------------------------------------------------------------------- // Rules Manager HRESULTs //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // IOERulesManager interface //--------------------------------------------------------------------------- [ object, uuid(626bafe0-e5d6-11d1-b1dd-006097d503d9), pointer_default(unique), version(1.0) ] interface IOERulesManager : IUnknown { const DWORD RULESMGR_VERSION = 0x00050000; HRESULT Initialize( [in] DWORD dwFlags); HRESULT GetRule( [in] RULEID ridRule, [in] RULE_TYPE type, [in] DWORD dwFlags, [out] IOERule ** ppIRule); HRESULT FindRule( [in] LPCSTR pszRuleName, [in] RULE_TYPE type, [out] IOERule ** ppIRule); const DWORD GETF_ALL = 0x00000000; const DWORD GETF_EDIT = 0x00000001; const DWORD GETF_SENDER = 0x00000002; const DWORD GETF_JUNK = 0x00000004; const DWORD GETF_POP3 = 0x00000008; const DWORD GETF_NNTP = 0x00000010; const DWORD GETF_IMAP = 0x00000020; const DWORD GETF_HTTPMAIL = 0x00000040; HRESULT GetRules( [in] DWORD dwFlags, [in] RULE_TYPE typeRule, [in] RULEINFO ** ppinfoRule, [in] ULONG * pcpinfoRule); const DWORD SETF_APPEND = 0x00000000; const DWORD SETF_CLEAR = 0x00000001; const DWORD SETF_SENDER = 0x00000002; const DWORD SETF_JUNK = 0x00000004; const DWORD SETF_REPLACE = 0x00000008; HRESULT SetRules( [in] DWORD dwFlags, [in] RULE_TYPE typeRule, [in] RULEINFO * pinfoRule, [in] ULONG cpIRule); const DWORD ENUMF_ALL = 0x00000001; const DWORD ENUMF_EDIT = 0x00000002; const DWORD ENUMF_SENDER = 0x00000004; const DWORD ENUMF_POP3 = 0x00000008; const DWORD ENUMF_NNTP = 0x00000010; const DWORD ENUMF_IMAP = 0x00000020; const DWORD ENUMF_HTTPMAIL = 0x00000040; HRESULT EnumRules( [in] DWORD dwFlags, [in] RULE_TYPE type, [out] IOEEnumRules ** ppIEnumRules); HRESULT GetState( [in] RULE_TYPE type, [in] DWORD dwFlags, [out] DWORD * pdwState); const DWORD EXECF_ALL = 0x00000001; const DWORD EXECF_APPLY = 0x00000002; HRESULT ExecRules( [in] DWORD dwFlags, [in] RULE_TYPE type, [out] IOEExecRules ** ppIExecRules); HRESULT ExecuteRules( [in] RULE_TYPE typeRule, [in] DWORD dwFlags, [in] HWND hwndUI, [in] IOEExecRules * pIExecRules, [in] MESSAGEINFO * pMsgInfo, [in] IMessageFolder * pFolder, [in] IMimeMessage * pIMMsg); }; //--------------------------------------------------------------------------- // Interface IOEEnumRules //--------------------------------------------------------------------------- [ object, uuid(626bafe2-e5d6-11d1-b1dd-006097d503d9), pointer_default(unique), version(1.0) ] interface IOEEnumRules : IUnknown { typedef [unique] IOEEnumRules *LPENUMRULES; HRESULT Next( [in] ULONG cpIRule, [out, size_is(cpIRule), length_is(*pcpIRuleFetched)] IOERule ** rgpIRule, [out] ULONG * pcpIRuleFetched); HRESULT Skip( [in] ULONG cpIRule); HRESULT Reset(); HRESULT Clone( [out] IOEEnumRules ** ppIEnumRules); }; //--------------------------------------------------------------------------- // Interface IOEExecRules //--------------------------------------------------------------------------- [ object, uuid(626bafe4-e5d6-11d1-b1dd-006097d503d9), pointer_default(unique), version(1.0) ] interface IOEExecRules : IUnknown { typedef [unique] IOEExecRules *LPEXECRULES; HRESULT GetState( [out] DWORD * pdwState); const DWORD ERF_ONLYSERVER = 0x00000001; const DWORD ERF_NOSERVER = 0x00000002; const DWORD ERF_SKIPPARTIALS = 0x00000004; HRESULT ExecuteRules( [in] DWORD dwFlags, [in] LPCSTR pszAcct, [in] MESSAGEINFO * pMsgInfo, [in] IMessageFolder * pFolder, [in] IMimePropertySet * pIMPropSet, [in] IMimeMessage * pIMMsg, [in] ULONG cbMsgSize, [out] ACT_ITEM ** ppActions, [out] ULONG * pcActions); HRESULT ReleaseObjects(); HRESULT GetRuleFolder( [in] FOLDERID idfolder, [out] DWORD_PTR * pdwFolder); const DWORD RFT_FILE = 0x00000000; const DWORD RFT_HTML = 0x00000001; const DWORD RFT_TEXT = 0x00000002; const DWORD RFT_MESSAGE = 0x00000003; HRESULT GetRuleFile( [in] LPCSTR pszFile, [out] IStream ** ppstmFile, [out] DWORD * pdwType); const DWORD ASF_PLAYIFNEW = 0x00000001; HRESULT AddSoundFile( [in] DWORD dwFlags, [in] LPCSTR pszSndFile); HRESULT PlaySounds( [in] DWORD dwFlags); }; //--------------------------------------------------------------------------- // Interface IOERule //--------------------------------------------------------------------------- [ object, uuid(626bafe6-e5d6-11d1-b1dd-006097d503d9), pointer_default(unique), version(1.0) ] interface IOERule : IUnknown { typedef enum tagRULE_PROP { RULE_PROP_NAME = 0, RULE_PROP_DISABLED, RULE_PROP_CRITERIA, RULE_PROP_ACTIONS, RULE_PROP_STATE, RULE_PROP_VERSION, RULE_PROP_READONLY, RULE_PROP_JUNKPCT, RULE_PROP_EXCPT_WAB, RULE_PROP_MAX } RULE_PROP; HRESULT Reset(); const DWORD RULE_STATE_NULL = 0x00000000; const DWORD RULE_STATE_HEADER = 0x00000001; const DWORD RULE_STATE_ALL = 0x00000002; HRESULT GetState( [out] DWORD * pdwState); HRESULT Validate( [in] DWORD dwFlags); HRESULT GetProp( [in] RULE_PROP prop, [in] DWORD dwFlags, [in, out] PROPVARIANT * pvarResult); HRESULT SetProp( [in] RULE_PROP prop, [in] DWORD dwFlags, [in] PROPVARIANT * pvarValue); HRESULT Evaluate( [in] LPCSTR pszAcct, [in] MESSAGEINFO * pMsgInfo, [in] IMessageFolder * pFolder, [in] IMimePropertySet * pIMPropSet, [in] IMimeMessage * pIMMsg, [in] ULONG cbMsgSize, [out] ACT_ITEM ** ppActions, [out] ULONG * pcActions); HRESULT LoadReg( [in] LPCSTR szRegPath); HRESULT SaveReg( [in] LPCSTR szRegPath, [in] BOOL fClearDirty); HRESULT Clone( [out] IOERule ** ppIRule); }; //--------------------------------------------------------------------------- // Interface IOECriteria //--------------------------------------------------------------------------- [ object, uuid(626bafe8-e5d6-11d1-b1dd-006097d503d9), pointer_default(unique), version(1.0) ] interface IOECriteria : IUnknown { typedef enum tagCRIT_TYPE { CRIT_TYPE_NULL = 0, CRIT_TYPE_NEWSGROUP, CRIT_TYPE_TOME, CRIT_TYPE_CCME, CRIT_TYPE_BCCME, CRIT_TYPE_TOADDR, CRIT_TYPE_CCADDR, CRIT_TYPE_FROMADDR, CRIT_TYPE_SUBJECT, CRIT_TYPE_BODY, CRIT_TYPE_TO, CRIT_TYPE_CC, CRIT_TYPE_FROM, CRIT_TYPE_PRIORITY, CRIT_TYPE_ATTACH, CRIT_TYPE_SIZE, CRIT_TYPE_DATE, CRIT_TYPE_HEADER, CRIT_TYPE_JUNK, CRIT_TYPE_ACCOUNT, CRIT_TYPE_ALL, CRIT_TYPE_TOORCCADDR, CRIT_TYPE_TOORCC, CRIT_TYPE_SENDER, CRIT_TYPE_REPLIES, CRIT_TYPE_DOWNLOADED, CRIT_TYPE_DELETED, CRIT_TYPE_THREADSTATE, CRIT_TYPE_READ, CRIT_TYPE_LINES, CRIT_TYPE_AGE, CRIT_TYPE_SECURE, CRIT_TYPE_FLAGGED, CRIT_TYPE_MAX } CRIT_TYPE; const DWORD CRIT_FLAG_DEFAULT = 0x00000000; const DWORD CRIT_FLAG_INVERT = 0x00000001; const DWORD CRIT_FLAG_MULTIPLEAND = 0x00000002; const DWORD CRIT_DATA_IGNORETHREAD = 0x00000002; const DWORD CRIT_DATA_WATCHTHREAD = 0x00000001; const DWORD CRIT_DATA_NORMALTHREAD = 0x00000000; const DWORD CRIT_DATA_HIPRI = 0x00000002; const DWORD CRIT_DATA_LOPRI = 0x00000001; const DWORD CRIT_DATA_NORMALPRI = 0x00000000; const DWORD CRIT_DATA_ENCRYPTSECURE = 0x00000002; const DWORD CRIT_DATA_SIGNEDSECURE = 0x00000001; const DWORD CRIT_DATA_NOSECURE = 0x00000000; typedef enum tagCRIT_LOGIC { CRIT_LOGIC_NULL = 0, CRIT_LOGIC_OR, CRIT_LOGIC_AND, CRIT_LOGIC_MAX } CRIT_LOGIC; typedef struct tagCRIT_ITEM { CRIT_TYPE type; DWORD dwFlags; PROPVARIANT propvar; CRIT_LOGIC logic; } CRIT_ITEM, * PCRIT_ITEM; HRESULT Reset(); const DWORD CRIT_STATE_NULL = 0x00000000; const DWORD CRIT_STATE_DIRTY = 0x00000001; const DWORD CRIT_STATE_LOADED = 0x00000002; const DWORD CRIT_STATE_HEADER = 0x00010000; const DWORD CRIT_STATE_ALL = 0x00020000; const DWORD CRIT_STATE_MASK = 0x00FF0000; HRESULT GetState( [out] DWORD * pdwState); HRESULT GetCriteria( [in] DWORD dwFlags, [out] PCRIT_ITEM * ppItem, [out] ULONG * pcItem); HRESULT SetCriteria( [in] DWORD dwFlags, [in] CRIT_ITEM * pItem, [in] ULONG cItem); HRESULT Validate( [in] DWORD dwFlags); HRESULT AppendCriteria( [in] DWORD dwFlags, [in] CRIT_LOGIC logic, [in] CRIT_ITEM * pItem, [in] ULONG cItem, [out] ULONG * pcItemAppended); HRESULT MatchMessage( [in] LPCSTR pszAcct, [in] MESSAGEINFO * pMsgInfo, [in] IMessageFolder * pFolder, [in] IMimePropertySet * pIMPropSet, [in] IMimeMessage * pIMMsg, [in] ULONG cbMsgSize); HRESULT LoadReg( [in] LPCSTR szRegPath); HRESULT SaveReg( [in] LPCSTR szRegPath, [in] BOOL fClearDirty); HRESULT Clone( [out] IOECriteria ** ppICriteria); }; //--------------------------------------------------------------------------- // Interface IOEActions //--------------------------------------------------------------------------- [ object, uuid(626bafea-e5d6-11d1-b1dd-006097d503d9), pointer_default(unique), version(1.0) ] interface IOEActions : IUnknown { const DWORD ACT_DATA_NULL = 0x00000000; const DWORD ACT_DATA_WATCHTHREAD = 0x00000001; const DWORD ACT_DATA_IGNORETHREAD = 0x00000002; const DWORD ACT_DATA_SHOW = 0x00000001; const DWORD ACT_DATA_HIDE = 0x00000002; HRESULT Reset(); const DWORD ACT_STATE_NULL = 0x00000000; const DWORD ACT_STATE_DIRTY = 0x00000100; const DWORD ACT_STATE_LOADED = 0x00000200; const DWORD ACT_STATE_SERVER = 0x01000000; const DWORD ACT_STATE_LOCAL = 0x02000000; const DWORD ACT_STATE_MASK = 0xFF000000; HRESULT GetState( [out] DWORD * pdwState); HRESULT GetActions( [in] DWORD dwFlags, [out] PACT_ITEM * ppItem, [out] ULONG * pcItem); HRESULT SetActions( [in] DWORD dwFlags, [in] ACT_ITEM * pItem, [in] ULONG cItem); HRESULT Validate( [in] DWORD dwFlags); HRESULT AppendActions( [in] DWORD dwFlags, [in] ACT_ITEM * pItem, [in] ULONG cItem, [out] ULONG * pcItemAppended); HRESULT LoadReg( [in] LPCSTR szRegPath); HRESULT SaveReg( [in] LPCSTR szRegPath, [in] BOOL fClearDirty); HRESULT Clone( [out] IOEActions ** ppIActions); }; //--------------------------------------------------------------------------- // OE Rules Type Library //--------------------------------------------------------------------------- [ uuid(626bafec-e5d6-11d1-b1dd-006097d503d9), version(1.0), helpstring("Microsoft Outlook Express Rules Type Library") ] library OERules { importlib("stdole2.tlb"); [ uuid(626bafe1-e5d6-11d1-b1dd-006097d503d9), ] coclass OERulesManager { [default] interface IOERulesManager; }; [ uuid(626bafe3-e5d6-11d1-b1dd-006097d503d9), ] coclass OEEnumRules { [default] interface IOEEnumRules; }; [ uuid(626bafe5-e5d6-11d1-b1dd-006097d503d9), ] coclass OEExecRules { [default] interface IOEExecRules; }; [ uuid(626bafe7-e5d6-11d1-b1dd-006097d503d9), ] coclass OERule { [default] interface IOERule; interface IPersistStream; }; [ uuid(626bafe9-e5d6-11d1-b1dd-006097d503d9), ] coclass OECriteria { [default] interface IOECriteria; interface IPersistStream; }; [ uuid(626bafeb-e5d6-11d1-b1dd-006097d503d9), ] coclass OEActions { [default] interface IOEActions; interface IPersistStream; }; };