aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVincent Lucas <chenzo@jitsi.org>2013-07-26 22:51:24 +0200
committerVincent Lucas <chenzo@jitsi.org>2013-07-26 22:51:24 +0200
commit4fbc19e87cd83185fd07d938eea6faa7fa6331ed (patch)
tree38cee4b032a58e73492905c9690da9abcaae1f78 /src
parentf714d6ec1381cda46573a7ad7daa0a55d273f859 (diff)
downloadjitsi-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')
-rw-r--r--src/native/addrbook/msoutlook/MAPIBitness.cxx67
-rw-r--r--src/native/addrbook/msoutlook/MAPIBitness.h2
-rw-r--r--src/native/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.cxx11
-rw-r--r--src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.cxx26
-rw-r--r--src/native/addrbook/msoutlook/net_java_sip_communicator_plugin_addrbook_msoutlook_MsOutlookAddrBookContactSourceService.h6
-rw-r--r--src/net/java/sip/communicator/plugin/addrbook/macosx/MacOSXAddrBookContactSourceService.java20
-rw-r--r--src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookContactSourceService.java32
-rw-r--r--src/net/java/sip/communicator/plugin/addrbook/msoutlook/MsOutlookAddrBookSourceContact.java20
-rw-r--r--src/net/java/sip/communicator/service/contactsource/EditableContactSourceService.java14
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();
}