Use localized seperator for categories
authorAndre Heinecke <aheinecke@gnupg.org>
Mon, 18 Mar 2019 11:13:20 +0000 (12:13 +0100)
committerAndre Heinecke <aheinecke@gnupg.org>
Mon, 18 Mar 2019 11:20:41 +0000 (12:20 +0100)
* src/categorymanager.cpp (CategoryManager::getSeperator): New.
* src/oomhelp.cpp (remove_category, add_category): Use it.

--
Outlook actually localizes the seperator. So if you run
two Outlooks on the same account with different locale
settings you are out of luck,.. weird.

src/categorymanager.cpp
src/categorymanager.h
src/oomhelp.cpp

index d641d77..86fff68 100644 (file)
@@ -267,3 +267,20 @@ CategoryManager::getJunkMailCategory ()
     }
   return decStr;
 }
+
+/* static */
+const std::string&
+CategoryManager::getSeperator ()
+{
+  /* This is fun. I have no idea what
+    all breaks if this is changed at runtime so
+    we check it only once per run.*/
+  static std::string sep = readRegStr ("HKEY_CURRENT_USER",
+                                       "Control Panel\\International",
+                                       "sList");
+  if (sep.empty ())
+    {
+      sep = std::string (",");
+    }
+  return sep;
+}
index f76018d..26828f8 100644 (file)
@@ -44,6 +44,9 @@ public:
     /** Get the CategoryManager */
     static std::shared_ptr<CategoryManager> instance ();
 
+    /** Get the Category seperator from the registry. */
+    static const std::string& getSeperator ();
+
     /** Add a category to a mail.
 
       @returns the storeID of the mail / category.
index bef4170..9645602 100644 (file)
@@ -36,6 +36,7 @@
 #include "oomhelp.h"
 #include "cpphelp.h"
 #include "gpgoladdin.h"
+#include "categorymanager.h"
 
 HRESULT
 gpgol_queryInterface (LPUNKNOWN pObj, REFIID riid, LPVOID FAR *ppvObj)
@@ -2007,7 +2008,7 @@ add_category (LPDISPATCH mail, const char *category)
   xfree (tmp);
   if (!newstr.empty ())
     {
-      newstr += ", ";
+      newstr += CategoryManager::getSeperator () + std::string (" ");
     }
   newstr += category;
 
@@ -2028,7 +2029,8 @@ remove_category (LPDISPATCH mail, const char *category, bool exactMatch)
   std::vector<std::string> categories;
   std::istringstream f(tmp);
   std::string s;
-  while (std::getline(f, s, ','))
+  const std::string sep = CategoryManager::getSeperator();
+  while (std::getline(f, s, *(sep.c_str())))
     {
       ltrim(s);
       categories.push_back(s);
@@ -2048,7 +2050,8 @@ remove_category (LPDISPATCH mail, const char *category, bool exactMatch)
       return cat.compare (0, categoryStr.size(), categoryStr) == 0;
     }), categories.end ());
   std::string newCategories;
-  join (categories, ", ", newCategories);
+  std::string newsep = sep + " ";
+  join (categories, newsep.c_str (), newCategories);
 
   TRETURN put_oom_string (mail, "Categories", newCategories.c_str ());
 }