From 4fbc19e87cd83185fd07d938eea6faa7fa6331ed Mon Sep 17 00:00:00 2001 From: Vincent Lucas Date: Fri, 26 Jul 2013 22:51:24 +0200 Subject: 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. --- src/native/addrbook/msoutlook/MAPIBitness.cxx | 67 +++++++++++++++++++--- src/native/addrbook/msoutlook/MAPIBitness.h | 2 + .../MsOutlookAddrBookContactSourceService.cxx | 11 ++-- ...tlook_MsOutlookAddrBookContactSourceService.cxx | 26 +++++++++ ...outlook_MsOutlookAddrBookContactSourceService.h | 6 ++ .../macosx/MacOSXAddrBookContactSourceService.java | 20 +++++++ .../MsOutlookAddrBookContactSourceService.java | 32 +++++++++++ .../msoutlook/MsOutlookAddrBookSourceContact.java | 20 ++++++- .../EditableContactSourceService.java | 14 +++++ 9 files changed, 183 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/native/addrbook/msoutlook/MAPIBitness.cxx b/src/native/addrbook/msoutlook/MAPIBitness.cxx index 1ecec0e..2dbc835 100644 --- a/src/native/addrbook/msoutlook/MAPIBitness.cxx +++ b/src/native/addrbook/msoutlook/MAPIBitness.cxx @@ -19,6 +19,22 @@ */ /** + * 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. * * @return 64 if Outlook 64 bits version is installed. 32 if Outlook 32 bits @@ -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; +} diff --git a/src/native/addrbook/msoutlook/MAPIBitness.h b/src/native/addrbook/msoutlook/MAPIBitness.h index 9039b0b..645afa2 100644 --- a/src/native/addrbook/msoutlook/MAPIBitness.h +++ b/src/native/addrbook/msoutlook/MAPIBitness.h @@ -16,4 +16,6 @@ int MAPIBitness_getOutlookBitnessVersion(void); +int MAPIBitness_getOutlookVersion(void); + #endif diff --git a/src/native/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.cxx b/src/native/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.cxx index ff6f3b4..88754d1 100644 --- a/src/native/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.cxx +++ b/src/native/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.cxx @@ -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(); diff --git a/src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.cxx b/src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.cxx index 21b5f5c..afe9461 100644 --- a/src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.cxx +++ b/src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.cxx @@ -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(); +} diff --git a/src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.h b/src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.h index a8de352..10b142f 100644 --- a/src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.h +++ b/src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.h @@ -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 diff --git a/src/net/java/sip/communicator/plugin/addrbook/macosx/MacOSXAddrBookContactSourceService.java b/src/net/java/sip/communicator/plugin/addrbook/macosx/MacOSXAddrBookContactSourceService.java index 9331983..2187ac4 100644 --- a/src/net/java/sip/communicator/plugin/addrbook/macosx/MacOSXAddrBookContactSourceService.java +++ b/src/net/java/sip/communicator/plugin/addrbook/macosx/MacOSXAddrBookContactSourceService.java @@ -280,4 +280,24 @@ public class MacOSXAddrBookContactSourceService 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; + } } diff --git a/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.java b/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.java index 59bbcb8..bbe6110 100644 --- a/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.java +++ b/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.java @@ -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 @@ public class MsOutlookAddrBookContactSourceService private static native void MAPIUninitialize(); + public static native int getOutlookBitnessVersion(); + + public static native int getOutlookVersion(); + /** * Queries this ContactSourceService for SourceContacts * which match a specific query Pattern. @@ -487,4 +499,24 @@ public class MsOutlookAddrBookContactSourceService 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(); + } } diff --git a/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookSourceContact.java b/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookSourceContact.java index 7da1544..0b40576 100644 --- a/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookSourceContact.java +++ b/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookSourceContact.java @@ -37,6 +37,11 @@ public class MsOutlookAddrBookSourceContact private Boolean locked = Boolean.FALSE; /** + * The list of Outlook entry IDs we have already seen for this contact. + */ + private Vector ids = new Vector(1, 1); + + /** * Initializes a new MsOutlookAddrBookSourceContact instance. * * @param contactSource The ContactSourceService which is creating the new @@ -57,6 +62,8 @@ public class MsOutlookAddrBookSourceContact this.setData(SourceContact.DATA_ID, id); this.setDisplayDetails(organization); + + this.ids.add(id); } /** @@ -347,10 +354,17 @@ public class MsOutlookAddrBookSourceContact */ 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; } /** diff --git a/src/net/java/sip/communicator/service/contactsource/EditableContactSourceService.java b/src/net/java/sip/communicator/service/contactsource/EditableContactSourceService.java index 1734a40..db1265f 100644 --- a/src/net/java/sip/communicator/service/contactsource/EditableContactSourceService.java +++ b/src/net/java/sip/communicator/service/contactsource/EditableContactSourceService.java @@ -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(); } -- cgit v1.1