add profile feature

- Allow the user to choose a photo or take one
- Allow the user to modify profile in settings
- Link with LRC model to send profile to peer

Change-Id: I04054f98fbd756c0d08f0b69a4e7020d56bdccab
Tuleap: #531
diff --git a/pixbufmanipulator.cpp b/pixbufmanipulator.cpp
index a9872c7..6bda006 100644
--- a/pixbufmanipulator.cpp
+++ b/pixbufmanipulator.cpp
@@ -18,12 +18,32 @@
 
 #include "pixbufmanipulator.h"
 
-#include <QtCore/QSize>
-#include <QtCore/QMetaType>
+#include <QSize>
+#include <QMetaType>
+#include <QImage>
+#include <QIODevice>
+#include <QByteArray>
+#include <QBuffer>
 
-#include <person.h>
-#include <call.h>
-#include <contactmethod.h>
+#include "person.h"
+#include "call.h"
+#include "contactmethod.h"
+#include "profilemodel.h"
+#include "profile.h"
+
+#include "utils.h"
+
+#undef interface
+
+/*Namespace Interfaces collide with QBuffer*/
+QByteArray QImageToByteArray(QImage image)
+{
+    QByteArray ba;
+    QBuffer buffer(&ba);
+    buffer.open(QIODevice::WriteOnly);
+    image.save(&buffer, "PNG");
+    return ba;
+}
 
 namespace Interfaces {
 
@@ -77,9 +97,12 @@
 
 QVariant PixbufManipulator::personPhoto(const QByteArray& data, const QString& type)
 {
-    Q_UNUSED(type);
-    Q_UNUSED(data);
-    return QVariant();
+    QImage avatar;
+    QByteArray ba = type.toLatin1();
+    const char* c_str2 = ba.data();
+    if (avatar.loadFromData(data.fromBase64(data), c_str2))
+        return Utils::getCirclePhoto(avatar, avatar.size().width());
+    return fallbackAvatar_;
 }
 
 QVariant
@@ -99,11 +122,14 @@
     return QVariant();
 }
 
+
+
 QByteArray
 PixbufManipulator::toByteArray(const QVariant& pxm)
 {
-    Q_UNUSED(pxm);
-    return QByteArray();
+    auto image = pxm.value<QImage>();
+    QByteArray ba = QImageToByteArray(image);
+    return ba;
 }
 
 QVariant
@@ -180,7 +206,9 @@
 QVariant PixbufManipulator::decorationRole(const Account* acc)
 {
     Q_UNUSED(acc)
-    return QVariant();
+    return Utils::getCirclePhoto(ProfileModel::instance().
+                                     selectedProfile()->person()->photo().value<QImage>(),
+                                     imgSize_.width());
 }
 
 } // namespace Interfaces