summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2023-07-28 20:05:47 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2023-08-25 19:03:15 +0200
commit718a58d388abd228c6a08f9fa3365588c06923ba (patch)
treedab9877a7bd16fd291fcd16262d868cf87469c67
parentPort redacted messages (diff)
downloadnheko-718a58d388abd228c6a08f9fa3365588c06923ba.tar.xz
Get rid of redundant constructions and make room implicit
-rw-r--r--resources/qml/MessageView.qml4
-rw-r--r--resources/qml/delegates/Redacted.qml9
-rw-r--r--src/timeline/EventDelegateChooser.cpp6
-rw-r--r--src/timeline/EventDelegateChooser.h15
-rw-r--r--src/timeline/TimelineModel.cpp3
-rw-r--r--src/timeline/TimelineModel.h1
6 files changed, 28 insertions, 10 deletions
diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml
index 41d996c1..417a4f5a 100644
--- a/resources/qml/MessageView.qml
+++ b/resources/qml/MessageView.qml
@@ -65,7 +65,7 @@ Item {
             width: chat.delegateMaxWidth
             height: Math.max((section.item?.height ?? 0) + gridContainer.implicitHeight, 10)
             anchors.horizontalCenter: ListView.view.contentItem.horizontalCenter
-            room: chatRoot.roommodel
+            //room: chatRoot.roommodel
 
             required property var day
             required property bool isSender
@@ -203,7 +203,7 @@ Item {
 
                     color: type == MtxEvent.NoticeMessage ? palette.buttonText : palette.text
                     font.italic: type == MtxEvent.NoticeMessage
-                    formatted: formattedBody
+                    formatted: formattedBody + "a"
 
                     Layout.fillWidth: true
                     //Layout.maximumWidth: implicitWidth
diff --git a/resources/qml/delegates/Redacted.qml b/resources/qml/delegates/Redacted.qml
index a09e4c3f..1bb3209f 100644
--- a/resources/qml/delegates/Redacted.qml
+++ b/resources/qml/delegates/Redacted.qml
@@ -2,10 +2,10 @@
 //
 // SPDX-License-Identifier: GPL-3.0-or-later
 
-import QtQuick 2.15
-import QtQuick.Controls 2.15
-import QtQuick.Layouts 1.15
-import im.nheko 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import im.nheko
 
 Control {
     id: msgRoot
@@ -14,6 +14,7 @@ Control {
     property bool fitsMetadata: false //parent.width - redactedLayout.width > metadataWidth + 4
 
     required property string eventId
+    required property Room room
 
     contentItem: RowLayout {
         id: redactedLayout
diff --git a/src/timeline/EventDelegateChooser.cpp b/src/timeline/EventDelegateChooser.cpp
index 5e6ee37e..7fec38dd 100644
--- a/src/timeline/EventDelegateChooser.cpp
+++ b/src/timeline/EventDelegateChooser.cpp
@@ -84,7 +84,8 @@ void
 EventDelegateChooser::componentComplete()
 {
     QQuickItem::componentComplete();
-    // eventIncubator.reset(eventIndex);
+    eventIncubator.reset(eventId_);
+    replyIncubator.reset(replyId);
     // eventIncubator.forceCompletion();
 }
 
@@ -226,6 +227,9 @@ EventDelegateChooser::DelegateIncubator::reset(QString id)
     for (const auto choice : qAsConst(chooser.choices_)) {
         const auto &choiceValue = choice->roleValues();
         if (choiceValue.contains(role) || choiceValue.empty()) {
+            nhlog::ui()->debug(
+              "Instantiating type: {}, c {}", (int)role, choiceValue.contains(role));
+
             if (auto child = qobject_cast<QQuickItem *>(object())) {
                 child->setParentItem(nullptr);
             }
diff --git a/src/timeline/EventDelegateChooser.h b/src/timeline/EventDelegateChooser.h
index b627b383..1cd2d65a 100644
--- a/src/timeline/EventDelegateChooser.h
+++ b/src/timeline/EventDelegateChooser.h
@@ -55,9 +55,9 @@ public:
     Q_PROPERTY(QQmlListProperty<EventDelegateChoice> choices READ choices CONSTANT FINAL)
     Q_PROPERTY(QQuickItem *main READ main NOTIFY mainChanged FINAL)
     Q_PROPERTY(QQuickItem *reply READ reply NOTIFY replyChanged FINAL)
-    Q_PROPERTY(TimelineModel *room READ room WRITE setRoom NOTIFY roomChanged REQUIRED FINAL)
     Q_PROPERTY(QString eventId READ eventId WRITE setEventId NOTIFY eventIdChanged REQUIRED FINAL)
     Q_PROPERTY(QString replyTo READ replyTo WRITE setReplyTo NOTIFY replyToChanged REQUIRED FINAL)
+    Q_PROPERTY(TimelineModel *room READ room WRITE setRoom NOTIFY roomChanged REQUIRED FINAL)
 
     QQmlListProperty<EventDelegateChoice> choices();
 
@@ -74,9 +74,12 @@ public:
     {
         if (m != room_) {
             room_ = m;
-            eventIncubator.reset(eventId_);
-            replyIncubator.reset(replyId);
             emit roomChanged();
+
+            if (isComponentComplete()) {
+                eventIncubator.reset(eventId_);
+                replyIncubator.reset(replyId);
+            }
         }
     }
     [[nodiscard]] TimelineModel *room() { return room_; }
@@ -85,12 +88,18 @@ public:
     {
         eventId_ = idx;
         emit eventIdChanged();
+
+        if (isComponentComplete())
+            eventIncubator.reset(eventId_);
     }
     [[nodiscard]] QString eventId() const { return eventId_; }
     void setReplyTo(QString id)
     {
         replyId = id;
         emit replyToChanged();
+
+        if (isComponentComplete())
+            replyIncubator.reset(replyId);
     }
     [[nodiscard]] QString replyTo() const { return replyId; }
 
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 066d8b01..66f7d5b8 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -561,6 +561,7 @@ TimelineModel::roleNames() const
       {ReplyTo, "replyTo"},
       {ThreadId, "threadId"},
       {Reactions, "reactions"},
+      {Room, "room"},
       {RoomId, "roomId"},
       {RoomName, "roomName"},
       {RoomTopic, "roomTopic"},
@@ -899,6 +900,8 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r
         auto id = relations(event).replaces().value_or(event_id(event));
         return QVariant::fromValue(events.reactions(id));
     }
+    case Room:
+        return QVariant::fromValue(this);
     case RoomId:
         return QVariant(room_id_);
     case RoomName:
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index b81fc209..2b22ad61 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -267,6 +267,7 @@ public:
         ReplyTo,
         ThreadId,
         Reactions,
+        Room,
         RoomId,
         RoomName,
         RoomTopic,