Add log_addins oomhelp function
authorAndre Heinecke <aheinecke@intevation.de>
Fri, 6 Jul 2018 09:16:19 +0000 (11:16 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Fri, 6 Jul 2018 09:16:19 +0000 (11:16 +0200)
* src/oomhelp.cpp, src/oomhelp.h (log_addins): New.
(get_oom_object): Debug dispid.

--
I could not find a place where the call to Item(x) does
not result in the general 80020009 exception. Strange.
There is something fishy here because "Item" has dispid 0. But
this is also what OutlookSpy shows.

src/oomhelp.cpp
src/oomhelp.h

index b0097d0..0826f49 100644 (file)
@@ -316,10 +316,10 @@ get_oom_object (LPDISPATCH pStart, const char *fullname)
         SysFreeString (parmstr);
       if (hr != S_OK || vtResult.vt != VT_DISPATCH)
         {
-          log_debug ("%s:%s: failure: '%s' p=%p vt=%d hr=0x%x argErr=0x%x",
+          log_debug ("%s:%s: failure: '%s' p=%p vt=%d hr=0x%x argErr=0x%x dispid=0x%x",
                      SRCNAME, __func__,
                      name, vtResult.pdispVal, vtResult.vt, (unsigned int)hr,
-                     (unsigned int)argErr);
+                     (unsigned int)argErr, (unsigned int)dispid);
           dump_excepinfo (execpinfo);
           VariantClear (&vtResult);
           gpgol_release (pDisp);
@@ -2119,3 +2119,60 @@ get_ol_ui_language ()
   VariantClear (&var);
   return result;
 }
+
+void
+log_addins ()
+{
+  LPDISPATCH app = GpgolAddin::get_instance ()->get_application ();
+
+  if (!app)
+    {
+      TRACEPOINT;
+      return;
+   }
+
+  LPDISPATCH addins = get_oom_object (app, "COMAddins");
+
+  if (!addins)
+    {
+      TRACEPOINT;
+      return;
+    }
+
+  std::string activeAddins;
+  int count = get_oom_int (addins, "Count");
+  for (int i = 1; i <= count; i++)
+    {
+      std::string item = std::string ("Item(") + std::to_string (i) + ")";
+
+      LPDISPATCH addin = get_oom_object (addins, item.c_str ());
+
+      if (!addin)
+        {
+          TRACEPOINT;
+          continue;
+        }
+      bool connected = get_oom_bool (addin, "Connect");
+      if (!connected)
+        {
+          gpgol_release (addin);
+          continue;
+        }
+
+      char *progId = get_oom_string (addin, "ProgId");
+      gpgol_release (addin);
+
+      if (!progId)
+        {
+          TRACEPOINT;
+          continue;
+        }
+      activeAddins += std::string (progId) + "\n";
+      xfree (progId);
+    }
+  gpgol_release (addins);
+
+  log_debug ("%s:%s:Active Addins:\n%s", SRCNAME, __func__,
+             activeAddins.c_str ());
+  return;
+}
index 8b8c7a4..d4fd0f5 100644 (file)
@@ -339,6 +339,9 @@ LPDISPATCH create_mail (void);
 
 LPDISPATCH get_account_for_mail (const char *mbox);
 
+/* Print all active addins to log */
+void log_addins (void);
+
 /* Sender fallbacks. All return either null or a malloced address. */
 char *get_sender_CurrentUser (LPDISPATCH mailitem);
 char *get_sender_Sender (LPDISPATCH mailitem);