Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
8.3 KiB

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // RuleUtil.h
  4. //
  5. ///////////////////////////////////////////////////////////////////////////////
  6. // Bring in only once
  7. #if _MSC_VER > 1000
  8. #pragma once
  9. #endif
  10. #include "oerules.h"
  11. // Forward definitions
  12. interface IOEMessageList;
  13. interface IMessageList;
  14. class CProgress;
  15. class CMRUList;
  16. const DWORD RULE_DEFAULT_MAIL = 0x00000000;
  17. const DWORD RULE_DEFAULT_NEWS = 0x00000001;
  18. const DWORD CCH_INDEX_MAX = 4;
  19. const DWORD DWORD_INDEX_MIN = 0;
  20. const DWORD DWORD_INDEX_MAX = 0x1000;
  21. const DWORD MRDF_MAIL = 0x00000000;
  22. const DWORD MRDF_NEWS = 0x00000001;
  23. const DWORD MRDF_JUNK = 0x00000002;
  24. const DWORD MRDF_SENDERS = 0x00000003;
  25. void DoMessageRulesDialog(HWND hwnd, DWORD dwFlags);
  26. // For creating a rule from a message
  27. const DWORD CRFMF_MAIL = 0x00000000;
  28. const DWORD CRFMF_NEWS = 0x00000001;
  29. HRESULT HrCreateRuleFromMessage(HWND hwnd, DWORD dwFlags, MESSAGEINFO * pmsginfo, IMimeMessage * pMessage);
  30. // Utility functions for the Block Sender object
  31. const DWORD ABSF_MAIL = 0x00000001;
  32. const DWORD ABSF_NEWS = 0x00000002;
  33. HRESULT HrBlockSendersFromFolder(HWND hwnd, DWORD dwFlags, FOLDERID idFolder, LPSTR * ppszSender, ULONG cpszSender);
  34. const DWORD VRDF_POP3 = 0x00000001;
  35. const DWORD VRDF_NNTP = 0x00000002;
  36. const DWORD VRDF_IMAP = 0x00000004;
  37. const DWORD VRDF_HTTPMAIL = 0x00000008;
  38. HRESULT HrDoViewsManagerDialog(HWND hwnd, DWORD dwFlags, RULEID * pridRule, BOOL * pfApplyAll);
  39. HRESULT HrCreateRulesManager(IUnknown * pIUnkOuter, IUnknown ** ppIUnknown);
  40. // Functions to deal with the address criteria/actions
  41. HRESULT RuleUtil_HrBuildEmailString(LPWSTR pwszText, ULONG cchText, LPWSTR * ppwszEmail, ULONG * pcchEmail);
  42. HRESULT RuleUtil_HrParseEmailString(LPWSTR pwszEmail, ULONG cchEmail, LPWSTR * ppwszOut, ULONG * pcchOut);
  43. // Functions to deal with the text criteria/actions
  44. HRESULT RuleUtil_HrBuildTextString(LPTSTR pszIn, ULONG cchIn, LPTSTR * ppszText, ULONG * pcchText);
  45. HRESULT RuleUtil_HrParseTextString(LPTSTR pszText, ULONG cchText, LPTSTR * ppszOut, ULONG * pcchOut);
  46. // Utility functions to get values with allocations
  47. HRESULT RuleUtil_HrGetDlgString(HWND hwndDlg, UINT uiCtlId, LPTSTR *ppszText, ULONG * pcchText);
  48. HRESULT RuleUtil_HrGetRegValue(HKEY hkey, LPCSTR pszValueName, DWORD * pdwType, BYTE ** ppbData, ULONG * pcbData);
  49. HRESULT RuleUtil_HrPickEMailNames(HWND hwndDlg, LONG lRecipType, UINT uidsWellButton, LPWSTR *ppwszAddrs);
  50. HRESULT RuleUtil_HrGetAddressesFromWAB(HWND hwndDlg, LONG lRecipType, UINT uidsWellButton, LPWSTR *ppwszAddrs);
  51. BOOL RuleUtil_FEnDisDialogItem(HWND hwndDlg, UINT idcItem, BOOL fEnable);
  52. HRESULT RuleUtil_AppendRichEditText(HWND hwndRedit, ULONG ulStart, LPCWSTR pszText, CHARFORMAT *pchfmt);
  53. HRESULT RuleUtil_HrShowLinkedString(HWND hwndEdit, BOOL fError, BOOL fReadOnly,
  54. LPWSTR pszFmt, LPCWSTR pszData, ULONG ulStart,
  55. ULONG * pulStartLink, ULONG * pulEndLink, ULONG * pulEnd);
  56. // Utility functions for the COECriteria object
  57. HRESULT RuleUtil_HrDupCriteriaItem(CRIT_ITEM * pItemIn, ULONG cItemIn, CRIT_ITEM ** ppItemOut);
  58. HRESULT RuleUtil_HrFreeCriteriaItem(CRIT_ITEM * pItem, ULONG cItem);
  59. // Utility functions for the COEActions object
  60. HRESULT RuleUtil_HrDupActionsItem(ACT_ITEM * pItemIn, ULONG cItemIn, ACT_ITEM ** ppItemOut);
  61. HRESULT RuleUtil_HrFreeActionsItem(ACT_ITEM * pItem, ULONG cItem);
  62. HRESULT RuleUtil_HrAddBlockSender(RULE_TYPE type, LPCSTR pszAddr);
  63. HRESULT RuleUtil_SetName(IOERule *pIRule, int idRes);
  64. // Utility functions for merge between old and new rules design
  65. // Migration IBA_MOVE=1000 to ACT_MOVE
  66. #define ACT_MOVETO FLAG01
  67. #define ACT_COPYTO FLAG02
  68. #define ACT_FORWARDTO FLAG03
  69. #define ACT_REPLYWITH FLAG04
  70. #define ACT_DONTDOWNLOAD FLAG05
  71. #define ACT_DELETEOFFSERVER FLAG06
  72. #define ACT_ACCOUNT FLAG07
  73. #define ACT_HIGHLIGHT FLAG08
  74. #define ACT_FLAG FLAG09
  75. #define ACT_READ FLAG10
  76. #define ACT_MARKDOWNLOAD FLAG11
  77. #define ACT_WATCH FLAG12
  78. #define ACT_IGNORE FLAG13
  79. HRESULT RuleUtil_HrMergeActions(ACT_ITEM * pActionsOrig, ULONG cActionsOrig,
  80. ACT_ITEM * pActionsNew, ULONG cActionsNew,
  81. ACT_ITEM ** ppActionsDest, ULONG * pcActionsDest);
  82. HRESULT RuleUtil_HrGetOldFormatString(HKEY hkeyRoot, LPCSTR pszValue, LPCSTR pszSep, LPSTR * ppszString, ULONG * pcchString);
  83. // Functions to import/export messages
  84. HRESULT RuleUtil_HrImportRules(HWND hwnd);
  85. HRESULT RuleUtil_HrExportRules(HWND hwnd);
  86. const int RULE_APPLY_PARTIALS = 0x00000001;
  87. const int RULE_APPLY_SHOWUI = 0x00000002;
  88. HRESULT RuleUtil_HrApplyRulesToFolder(DWORD dwFlags, DWORD dwDeleteFlags,
  89. IOEExecRules * pExecRules, IMessageFolder * pFolder, HWND hwndUI, CProgress * pProgress);
  90. HRESULT RuleUtil_HrFindAction(ACT_ITEM * pActions, ULONG cActions, ACT_TYPE typeAct, ACT_ITEM ** ppActFound);
  91. HRESULT RuleUtil_HrMapFldId(DWORD dwFlags, BYTE * pbFldIdMap, FOLDERID fldidOld, FOLDERID * pfldidNew);
  92. HRESULT RuleUtil_HrGetUserData(DWORD dwFlags, LPSTR * ppszFirstName, LPSTR * ppszLastName, LPSTR * ppszCompanyName);
  93. HRESULT RuleUtil_HrApplyActions(HWND hwndUI, IOEExecRules * pIExecRules, MESSAGEINFO * pMsgInfo,
  94. IMessageFolder * pFolder, IMimeMessage * pIMMsg, DWORD dwDeleteFlags,
  95. ACT_ITEM * pActions, ULONG cActions, ULONG * pcInfiniteLoops, BOOL *pfDeleteOffServer);
  96. HRESULT RuleUtil_HrCreateSendersRule(DWORD dwFlags, IOERule ** ppIRule);
  97. HRESULT RuleUtil_HrLoadSender(LPCSTR pszRegPath, DWORD dwFlags, IOERule ** ppIRule);
  98. HRESULT RuleUtil_HrMatchSender(LPCSTR pszSender, MESSAGEINFO * pMsgInfo,
  99. IMimeMessage * pIMMsg, IMimePropertySet * pIMPropSet);
  100. HRESULT RuleUtil_HrUpdateDefaultRules(RULE_TYPE typeRule);
  101. HRESULT RuleUtil_HrGetFilterVersion(RULEID ridFilter, DWORD * pdwVersion);
  102. HRESULT RuleUtil_HrValidateRuleFolderData(RULEFOLDERDATA * prfdData);
  103. typedef struct tagQUERYINFO
  104. {
  105. BOOL fThreaded;
  106. LPSTR pszQuery;
  107. ULONG cchQuery;
  108. } QUERYINFO, * PQUERYINFO;
  109. HRESULT RuleUtil_HrBuildQuerysFromFilter(RULEID ridFilter, QUERYINFO * pqinfoFilter);
  110. const int VMF_FINDER = 0x00000001;
  111. class CViewMenu
  112. {
  113. private:
  114. struct VIEW_ITEM
  115. {
  116. RULEID ridRule;
  117. struct VIEW_ITEM * pNext;
  118. };
  119. enum
  120. {
  121. STATE_UNINIT = 0x00000000,
  122. STATE_INIT = 0x00000001,
  123. STATE_LOADED = 0x00000002,
  124. STATE_DIRTY = 0x00000004,
  125. };
  126. enum
  127. {
  128. CCH_FILTERTAG_MAX = 11
  129. };
  130. private:
  131. ULONG m_cRef;
  132. DWORD m_dwFlags;
  133. DWORD m_dwState;
  134. RULEID m_ridCurrent;
  135. CMRUList * m_pmruList;
  136. public:
  137. CViewMenu() : m_cRef(1), m_dwFlags(0), m_dwState(STATE_UNINIT),
  138. m_ridCurrent(RULEID_INVALID), m_pmruList(NULL) {}
  139. ~CViewMenu();
  140. ULONG AddRef(VOID);
  141. ULONG Release(VOID);
  142. HRESULT HrInit(DWORD dwFlags);
  143. HRESULT HrReplaceMenu(DWORD dwFlags, HMENU hmenuView);
  144. HRESULT UpdateViewMenu(DWORD dwFlags, HMENU hmenuView, IMessageList * pMsgList);
  145. HRESULT QueryStatus(IMessageList * pMsgList, OLECMD * prgCmds);
  146. HRESULT Exec(HWND hwndUI, DWORD nCmdID, IMessageList * pMsgList, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  147. HRESULT HrAddView(DWORD dwFlags, RULEID ridRule) {return E_NOTIMPL; }
  148. private:
  149. VOID _AddDefaultViews(HMENU hmenuView);
  150. HRESULT _HrInsertViewMenu(HMENU hmenuView, RULEID ridFilter, DWORD dwMenuID, DWORD dwMenuIDInsert);
  151. HRESULT _HrReloadMRUViewMenu(HMENU hmenuView);
  152. HRESULT _HrAddExtraViewMenu(HMENU hmenuView, IOEMessageList * pIMsgList);
  153. VOID _AddViewToMRU(RULEID ridFilter);
  154. BOOL _FViewInMRUList(RULEID ridFilter, DWORD * pdwID);
  155. BOOL _FValiadateMRUList(VOID);
  156. };
  157. HRESULT HrCreateViewMenu(DWORD dwFlags, CViewMenu ** ppViewMenu);