mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-24 01:17:34 +09:00
87 lines
2.7 KiB
C++
87 lines
2.7 KiB
C++
/* -*- 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;
|
|
}
|
|
|