Added utility method for looking up flag values in Rtcom database. Whoever thought...
[qwerkisync] / EventTypes / RtcomEvent.cpp
index cb0942f..b595858 100644 (file)
  * <http://www.gnu.org/licenses/>.
  */
 
+#include "RtcomEvent.h"
+
+#include <QDebug>
+
+#include <QHash>
+#include <QString>
+
 #include <rtcom-eventlogger/event.h>
+#include <rtcom-eventlogger/eventlogger.h>
 
-#include "RtcomEvent.h"
+#include <stdexcept>
 
 using namespace EventTypes;
 
@@ -30,3 +38,33 @@ void RtcomEvent::freeRTComContents(RTComElEvent &event)
 {
        rtcom_el_event_free_contents(&event);
 }
+
+const unsigned int RtcomEvent::GetFlagValue(const QString &value) const
+{
+       static QHash<QString, uint> valueLookups;
+
+       if(!valueLookups.contains(value))
+       {
+               RTComEl *el(rtcom_el_new());
+               if(NULL != el)
+               {
+                       gint flagValue;
+                       if(-1 != (flagValue = rtcom_el_get_flag_value(el, value.toUtf8())))
+                               valueLookups.insert(value, flagValue);
+
+                       g_object_unref(el);
+
+                       if(-1 == flagValue)
+                       {
+                               throw std::runtime_error(
+                                       QString("Unable to find flag value '%1'' in rtcom database")
+                                               .arg(value).toStdString());
+                       }
+               }
+               else
+                       qDebug() << "Failed to create event logger.";
+       }
+
+       return valueLookups.value(value);
+}
+