diff --git a/lib/native/windows-64/jmsoutlookaddrbook.dll b/lib/native/windows-64/jmsoutlookaddrbook.dll
index 450048c6c..7ea42bf27 100755
Binary files a/lib/native/windows-64/jmsoutlookaddrbook.dll and b/lib/native/windows-64/jmsoutlookaddrbook.dll differ
diff --git a/lib/native/windows-64/jmsoutlookaddrbookcomserver32.exe b/lib/native/windows-64/jmsoutlookaddrbookcomserver32.exe
index 2fc9b275c..b9f1d60e4 100755
Binary files a/lib/native/windows-64/jmsoutlookaddrbookcomserver32.exe and b/lib/native/windows-64/jmsoutlookaddrbookcomserver32.exe differ
diff --git a/lib/native/windows-64/jmsoutlookaddrbookcomserver64.exe b/lib/native/windows-64/jmsoutlookaddrbookcomserver64.exe
index dcd540a85..b752611e1 100755
Binary files a/lib/native/windows-64/jmsoutlookaddrbookcomserver64.exe and b/lib/native/windows-64/jmsoutlookaddrbookcomserver64.exe differ
diff --git a/lib/native/windows/jmsoutlookaddrbook.dll b/lib/native/windows/jmsoutlookaddrbook.dll
index 16f9c09a9..2bf7d4764 100755
Binary files a/lib/native/windows/jmsoutlookaddrbook.dll and b/lib/native/windows/jmsoutlookaddrbook.dll differ
diff --git a/lib/native/windows/jmsoutlookaddrbookcomserver32.exe b/lib/native/windows/jmsoutlookaddrbookcomserver32.exe
index 0b9435592..6f6dcaa96 100755
Binary files a/lib/native/windows/jmsoutlookaddrbookcomserver32.exe and b/lib/native/windows/jmsoutlookaddrbookcomserver32.exe differ
diff --git a/lib/native/windows/jmsoutlookaddrbookcomserver64.exe b/lib/native/windows/jmsoutlookaddrbookcomserver64.exe
index 1c17cc8e5..801563a37 100755
Binary files a/lib/native/windows/jmsoutlookaddrbookcomserver64.exe and b/lib/native/windows/jmsoutlookaddrbookcomserver64.exe differ
diff --git a/src/native/addrbook/msoutlook/MAPIBitness.cxx b/src/native/addrbook/msoutlook/MAPIBitness.cxx
index 1ecec0ecc..2dbc8357e 100644
--- a/src/native/addrbook/msoutlook/MAPIBitness.cxx
+++ b/src/native/addrbook/msoutlook/MAPIBitness.cxx
@@ -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;
+}
diff --git a/src/native/addrbook/msoutlook/MAPIBitness.h b/src/native/addrbook/msoutlook/MAPIBitness.h
index 9039b0bdf..645afa245 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 ff6f3b47e..88754d164 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 21b5f5c0f..afe946197 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 a8de35257..10b142f1e 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 933198398..2187ac45d 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 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;
+ }
}
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 59bbcb8b8..bbe611087 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 @@ private static native void MAPIInitialize(
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 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();
+ }
}
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 7da1544b3..0b4057633 100644
--- a/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookSourceContact.java
+++ b/src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookSourceContact.java
@@ -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 ids = new Vector(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;
}
/**
diff --git a/src/net/java/sip/communicator/service/contactsource/EditableContactSourceService.java b/src/net/java/sip/communicator/service/contactsource/EditableContactSourceService.java
index 1734a40a9..db1265fed 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();
}