diff options
author | Vincent Lucas <chenzo@jitsi.org> | 2013-07-26 22:51:24 +0200 |
---|---|---|
committer | Vincent Lucas <chenzo@jitsi.org> | 2013-07-26 22:51:24 +0200 |
commit | 4fbc19e87cd83185fd07d938eea6faa7fa6331ed (patch) | |
tree | 38cee4b032a58e73492905c9690da9abcaae1f78 /src | |
parent | f714d6ec1381cda46573a7ad7daa0a55d273f859 (diff) | |
download | jitsi-4fbc19e87cd83185fd07d938eea6faa7fa6331ed.zip jitsi-4fbc19e87cd83185fd07d938eea6faa7fa6331ed.tar.gz jitsi-4fbc19e87cd83185fd07d938eea6faa7fa6331ed.tar.bz2 |
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.
Diffstat (limited to 'src')
9 files changed, 183 insertions, 15 deletions
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 <tt>ContactSourceService</tt> for <tt>SourceContact</tt>s * which match a specific <tt>query</tt> <tt>Pattern</tt>. @@ -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<String> ids = new Vector<String>(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(); } |