summary refs log tree commit diff
path: root/src/timeline
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-18 12:47:35 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-18 12:47:35 +0200
commit81d3bd8ce6d08c99793cb3a5d60b185701cd5e5c (patch)
tree2c7e852367f5b4dbb79ea0220c2de8e2e6cfb4e4 /src/timeline
parentUpdate matrix-structs library (diff)
downloadnheko-81d3bd8ce6d08c99793cb3a5d60b185701cd5e5c.tar.xz
Remove redacted events from other users (#171)
Diffstat (limited to 'src/timeline')
-rw-r--r--src/timeline/TimelineView.cc61
1 files changed, 16 insertions, 45 deletions
diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc
index ded5ad2c..2fef0952 100644
--- a/src/timeline/TimelineView.cc
+++ b/src/timeline/TimelineView.cc
@@ -163,10 +163,8 @@ TimelineView::addBackwardsEvents(const QString &room_id, const mtx::responses::M
         isTimelineFinished = false;
 
         // Queue incoming messages to be rendered later.
-        for (auto const &e : msgs.chunk) {
-                if (isViewable(e))
-                        topMessages_.emplace_back(e);
-        }
+        for (auto const &e : msgs.chunk)
+                topMessages_.emplace_back(e);
 
         // The RoomList message preview will be updated only if this
         // is the first batch of messages received through /messages
@@ -202,7 +200,18 @@ TimelineView::parseMessageEvent(const mtx::events::collections::TimelineEvents &
         using TextEvent   = mtx::events::RoomEvent<msg::Text>;
         using VideoEvent  = mtx::events::RoomEvent<msg::Video>;
 
-        if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Audio>>(event)) {
+        if (mpark::holds_alternative<mtx::events::RedactionEvent<msg::Redaction>>(event)) {
+                auto redaction_event =
+                  mpark::get<mtx::events::RedactionEvent<msg::Redaction>>(event);
+                const auto event_id = QString::fromStdString(redaction_event.redacts);
+
+                QTimer::singleShot(0, this, [event_id, this]() {
+                        if (eventIds_.contains(event_id))
+                                removeEvent(event_id);
+                });
+
+                return nullptr;
+        } else if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Audio>>(event)) {
                 auto audio = mpark::get<mtx::events::RoomEvent<msg::Audio>>(event);
                 return processMessageEvent<AudioEvent, AudioItem>(audio, direction);
         } else if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Emote>>(event)) {
@@ -300,15 +309,8 @@ TimelineView::addEvents(const mtx::responses::Timeline &timeline)
                 isInitialSync     = false;
         }
 
-        for (const auto &e : timeline.events) {
-                // Save the message if it can be rendered.
-                if (isViewable(e))
-                        bottomMessages_.push_back(e);
-
-                // Calculate notifications.
-                /* if (isNotifiable(e)) */
-                /* sendNotification() */
-        }
+        for (const auto &e : timeline.events)
+                bottomMessages_.push_back(e);
 
         if (!bottomMessages_.empty())
                 notifyForLastEvent(bottomMessages_[bottomMessages_.size() - 1]);
@@ -326,37 +328,6 @@ TimelineView::addEvents(const mtx::responses::Timeline &timeline)
         }
 }
 
-inline bool
-TimelineView::isViewable(const TimelineEvent &event) const
-{
-        namespace msg = mtx::events::msg;
-
-        return mpark::holds_alternative<mtx::events::RoomEvent<msg::Audio>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Emote>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::File>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Image>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Notice>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Text>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Video>>(event);
-}
-
-inline bool
-TimelineView::isNotifiable(const TimelineEvent &event) const
-{
-        namespace msg = mtx::events::msg;
-
-        if (local_user_ == getEventSender(event))
-                return false;
-
-        return mpark::holds_alternative<mtx::events::RoomEvent<msg::Audio>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Emote>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::File>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Image>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Notice>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Text>>(event) ||
-               mpark::holds_alternative<mtx::events::RoomEvent<msg::Video>>(event);
-}
-
 void
 TimelineView::init()
 {