From c7ed80595927e3cf677b843d224083193d3199a5 Mon Sep 17 00:00:00 2001
From: Dennis Beier <nanovim@gmail.com>
Date: Thu, 6 Dec 2018 22:13:39 +0100
Subject: [PATCH] implemented whitelisting

---
 repos/entities/rocketchatchannel.cpp | 34 ++++++++++++++++++++++++++++
 repos/entities/rocketchatchannel.h   |  3 +++
 2 files changed, 37 insertions(+)

diff --git a/repos/entities/rocketchatchannel.cpp b/repos/entities/rocketchatchannel.cpp
index 2538f78..61b728c 100755
--- a/repos/entities/rocketchatchannel.cpp
+++ b/repos/entities/rocketchatchannel.cpp
@@ -184,6 +184,7 @@ unsigned int RocketChatChannel::getUnreadMessages() const
     return mUnreadMessages;
 }
 
+
 void RocketChatChannel::setUnreadMessages( unsigned int value )
 {
     qDebug() << "set unread to: " << value;
@@ -319,3 +320,36 @@ void RocketChatChannel::setBlocked( bool blocked )
     mBlocked = blocked;
     emit dataChanged( mRoomId, "blocked" );
 }
+
+QStringList RocketChatChannel::whiteList(const QList<QString> ids, const qint64 newest,const qint64 oldest)
+{
+    auto idSet = ids.toSet();
+    auto currentList = mMessages.getElements().keys().toSet();
+    auto blacklist = currentList - idSet;
+    QList<QString> buffer = {};
+    std::copy_if (blacklist.begin(), blacklist.end(), std::back_inserter(buffer),
+                  [=](const QString id){
+        bool keep = true;
+        if(mMessages.contains(id) && mMessages.get(id)->getRoomId() == getRoomId()){
+            auto message = mMessages.get(id);
+            keep = message->inTimeIntervall(newest,oldest);
+        }
+        return keep;
+    }
+    );
+    blacklist = buffer.toSet();
+    for(QString id : blacklist){
+        mMessages.remove(id);
+        emit messageDeleted(getRoomId(),id);
+    }
+    return blacklist.toList();
+}
+
+void RocketChatChannel::deleteMessage(const QString id)
+{
+    emit messageDeleted(getRoomId(),id);
+    if(mMessages.contains(id)){
+        mMessages.remove(id);
+    }
+
+}
diff --git a/repos/entities/rocketchatchannel.h b/repos/entities/rocketchatchannel.h
index 771df52..d5fbc27 100755
--- a/repos/entities/rocketchatchannel.h
+++ b/repos/entities/rocketchatchannel.h
@@ -128,6 +128,8 @@ class RocketChatChannel : public QObject
         const QString &getChatPartnerId() const;
         void setChatPartnerId( const QString &chatPartnerId );
 
+        void deleteMessage(const QString id);
+        QStringList whiteList(const QList<QString> ids, const qint64 newest,const qint64 oldest);
     private:
         QString mOwnerName;
         QString mOwnerId;
@@ -154,6 +156,7 @@ class RocketChatChannel : public QObject
         void channelDeleted( const QString &pId, bool deleted );
         void dataChanged( const QString &id, const QString &property );
         void chatPartnerStatusChanged();
+        void messageDeleted(const QString, const QString);
 
 };
 
-- 
GitLab