From 86d690c4587c72bbf0cb62155c4ccd2f83f6aff9 Mon Sep 17 00:00:00 2001
From: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
Date: Wed, 13 Jan 2016 14:14:37 -0500
Subject: [PATCH] TextRecording: add IsRead role

We can now check to see if a message has been read or set it as such.
Setting the message to read will re-save the text recording on disk.

Tuleap: #203
Change-Id: Idfe67fc374dbf97833825db6fb278663fdada4b0
---
 src/media/textrecording.cpp | 23 +++++++++++++++++++----
 src/media/textrecording.h   |  1 +
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/media/textrecording.cpp b/src/media/textrecording.cpp
index f0611031..c3467b81 100644
--- a/src/media/textrecording.cpp
+++ b/src/media/textrecording.cpp
@@ -550,6 +550,7 @@ QHash<int,QByteArray> InstantMessagingModel::roleNames() const
       roles.insert((int)Media::TextRecording::Role::AuthorUri           , "authorUri"           );
       roles.insert((int)Media::TextRecording::Role::AuthorPresenceStatus, "authorPresenceStatus");
       roles.insert((int)Media::TextRecording::Role::Timestamp           , "timestamp"           );
+      roles.insert((int)Media::TextRecording::Role::IsRead              , "isRead"              );
       roles.insert((int)Media::TextRecording::Role::FormattedDate       , "formattedDate"       );
       roles.insert((int)Media::TextRecording::Role::IsStatus            , "isStatus"            );
    }
@@ -597,6 +598,8 @@ QVariant InstantMessagingModel::data( const QModelIndex& idx, int role) const
                   n->m_pContactMethod->contact()->isPresent() : n->m_pContactMethod->isPresent();
          case (int)Media::TextRecording::Role::Timestamp            :
             return (int)n->m_pMessage->timestamp;
+         case (int)Media::TextRecording::Role::IsRead               :
+            return (int)n->m_pMessage->isRead;
          case (int)Media::TextRecording::Role::FormattedDate        :
             return QDateTime::fromTime_t(n->m_pMessage->timestamp).toString();
          case (int)Media::TextRecording::Role::IsStatus             :
@@ -630,10 +633,22 @@ Qt::ItemFlags InstantMessagingModel::flags(const QModelIndex& idx) const
 ///Set model data
 bool InstantMessagingModel::setData(const QModelIndex& idx, const QVariant &value, int role)
 {
-   Q_UNUSED(idx)
-   Q_UNUSED(value)
-   Q_UNUSED(role)
-   return false;
+    if (idx.column() || !idx.isValid())
+        return false;
+
+    ::TextMessageNode* n = m_pRecording->d_ptr->m_lNodes[idx.row()];
+    switch (role) {
+        case (int)Media::TextRecording::Role::IsRead               :
+            n->m_pMessage->isRead = value.toBool();
+            emit dataChanged(idx,idx);
+            break;
+        default:
+            return false;
+    }
+
+    //Save the conversation
+    m_pRecording->save();
+    return true;
 }
 
 void InstantMessagingModel::addRowBegin()
diff --git a/src/media/textrecording.h b/src/media/textrecording.h
index f0240b16..7de7965e 100644
--- a/src/media/textrecording.h
+++ b/src/media/textrecording.h
@@ -54,6 +54,7 @@ public:
       AuthorUri                             ,
       AuthorPresenceStatus                  ,
       Timestamp                             ,
+      IsRead                                ,
       FormattedDate                         ,
       IsStatus                              ,
       HTML                                  ,
-- 
GitLab