summaryrefslogtreecommitdiff
path: root/src/dbus/server/pim/locale-factory-boost.cpp
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2013-02-20 14:14:13 +0100
committerPatrick Ohly <patrick.ohly@intel.com>2013-02-26 12:03:45 +0100
commit882ff26695b0209b29583bd53e7fba935a78ec77 (patch)
treef29d09f85a085125668ca75da0a2f8b98e720f45 /src/dbus/server/pim/locale-factory-boost.cpp
parent22a809beae8652fc61f47b4a81b65815c736a509 (diff)
PIM: capture libphonenumber output
Don't let libphonenumber write to stdout. Instead redirect into SyncEvolution logging and manage severity level. For example, previously parsing errors of phone numbers were logged as [ERROR] by libphonenumber. Now that appears as "phonenumber error: ...".
Diffstat (limited to 'src/dbus/server/pim/locale-factory-boost.cpp')
-rw-r--r--src/dbus/server/pim/locale-factory-boost.cpp43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/dbus/server/pim/locale-factory-boost.cpp b/src/dbus/server/pim/locale-factory-boost.cpp
index c82f67e6..c7d9b684 100644
--- a/src/dbus/server/pim/locale-factory-boost.cpp
+++ b/src/dbus/server/pim/locale-factory-boost.cpp
@@ -27,6 +27,7 @@
#include <libebook/libebook.h>
#include <phonenumbers/phonenumberutil.h>
+#include <phonenumbers/logger.h>
#include <boost/locale.hpp>
#include <boost/lexical_cast.hpp>
@@ -352,18 +353,58 @@ private:
std::string m_tel;
};
+class PhoneNumberLogger : public i18n::phonenumbers::Logger
+{
+ const char *getPrefix()
+ {
+ switch (level()) {
+ case i18n::phonenumbers::LOG_FATAL:
+ return "phonenumber fatal";
+ break;
+ case i18n::phonenumbers::LOG_ERROR:
+ return "phonenumber error";
+ break;
+ case i18n::phonenumbers::LOG_WARNING:
+ return "phonenumber warning";
+ break;
+ case i18n::phonenumbers::LOG_INFO:
+ return "phonenumber info";
+ break;
+ case i18n::phonenumbers::LOG_DEBUG:
+ return "phonenumber debug";
+ break;
+ default:
+ return "phonenumber ???";
+ break;
+ }
+ }
+
+public:
+ virtual void WriteMessage(const std::string &msg)
+ {
+ SE_LOG(level() == i18n::phonenumbers::LOG_FATAL ? SyncEvo::Logger::ERROR : SyncEvo::Logger::DEBUG,
+ NULL, getPrefix(), "%s", msg.c_str());
+ }
+};
+
class LocaleFactoryBoost : public LocaleFactory
{
const i18n::phonenumbers::PhoneNumberUtil &m_phoneNumberUtil;
std::locale m_locale;
std::string m_country;
+ PhoneNumberLogger m_logger;
public:
LocaleFactoryBoost() :
m_phoneNumberUtil(*i18n::phonenumbers::PhoneNumberUtil::GetInstance()),
m_locale(genLocale()),
m_country(std::use_facet<boost::locale::info>(m_locale).country())
- {}
+ {
+ // Redirect output of libphonenumber and make it a bit quieter
+ // than it is by default. We map fatal libphonenumber errors
+ // to ERROR and everything else to DEBUG.
+ i18n::phonenumbers::PhoneNumberUtil::SetLogger(&m_logger);
+ }
static std::locale genLocale()
{