Corrects error at Outlook COM server startup, when Outlook is installed but no account is configured. Try to speed up Outlook entry ID resolution. Gets and logs Outlook version.

cusax-fix
Vincent Lucas 13 years ago
parent f714d6ec13
commit 4fbc19e87c

@ -18,6 +18,22 @@
* @author Vincent Lucas
*/
/**
* The number of registries known for the different Outlook version.
*/
int nbOutlookRegister = 4;
/**
* The registries known for the different Outlook version.
*/
TCHAR outlookRegister[][MAX_PATH] = {
TEXT("{E83B4360-C208-4325-9504-0D23003A74A5}"), // Outlook 2013
TEXT("{1E77DE88-BCAB-4C37-B9E5-073AF52DFD7A}"), // Outlook 2010
TEXT("{24AAE126-0911-478F-A019-07B875EB9996}"), // Outlook 2007
TEXT("{BC174BAD-2F53-4855-A1D5-0D575C19B1EA}") // Outlook 2003
};
/**
* Returns the bitness of the Outlook installation.
*
@ -26,14 +42,6 @@
*/
int MAPIBitness_getOutlookBitnessVersion(void)
{
int nbOutlookRegister = 3;
TCHAR outlookRegister[][MAX_PATH] = {
TEXT("{E83B4360-C208-4325-9504-0D23003A74A5}"), // Outlook 2013
TEXT("{1E77DE88-BCAB-4C37-B9E5-073AF52DFD7A}"), // Outlook 2010
TEXT("{24AAE126-0911-478F-A019-07B875EB9996}"), // Outlook 2007
TEXT("{BC174BAD-2F53-4855-A1D5-0D575C19B1EA}") // Outlook 2003
};
DWORD pathLength = 0;
for(int i = 0; i < nbOutlookRegister; ++i)
@ -62,3 +70,46 @@ int MAPIBitness_getOutlookBitnessVersion(void)
return -1;
}
/**
* Returns the Outlook version installed.
*
* @return 2013 for "Outlook 2013", 2010 for "Outlook 2010", 2007 for "Outlook
* 2007" or 2003 for "Outlook 2003". -1 otherwise.
*/
int MAPIBitness_getOutlookVersion(void)
{
int outlookVersions[] = {
2013, // Outlook 2013
2010, // Outlook 2010
2007, // Outlook 2007
2003 // Outlook 2003
};
DWORD pathLength = 0;
for(int i = 0; i < nbOutlookRegister; ++i)
{
if(MsiProvideQualifiedComponent(
outlookRegister[i],
TEXT("outlook.x64.exe"),
(DWORD) INSTALLMODE_DEFAULT,
NULL,
&pathLength)
== ERROR_SUCCESS)
{
return outlookVersions[i];
}
else if(MsiProvideQualifiedComponent(
outlookRegister[i],
TEXT("outlook.exe"),
(DWORD) INSTALLMODE_DEFAULT,
NULL,
&pathLength)
== ERROR_SUCCESS)
{
return outlookVersions[i];
}
}
return -1;
}

@ -16,4 +16,6 @@
int MAPIBitness_getOutlookBitnessVersion(void);
int MAPIBitness_getOutlookVersion(void);
#endif

@ -406,10 +406,13 @@ HRESULT MsOutlookAddrBookContactSourceService_MAPIInitialize
| MAPI_NO_MAIL
| MAPI_USE_DEFAULT,
&mapiSession);
// Register the notification of contact changed,
// created and deleted.
MAPINotification_registerNotifyAllMsgStores(
mapiSession);
if(HR_SUCCEEDED(hResult))
{
// Register the notification of contact changed,
// created and deleted.
MAPINotification_registerNotifyAllMsgStores(
mapiSession);
}
}
::SetCurrentDirectory(lpszWorkingDir);
MAPISession_unlock();

