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.
217 lines
5.5 KiB
217 lines
5.5 KiB
/*
|
|
*
|
|
* ABImport.c - Code for calling WABIMP.dll to import
|
|
* Netscape and Eudora files into WAB
|
|
*
|
|
* Assumes this will be compiled with wab32.lib, else need to
|
|
* loadlibrary("wab32.dll") and call GetProcAddress("WABOpen");
|
|
*
|
|
* Exported functions:
|
|
* HrImportNetscapeAB() - Imports Netscape AB into WAB
|
|
* HrImportEudoraAB() - Imports Eudora AB into WAB
|
|
*
|
|
* Rough cut - vikramm 4/3/97
|
|
*
|
|
*/
|
|
|
|
#include "pch.hxx"
|
|
#include <wab.h>
|
|
#include <wabmig.h>
|
|
#include "abimport.h"
|
|
#include <impapi.h>
|
|
#include <newimp.h>
|
|
#include "import.h"
|
|
#include "strconst.h"
|
|
|
|
HRESULT HrImportAB(HWND hWndParent, LPTSTR lpszfnImport);
|
|
|
|
static CImpProgress *g_pProgress = NULL;
|
|
static TCHAR g_szABFmt[CCHMAX_STRINGRES];
|
|
|
|
/*
|
|
*
|
|
* ProgressCallback
|
|
*
|
|
* This is the call back function that updates the progress bar
|
|
*
|
|
* In the function below, IDC_Progress is the ID of the progress
|
|
* bar that will be updated and IDC_MEssage is the ID of the
|
|
* static that will display text returned from the WABImp.Dll
|
|
* Replace these 2 ids with your own ids...
|
|
*
|
|
*/
|
|
HRESULT ProgressCallback(HWND hwnd, LPWAB_PROGRESS lpProgress)
|
|
{
|
|
TCHAR sz[CCHMAX_STRINGRES];
|
|
|
|
Assert(g_pProgress != NULL);
|
|
|
|
if (lpProgress->denominator)
|
|
{
|
|
if (lpProgress->numerator == 0)
|
|
{
|
|
g_pProgress->Reset();
|
|
g_pProgress->AdjustMax(lpProgress->denominator);
|
|
}
|
|
|
|
wnsprintf(sz, ARRAYSIZE(sz), g_szABFmt, lpProgress->numerator + 1, lpProgress->denominator);
|
|
g_pProgress->SetMsg(sz, IDC_MESSAGE_STATIC);
|
|
|
|
g_pProgress->HrUpdate(1);
|
|
}
|
|
|
|
return(S_OK);
|
|
}
|
|
|
|
|
|
// ===========================================================================
|
|
// HrLoadLibraryWabDLL -
|
|
// ===========================================================================
|
|
HINSTANCE LoadLibraryWabDLL (VOID)
|
|
{
|
|
TCHAR szDll[MAX_PATH];
|
|
TCHAR szExpand[MAX_PATH];
|
|
LPTSTR psz;
|
|
DWORD dwType = 0;
|
|
HKEY hKey;
|
|
ULONG cbData = sizeof(szDll);
|
|
|
|
*szDll = '\0';
|
|
|
|
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszWABDLLRegPathKey, 0, KEY_READ, &hKey))
|
|
{
|
|
if (ERROR_SUCCESS == RegQueryValueEx( hKey, "", NULL, &dwType, (LPBYTE) szDll, &cbData))
|
|
if (REG_EXPAND_SZ == dwType)
|
|
{
|
|
ExpandEnvironmentStrings(szDll, szExpand, ARRAYSIZE(szExpand));
|
|
psz = szExpand;
|
|
}
|
|
else
|
|
psz = szDll;
|
|
|
|
RegCloseKey(hKey);
|
|
}
|
|
|
|
if(!lstrlen(psz))
|
|
StrCpyN(psz, WAB_DLL_NAME, MAX_PATH);
|
|
|
|
return(LoadLibrary(psz));
|
|
}
|
|
|
|
|
|
/*
|
|
*
|
|
*
|
|
* HrImportAB
|
|
*
|
|
* Calls the relevant DLL proc and imports corresponding AB
|
|
*
|
|
*/
|
|
HRESULT HrImportAB(HWND hWndParent, LPTSTR lpszfnImport)
|
|
{
|
|
TCHAR sz[CCHMAX_STRINGRES];
|
|
HINSTANCE hinstWabDll;
|
|
LPWABOPEN lpfnWABOpen;
|
|
LPWABOBJECT lpWABObject = NULL;
|
|
LPADRBOOK lpAdrBookWAB = NULL;
|
|
|
|
HRESULT hResult;
|
|
BOOL fFinished = FALSE;
|
|
LPWAB_IMPORT lpfnWABImport = NULL;
|
|
HINSTANCE hinstImportDll = NULL;
|
|
WAB_IMPORT_OPTIONS ImportOptions;
|
|
|
|
ZeroMemory(&ImportOptions, sizeof(WAB_IMPORT_OPTIONS));
|
|
|
|
hinstWabDll = LoadLibraryWabDLL();
|
|
|
|
if (hinstWabDll == NULL)
|
|
return(MAPI_E_NOT_INITIALIZED);
|
|
|
|
lpfnWABOpen = (LPWABOPEN)GetProcAddress(hinstWabDll, szWabOpen);
|
|
if (lpfnWABOpen == NULL)
|
|
{
|
|
hResult = MAPI_E_NOT_INITIALIZED;
|
|
goto out;
|
|
}
|
|
|
|
hinstImportDll = LoadLibrary(szImportDll);
|
|
|
|
if(!hinstImportDll)
|
|
{
|
|
hResult = MAPI_E_NOT_INITIALIZED;
|
|
goto out;
|
|
}
|
|
|
|
if (! (lpfnWABImport = (LPWAB_IMPORT) GetProcAddress(hinstImportDll,lpszfnImport)))
|
|
{
|
|
hResult = MAPI_E_NOT_INITIALIZED;
|
|
goto out;
|
|
}
|
|
|
|
// Flags that can be passed to the WABImp DLL
|
|
//
|
|
ImportOptions.fNoErrors = FALSE; // Display Pop up errors
|
|
ImportOptions.ReplaceOption = WAB_REPLACE_PROMPT; //Prompt user before replacing contacts
|
|
|
|
|
|
if(hResult = lpfnWABOpen(&lpAdrBookWAB, &lpWABObject, NULL, 0))
|
|
goto out;
|
|
|
|
g_pProgress = new CImpProgress;
|
|
if (g_pProgress == NULL)
|
|
{
|
|
hResult = E_OUTOFMEMORY;
|
|
goto out;
|
|
}
|
|
|
|
g_pProgress->Init(hWndParent, FALSE);
|
|
|
|
LoadString(g_hInstImp, idsImportingABFmt, g_szABFmt, ARRAYSIZE(g_szABFmt));
|
|
|
|
LoadString(g_hInstImp, idsImportABTitle, sz, ARRAYSIZE(sz));
|
|
g_pProgress->SetTitle(sz);
|
|
|
|
LoadString(g_hInstImp, idsImportAB, sz, ARRAYSIZE(sz));
|
|
g_pProgress->SetMsg(sz, IDC_FOLDER_STATIC);
|
|
|
|
g_pProgress->Show(0);
|
|
|
|
hResult = lpfnWABImport(hWndParent,
|
|
lpAdrBookWAB,
|
|
lpWABObject,
|
|
(LPWAB_PROGRESS_CALLBACK)&ProgressCallback,
|
|
&ImportOptions);
|
|
if (hResult == MAPI_E_USER_CANCEL)
|
|
{
|
|
hResult = hrUserCancel;
|
|
}
|
|
else if (FAILED(hResult))
|
|
{
|
|
ImpMessageBox( hWndParent,
|
|
MAKEINTRESOURCE(idsImportTitle),
|
|
MAKEINTRESOURCE(idsABImportError),
|
|
NULL,
|
|
MB_OK | MB_ICONEXCLAMATION );
|
|
}
|
|
|
|
out:
|
|
if (g_pProgress != NULL)
|
|
{
|
|
g_pProgress->Release();
|
|
g_pProgress = NULL;
|
|
}
|
|
|
|
if (lpAdrBookWAB)
|
|
lpAdrBookWAB->Release();
|
|
|
|
if (lpWABObject)
|
|
lpWABObject->Release();
|
|
|
|
if(hinstImportDll)
|
|
FreeLibrary(hinstImportDll);
|
|
|
|
FreeLibrary(hinstImportDll);
|
|
|
|
return hResult;
|
|
}
|