mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-22 00:17:32 +09:00
248 lines
6.8 KiB
C++
248 lines
6.8 KiB
C++
|
|
/* -*- 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/. */
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
|
||
|
|
Windows Live Mail (Win32) import mail and addressbook interfaces
|
||
|
|
|
||
|
|
*/
|
||
|
|
#include "nscore.h"
|
||
|
|
#include "nsStringGlue.h"
|
||
|
|
#include "nsMsgUtils.h"
|
||
|
|
#include "nsIServiceManager.h"
|
||
|
|
#include "nsIImportService.h"
|
||
|
|
#include "nsWMImport.h"
|
||
|
|
#include "nsIMemory.h"
|
||
|
|
#include "nsIImportService.h"
|
||
|
|
#include "nsIImportMail.h"
|
||
|
|
#include "nsIImportMailboxDescriptor.h"
|
||
|
|
#include "nsIImportGeneric.h"
|
||
|
|
#include "nsIImportAddressBooks.h"
|
||
|
|
#include "nsIImportABDescriptor.h"
|
||
|
|
#include "nsIImportFieldMap.h"
|
||
|
|
#include "nsXPCOM.h"
|
||
|
|
#include "nsISupportsPrimitives.h"
|
||
|
|
#include "nsIOutputStream.h"
|
||
|
|
#include "nsIAddrDatabase.h"
|
||
|
|
#include "nsWMSettings.h"
|
||
|
|
#include "nsTextFormatter.h"
|
||
|
|
#include "nsWMStringBundle.h"
|
||
|
|
#include "nsIStringBundle.h"
|
||
|
|
#include "nsUnicharUtils.h"
|
||
|
|
|
||
|
|
#include "WMDebugLog.h"
|
||
|
|
|
||
|
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||
|
|
PRLogModuleInfo *WMLOGMODULE = nullptr;
|
||
|
|
|
||
|
|
class ImportWMMailImpl : public nsIImportMail
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
ImportWMMailImpl();
|
||
|
|
|
||
|
|
static nsresult Create(nsIImportMail** aImport);
|
||
|
|
|
||
|
|
// nsISupports interface
|
||
|
|
NS_DECL_THREADSAFE_ISUPPORTS
|
||
|
|
|
||
|
|
// nsIImportmail interface
|
||
|
|
|
||
|
|
/* void GetDefaultLocation (out nsIFile location, out boolean found, out boolean userVerify); */
|
||
|
|
NS_IMETHOD GetDefaultLocation(nsIFile **location, bool *found, bool *userVerify);
|
||
|
|
|
||
|
|
/* nsIArray FindMailboxes (in nsIFile location); */
|
||
|
|
NS_IMETHOD FindMailboxes(nsIFile *location, nsIArray **_retval);
|
||
|
|
|
||
|
|
NS_IMETHOD ImportMailbox(nsIImportMailboxDescriptor *source,
|
||
|
|
nsIMsgFolder *dstFolder,
|
||
|
|
char16_t **pErrorLog, char16_t **pSuccessLog,
|
||
|
|
bool *fatalError);
|
||
|
|
|
||
|
|
/* unsigned long GetImportProgress (); */
|
||
|
|
NS_IMETHOD GetImportProgress(uint32_t *_retval);
|
||
|
|
|
||
|
|
NS_IMETHOD TranslateFolderName(const nsAString & aFolderName, nsAString & _retval);
|
||
|
|
|
||
|
|
public:
|
||
|
|
static void ReportSuccess(nsString& name, int32_t count, nsString *pStream);
|
||
|
|
static void ReportError(int32_t errorNum, nsString& name, nsString *pStream);
|
||
|
|
static void AddLinebreak(nsString *pStream);
|
||
|
|
static void SetLogs(nsString& success, nsString& error, char16_t **pError, char16_t **pSuccess);
|
||
|
|
|
||
|
|
private:
|
||
|
|
virtual ~ImportWMMailImpl();
|
||
|
|
uint32_t m_bytesDone;
|
||
|
|
};
|
||
|
|
|
||
|
|
nsWMImport::nsWMImport()
|
||
|
|
{
|
||
|
|
// Init logging module.
|
||
|
|
if (!WMLOGMODULE)
|
||
|
|
WMLOGMODULE = PR_NewLogModule("IMPORT");
|
||
|
|
IMPORT_LOG0("nsWMImport Module Created\n");
|
||
|
|
nsWMStringBundle::GetStringBundle();
|
||
|
|
}
|
||
|
|
|
||
|
|
nsWMImport::~nsWMImport()
|
||
|
|
{
|
||
|
|
IMPORT_LOG0("nsWMImport Module Deleted\n");
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMPL_ISUPPORTS(nsWMImport, nsIImportModule)
|
||
|
|
|
||
|
|
NS_IMETHODIMP nsWMImport::GetName(char16_t **name)
|
||
|
|
{
|
||
|
|
NS_ENSURE_ARG_POINTER(name);
|
||
|
|
// nsString title = "Windows Live Mail";
|
||
|
|
// *name = ToNewUnicode(title);
|
||
|
|
*name = nsWMStringBundle::GetStringByID(WMIMPORT_NAME);
|
||
|
|
|
||
|
|
return NS_OK;
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMETHODIMP nsWMImport::GetDescription(char16_t **name)
|
||
|
|
{
|
||
|
|
NS_ENSURE_ARG_POINTER(name);
|
||
|
|
|
||
|
|
// nsString desc = "Windows Live Mail mail and address books";
|
||
|
|
// *name = ToNewUnicode(desc);
|
||
|
|
*name = nsWMStringBundle::GetStringByID(WMIMPORT_DESCRIPTION);
|
||
|
|
return NS_OK;
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMETHODIMP nsWMImport::GetSupports(char **supports)
|
||
|
|
{
|
||
|
|
NS_PRECONDITION(supports != nullptr, "null ptr");
|
||
|
|
if (! supports)
|
||
|
|
return NS_ERROR_NULL_POINTER;
|
||
|
|
|
||
|
|
*supports = strdup(kWMSupportsString);
|
||
|
|
return NS_OK;
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMETHODIMP nsWMImport::GetSupportsUpgrade(bool *pUpgrade)
|
||
|
|
{
|
||
|
|
NS_PRECONDITION(pUpgrade != nullptr, "null ptr");
|
||
|
|
if (! pUpgrade)
|
||
|
|
return NS_ERROR_NULL_POINTER;
|
||
|
|
|
||
|
|
*pUpgrade = true;
|
||
|
|
return NS_OK;
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMETHODIMP nsWMImport::GetImportInterface(const char *pImportType,
|
||
|
|
nsISupports **ppInterface)
|
||
|
|
{
|
||
|
|
NS_ENSURE_ARG_POINTER(pImportType);
|
||
|
|
NS_ENSURE_ARG_POINTER(ppInterface);
|
||
|
|
|
||
|
|
*ppInterface = nullptr;
|
||
|
|
nsresult rv;
|
||
|
|
|
||
|
|
if (!strcmp(pImportType, "settings")) {
|
||
|
|
nsIImportSettings *pSettings = nullptr;
|
||
|
|
rv = nsWMSettings::Create(&pSettings);
|
||
|
|
if (NS_SUCCEEDED(rv)) {
|
||
|
|
pSettings->QueryInterface(kISupportsIID, (void **)ppInterface);
|
||
|
|
}
|
||
|
|
NS_IF_RELEASE(pSettings);
|
||
|
|
return rv;
|
||
|
|
}
|
||
|
|
|
||
|
|
return NS_ERROR_NOT_AVAILABLE;
|
||
|
|
}
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////////
|
||
|
|
nsresult ImportWMMailImpl::Create(nsIImportMail** aImport)
|
||
|
|
{
|
||
|
|
NS_ENSURE_ARG_POINTER(aImport);
|
||
|
|
*aImport = new ImportWMMailImpl();
|
||
|
|
NS_ENSURE_TRUE(*aImport, NS_ERROR_OUT_OF_MEMORY);
|
||
|
|
NS_ADDREF(*aImport);
|
||
|
|
return NS_OK;
|
||
|
|
}
|
||
|
|
|
||
|
|
ImportWMMailImpl::ImportWMMailImpl()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
ImportWMMailImpl::~ImportWMMailImpl()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMPL_ISUPPORTS(ImportWMMailImpl, nsIImportMail)
|
||
|
|
|
||
|
|
NS_IMETHODIMP ImportWMMailImpl::TranslateFolderName(const nsAString & aFolderName, nsAString & _retval)
|
||
|
|
{
|
||
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMETHODIMP ImportWMMailImpl::GetDefaultLocation(nsIFile **ppLoc, bool *found,
|
||
|
|
bool *userVerify)
|
||
|
|
{
|
||
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMETHODIMP ImportWMMailImpl::FindMailboxes(nsIFile *pLoc,
|
||
|
|
nsIArray **ppArray)
|
||
|
|
{
|
||
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||
|
|
}
|
||
|
|
|
||
|
|
void ImportWMMailImpl::AddLinebreak(nsString *pStream)
|
||
|
|
{
|
||
|
|
if (pStream)
|
||
|
|
pStream->Append(char16_t('\n'));
|
||
|
|
}
|
||
|
|
|
||
|
|
void ImportWMMailImpl::ReportSuccess(nsString& name, int32_t count, nsString *pStream)
|
||
|
|
{
|
||
|
|
if (!pStream)
|
||
|
|
return;
|
||
|
|
// load the success string
|
||
|
|
char16_t *pFmt = nsWMStringBundle::GetStringByID(WMIMPORT_MAILBOX_SUCCESS);
|
||
|
|
char16_t *pText = nsTextFormatter::smprintf(pFmt, name.get(), count);
|
||
|
|
pStream->Append(pText);
|
||
|
|
nsTextFormatter::smprintf_free(pText);
|
||
|
|
nsWMStringBundle::FreeString(pFmt);
|
||
|
|
AddLinebreak(pStream);
|
||
|
|
}
|
||
|
|
|
||
|
|
void ImportWMMailImpl::ReportError(int32_t errorNum, nsString& name, nsString *pStream)
|
||
|
|
{
|
||
|
|
if (!pStream)
|
||
|
|
return;
|
||
|
|
// load the error string
|
||
|
|
char16_t *pFmt = nsWMStringBundle::GetStringByID(errorNum);
|
||
|
|
char16_t *pText = nsTextFormatter::smprintf(pFmt, name.get());
|
||
|
|
pStream->Append(pText);
|
||
|
|
nsTextFormatter::smprintf_free(pText);
|
||
|
|
nsWMStringBundle::FreeString(pFmt);
|
||
|
|
AddLinebreak(pStream);
|
||
|
|
}
|
||
|
|
|
||
|
|
void ImportWMMailImpl::SetLogs(nsString& success, nsString& error,
|
||
|
|
char16_t **pError, char16_t **pSuccess)
|
||
|
|
{
|
||
|
|
if (pError)
|
||
|
|
*pError = ToNewUnicode(error);
|
||
|
|
if (pSuccess)
|
||
|
|
*pSuccess = ToNewUnicode(success);
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMETHODIMP ImportWMMailImpl::ImportMailbox(nsIImportMailboxDescriptor *pSource,
|
||
|
|
nsIMsgFolder *pDstFolder,
|
||
|
|
char16_t **pErrorLog,
|
||
|
|
char16_t **pSuccessLog,
|
||
|
|
bool *fatalError)
|
||
|
|
{
|
||
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||
|
|
}
|
||
|
|
|
||
|
|
NS_IMETHODIMP ImportWMMailImpl::GetImportProgress(uint32_t *pDoneSoFar)
|
||
|
|
{
|
||
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||
|
|
}
|