@ -44,3 +44,29 @@ Java_net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContac
MsOutlookAddrBookContactSourceService_MAPIUninitializeCOMServer();
}
/**
* Returns the bitness of the Outlook installation.
*
* @return 64 if Outlook 64 bits version is installed. 32 if Outlook 32 bits
* version is installed. -1 otherwise.
*/
JNIEXPORT int JNICALL
Java_net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService_getOutlookBitnessVersion
(JNIEnv *jniEnv, jclass clazz)
{
return MAPIBitness_getOutlookBitnessVersion();
}
/**
* Returns the Outlook version installed.
*
* @return 2013 for "Outlook 2013", 2010 for "Outlook 2010", 2007 for "Outlook
* 2007" or 2003 for "Outlook 2003". -1 otherwise.
*/
JNIEXPORT int JNICALL
Java_net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService_getOutlookVersion
(JNIEnv *jniEnv, jclass clazz)
{
return MAPIBitness_getOutlookVersion();
}

@ -25,6 +25,12 @@ JNIEXPORT void JNICALL
JNIEXPORT void JNICALL Java_net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService_MAPIUninitialize
(JNIEnv *, jclass);
JNIEXPORT int JNICALL Java_net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService_getOutlookBitnessVersion
(JNIEnv *jniEnv, jclass clazz);
JNIEXPORT int JNICALL Java_net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService_getOutlookVersion
(JNIEnv *jniEnv, jclass clazz);
#ifdef __cplusplus
}
#endif

@ -280,4 +280,24 @@ public boolean canBeUsedToSearchContacts()
return !AddrBookActivator.getConfigService().getBoolean(
PNAME_MACOSX_ADDR_BOOK_SEARCH_FIELD_DISABLED, false);
}
/**
* Returns the bitness of this contact source service.
*
* @return The bitness of this contact source service.
*/
public int getBitness()
{
return -1;
}
/**
* Returns the version of this contact source service.
*
* @return The version of this contact source service.
*/
public int getVersion()
{
return -1;
}
}

@ -95,6 +95,14 @@ public class MsOutlookAddrBookContactSourceService
{
throw new RuntimeException(cnfe);
}
int bitness = getOutlookBitnessVersion();
int version = getOutlookVersion();
if(bitness != -1 && version != -1)
{
logger.info(
"Outlook " + version + "-x" + bitness + " is installed.");
}
}
/**
@ -148,6 +156,10 @@ private static native void MAPIInitialize(
private static native void MAPIUninitialize();
public static native int getOutlookBitnessVersion();
public static native int getOutlookVersion();
/**
* Queries this <tt>ContactSourceService</tt> for <tt>SourceContact</tt>s
* which match a specific <tt>query</tt> <tt>Pattern</tt>.
@ -487,4 +499,24 @@ public int hashCode()
return this.id.hashCode();
}
}
/**
* Returns the bitness of this contact source service.
*
* @return The bitness of this contact source service.
*/
public int getBitness()
{
return getOutlookBitnessVersion();
}
/**
* Returns the version of this contact source service.
*
* @return The version of this contact source service.
*/
public int getVersion()
{
return getOutlookVersion();
}
}

@ -36,6 +36,11 @@ public class MsOutlookAddrBookSourceContact
*/
private Boolean locked = Boolean.FALSE;
/**
* The list of Outlook entry IDs we have already seen for this contact.
*/
private Vector<String> ids = new Vector<String>(1, 1);
/**
* Initializes a new MsOutlookAddrBookSourceContact instance.
*
@ -57,6 +62,8 @@ public MsOutlookAddrBookSourceContact(
this.setData(SourceContact.DATA_ID, id);
this.setDisplayDetails(organization);
this.ids.add(id);
}
/**
@ -347,10 +354,17 @@ public int getIndex()
*/
public boolean match(String id)
{
String localId = this.getId();
if(!this.ids.contains(id))
{
String localId = this.getId();
if(!MsOutlookAddrBookContactQuery.compareEntryIds(id, localId))
{
return false;
}
this.ids.add(id);
}
return (localId.equals(id)
|| MsOutlookAddrBookContactQuery.compareEntryIds(id, localId));
return true;
}
/**

@ -38,4 +38,18 @@ public interface EditableContactSourceService
* @param id The ID of the contact to remove.
*/
public void deleteContact(String id);
/**
* Returns the bitness of this contact source service.
*
* @return The bitness of this contact source service.
*/
public int getBitness();
/**
* Returns the version of this contact source service.
*
* @return The version of this contact source service.
*/
public int getVersion();
}

Loading…
Cancel
Save