diff options
Diffstat (limited to 'mailnews/addrbook/src/nsAbOutlookDirFactory.cpp')
-rw-r--r-- | mailnews/addrbook/src/nsAbOutlookDirFactory.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/mailnews/addrbook/src/nsAbOutlookDirFactory.cpp b/mailnews/addrbook/src/nsAbOutlookDirFactory.cpp new file mode 100644 index 000000000..164e5a475 --- /dev/null +++ b/mailnews/addrbook/src/nsAbOutlookDirFactory.cpp @@ -0,0 +1,87 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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/. */ +#include "nsAbOutlookDirFactory.h" +#include "nsAbWinHelper.h" +#include "nsIAbDirectory.h" +#include "nsIAbManager.h" +#include "nsEnumeratorUtils.h" +#include "nsServiceManagerUtils.h" +#include "nsComponentManagerUtils.h" +#include "nsIMutableArray.h" +#include "nsArrayEnumerator.h" +#include "nsAbBaseCID.h" +#include "mozilla/Logging.h" + +#ifdef PR_LOGGING +static PRLogModuleInfo* gAbOutlookDirFactoryLog + = PR_NewLogModule("nsAbOutlookDirFactoryLog"); +#endif + +#define PRINTF(args) MOZ_LOG(nsAbOutlookDirFactoryLog, mozilla::LogLevel::Debug, args) + + +NS_IMPL_ISUPPORTS(nsAbOutlookDirFactory, nsIAbDirFactory) + +nsAbOutlookDirFactory::nsAbOutlookDirFactory(void) +{ +} + +nsAbOutlookDirFactory::~nsAbOutlookDirFactory(void) +{ +} + +extern const char *kOutlookDirectoryScheme; + +NS_IMETHODIMP +nsAbOutlookDirFactory::GetDirectories(const nsAString &aDirName, + const nsACString &aURI, + const nsACString &aPrefName, + nsISimpleEnumerator **aDirectories) +{ + NS_ENSURE_ARG_POINTER(aDirectories); + + *aDirectories = nullptr; + nsresult rv = NS_OK; + nsCString stub; + nsCString entry; + nsAbWinType abType = getAbWinType(kOutlookDirectoryScheme, + nsCString(aURI).get(), stub, entry); + + if (abType == nsAbWinType_Unknown) { + return NS_ERROR_FAILURE; + } + nsAbWinHelperGuard mapiAddBook(abType); + nsMapiEntryArray folders; + ULONG nbFolders = 0; + nsCOMPtr<nsIMutableArray> directories(do_CreateInstance(NS_ARRAY_CONTRACTID)); + NS_ENSURE_SUCCESS(rv, rv); + if (!mapiAddBook->IsOK() || !mapiAddBook->GetFolders(folders)) { + return NS_ERROR_FAILURE; + } + + nsCOMPtr<nsIAbManager> abManager(do_GetService(NS_ABMANAGER_CONTRACTID, &rv)); + NS_ENSURE_SUCCESS(rv, rv); + nsAutoCString entryId; + nsAutoCString uri; + + for (ULONG i = 0; i < folders.mNbEntries; ++i) { + folders.mEntries[i].ToString(entryId); + buildAbWinUri(kOutlookDirectoryScheme, abType, uri); + uri.Append(entryId); + + nsCOMPtr<nsIAbDirectory> directory; + rv = abManager->GetDirectory(uri, getter_AddRefs(directory)); + NS_ENSURE_SUCCESS(rv, rv); + directories->AppendElement(directory, false); + } + return NS_NewArrayEnumerator(aDirectories, directories); +} + +// No actual deletion, since you cannot create the address books from Mozilla. +NS_IMETHODIMP nsAbOutlookDirFactory::DeleteDirectory(nsIAbDirectory *aDirectory) +{ + return NS_OK; +} + |