diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /comm/mailnews/addrbook/src/nsAbWinHelper.h | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/mailnews/addrbook/src/nsAbWinHelper.h')
-rw-r--r-- | comm/mailnews/addrbook/src/nsAbWinHelper.h | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/comm/mailnews/addrbook/src/nsAbWinHelper.h b/comm/mailnews/addrbook/src/nsAbWinHelper.h new file mode 100644 index 0000000000..5411ae94fd --- /dev/null +++ b/comm/mailnews/addrbook/src/nsAbWinHelper.h @@ -0,0 +1,183 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef nsAbWinHelper_h___ +#define nsAbWinHelper_h___ + +#include <windows.h> +#include "../../mapi/include/mapix.h" + +#include "nsString.h" +#include "mozilla/StaticMutex.h" + +#define kOutlookDirectoryScheme "moz-aboutlookdirectory:///" +#define kOutlookCardScheme "moz-aboutlookcard:///" +#define kDummyDisplayName "__MailUser__" + +struct nsMapiEntry { + // Can't be assigned since it would double up the reference in `mEntryId`. + nsMapiEntry& operator=(nsMapiEntry&) = delete; + ULONG mByteCount; + LPENTRYID mEntryId; + + nsMapiEntry(void); + ~nsMapiEntry(void); + nsMapiEntry(ULONG aByteCount, LPENTRYID aEntryId); + + static void Move(nsMapiEntry& target, nsMapiEntry& source); + void Assign(ULONG aByteCount, LPENTRYID aEntryId); + void Assign(const nsCString& aString); + void ToString(nsCString& aString) const; + void Dump(void) const; +}; + +struct nsMapiEntryArray { + nsMapiEntry* mEntries; + ULONG mNbEntries; + + nsMapiEntryArray(void); + ~nsMapiEntryArray(void); + + void CleanUp(void); +}; + +class nsAbWinHelper { + public: + nsAbWinHelper(void); + virtual ~nsAbWinHelper(void); + + // Get the top address books + BOOL GetFolders(nsMapiEntryArray& aFolders); + // Get a list of entries for cards/mailing lists in a folder/mailing list + BOOL GetCards(const nsMapiEntry& aParent, LPSRestriction aRestriction, + nsMapiEntryArray& aCards); + // Get a list of mailing lists in a folder + BOOL GetNodes(const nsMapiEntry& aParent, nsMapiEntryArray& aNodes); + // Get the number of cards/mailing lists in a folder/mailing list + BOOL GetCardsCount(const nsMapiEntry& aParent, ULONG& aNbCards); + // Access last MAPI error + HRESULT LastError(void) const { return mLastError; } + // Get the value of a MAPI property of type string + BOOL GetPropertyString(const nsMapiEntry& aObject, ULONG aPropertyTag, + nsCString& aValue); + // Same as previous, but string is returned as unicode. + BOOL GetPropertyUString(const nsMapiEntry& aObject, ULONG aPropertyTag, + nsString& aValue); + // Get multiple string MAPI properties in one call. + // Retrieves the properties from the associated contact object (IMessage) + // not the address book entry (IMailUser). + BOOL GetPropertiesUString(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + const ULONG aPropertyTags[], ULONG aNbProperties, + nsString aValues[], bool aSuccess[]); + // Get the value of a MAPI property of type SYSTIME + BOOL GetPropertyDate(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + bool fromContact, ULONG aPropertyTag, WORD& aYear, + WORD& aMonth, WORD& aDay); + // Get the value of a MAPI property of type LONG + BOOL GetPropertyLong(const nsMapiEntry& aObject, ULONG aPropertyTag, + ULONG& aValue); + // Get the value of a MAPI property of type BIN + BOOL GetPropertyBin(const nsMapiEntry& aObject, ULONG aPropertyTag, + nsMapiEntry& aValue); + // Get the values of a multiple MAPI properties of type MV BIN + BOOL GetPropertiesMVBin(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + const ULONG aPropertyTags[], ULONG aNbProperties, + nsMapiEntry* aEntryIDs[], ULONG aNbElements[], + bool aAllocateMore = false); + // Set the value of a MAPI property of type MV BIN + BOOL SetPropertiesMVBin(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + const ULONG aPropertyTags[], ULONG aNbProperties, + nsMapiEntry* aEntryIDs[], ULONG aNbElements[]); + // Tests if a container contains an entry + BOOL TestOpenEntry(const nsMapiEntry& aContainer, const nsMapiEntry& aEntry); + // Delete an entry in the address book + BOOL DeleteEntry(const nsMapiEntry& aContainer, const nsMapiEntry& aEntry); + // Delete an entry from an Outlook distribution list. + BOOL DeleteEntryfromDL(const nsMapiEntry& aTopDir, + const nsMapiEntry& aDistList, + const nsMapiEntry& aEntry); + // Add an entry to an Outlook distribution list. + BOOL AddEntryToDL(const nsMapiEntry& aTopDir, const nsMapiEntry& aDistList, + const nsMapiEntry& aEntry, const wchar_t* aDisplay, + const wchar_t* aEmail); + // Set the value of a MAPI property of type string in unicode + BOOL SetPropertyUString(const nsMapiEntry& aObject, ULONG aPropertyTag, + const char16_t* aValue); + // Same as previous, but with a bunch of properties in one call. + // Sets the properties on the associated contact object (IMessage) + // not the address book entry (IMailUser). + BOOL SetPropertiesUString(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + const ULONG aPropertyTags[], ULONG aNbProperties, + nsString aValues[]); + // Set the value of a MAPI property of type SYSTIME + BOOL SetPropertyDate(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + bool fromContact, ULONG aPropertyTag, WORD aYear, + WORD aMonth, WORD aDay); + // Create entry in the address book + BOOL CreateEntry(const nsMapiEntry& aParent, nsMapiEntry& aNewEntry); + // Create a distribution list in the address book + BOOL CreateDistList(const nsMapiEntry& aParent, nsMapiEntry& aNewEntry, + const wchar_t* aName); + // Create entry worker + BOOL CreateEntryInternal(const nsMapiEntry& aParent, nsMapiEntry& aNewEntry, + const char* aContactClass, const wchar_t* aName); + // Is the helper correctly initialised? + BOOL IsOK(void) const { return mAddressBook != NULL; } + // Helper to get distribution list members tag. + BOOL GetDlMembersTag(IMAPIProp* aMsg, ULONG& aDlMembersTag, + ULONG& aDlMembersTagOneOff); + // Helper to get distribution list name tag. + BOOL GetDlNameTag(IMAPIProp* aMsg, ULONG& aDlNameTag); + // Helper to compare entry IDs. + bool CompareEntryIDs(nsCString& aEntryID1, nsCString& aEntryID2); + + protected: + HRESULT mLastError; + LPADRBOOK mAddressBook; + LPMAPISESSION mAddressSession; + LPMAPIFREEBUFFER mAddressFreeBuffer; + static uint32_t sEntryCounter; + static mozilla::StaticMutex sMutex; + + // Retrieve the contents of a container, with an optional restriction + BOOL GetContents(const nsMapiEntry& aParent, LPSRestriction aRestriction, + nsMapiEntry** aList, ULONG& aNbElements, ULONG aMapiType); + // Retrieve the values of a set of properties on a MAPI object + BOOL GetMAPIProperties(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + const ULONG aPropertyTags[], ULONG aNbProperties, + LPSPropValue& aValues, ULONG& aValueCount, + bool aFromContact = false); + // Set the values of a set of properties on a MAPI object + BOOL SetMAPIProperties(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + ULONG aNbProperties, const LPSPropValue& aValues, + bool aFromContact); + // Delete a set of properties on a MAPI object + BOOL DeleteMAPIProperties(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + const LPSPropTagArray aProps, bool aFromContact); + HRESULT OpenMAPIObject(const nsMapiEntry& aDir, const nsMapiEntry& aObject, + bool aFromContact, ULONG aFlags, LPUNKNOWN* aResult); + // Clean-up a rowset returned by QueryRows + void MyFreeProws(LPSRowSet aSet); + // Allocation of a buffer for transmission to interfaces + virtual void AllocateBuffer(ULONG aByteCount, LPVOID* aBuffer) = 0; + // Destruction of a buffer provided by the interfaces + virtual void FreeBuffer(LPVOID aBuffer) = 0; + + private: +}; + +class nsAbWinHelperGuard { + public: + explicit nsAbWinHelperGuard(); + ~nsAbWinHelperGuard(void); + + nsAbWinHelper* operator->(void) { return mHelper; } + + private: + nsAbWinHelper* mHelper; +}; + +void makeEntryIdFromURI(const char* aScheme, const char* aUri, + nsCString& aEntry); +#endif // nsAbWinHelper_h___ |