diff --git a/src/linkpreviewer.cpp b/src/linkpreviewer.cpp index cf7b85301..03e8fc96f 100644 --- a/src/linkpreviewer.cpp +++ b/src/linkpreviewer.cpp @@ -93,4 +93,9 @@ void LinkPreviewer::loadUrlPreview() } } +bool LinkPreviewer::empty() const +{ + return m_url.isEmpty(); +} + #include "moc_linkpreviewer.cpp" diff --git a/src/linkpreviewer.h b/src/linkpreviewer.h index 31e8bda62..9edafac3e 100644 --- a/src/linkpreviewer.h +++ b/src/linkpreviewer.h @@ -44,6 +44,13 @@ class LinkPreviewer : public QObject */ Q_PROPERTY(QUrl imageSource READ imageSource NOTIFY imageSourceChanged) + /** + * @brief Whether the there is a link to preview. + * + * A linkPreviwer is empty if the URL is empty. + */ + Q_PROPERTY(bool empty READ empty NOTIFY emptyChanged) + public: explicit LinkPreviewer(QObject *parent = nullptr, const NeoChatRoom *room = nullptr, const QUrl &url = {}); @@ -53,6 +60,7 @@ public: [[nodiscard]] QString title() const; [[nodiscard]] QString description() const; [[nodiscard]] QUrl imageSource() const; + [[nodiscard]] bool empty() const; private: const NeoChatRoom *m_currentRoom = nullptr; @@ -71,5 +79,6 @@ Q_SIGNALS: void descriptionChanged(); void imageSourceChanged(); void urlChanged(); + void emptyChanged(); }; Q_DECLARE_METATYPE(LinkPreviewer *) diff --git a/src/qml/Component/Timeline/LinkPreviewDelegate.qml b/src/qml/Component/Timeline/LinkPreviewDelegate.qml index 9fab299ec..4c649a80d 100644 --- a/src/qml/Component/Timeline/LinkPreviewDelegate.qml +++ b/src/qml/Component/Timeline/LinkPreviewDelegate.qml @@ -23,7 +23,7 @@ Loader { * - description - the description of the URL preview. * - imageSource - a source URL for the preview image. */ - property var linkPreviewer + required property var linkPreviewer /** * @brief Standard height for the link preview. @@ -39,7 +39,7 @@ Loader { property bool indicatorEnabled: false visible: active - sourceComponent: linkPreviewer.loaded ? linkPreviewComponent : loadingComponent + sourceComponent: linkPreviewer && linkPreviewer.loaded ? linkPreviewComponent : loadingComponent Component { id: linkPreviewComponent @@ -61,10 +61,10 @@ Loader { color: Kirigami.Theme.highlightColor } Image { - visible: linkPreviewer.imageSource + visible: root.linkPreviewer.imageSource Layout.maximumHeight: root.defaultHeight Layout.maximumWidth: root.defaultHeight - source: linkPreviewer.imageSource + source: root.linkPreviewer.imageSource fillMode: Image.PreserveAspectFit } ColumnLayout { diff --git a/src/qml/Component/Timeline/MessageDelegate.qml b/src/qml/Component/Timeline/MessageDelegate.qml index 657d542b9..79c1d2b27 100644 --- a/src/qml/Component/Timeline/MessageDelegate.qml +++ b/src/qml/Component/Timeline/MessageDelegate.qml @@ -68,7 +68,7 @@ TimelineContainer { } LinkPreviewDelegate { Layout.fillWidth: true - active: !currentRoom.usesEncryption && currentRoom.urlPreviewEnabled && Config.showLinkPreview && root.showLinkPreview + active: !currentRoom.usesEncryption && currentRoom.urlPreviewEnabled && Config.showLinkPreview && root.showLinkPreview && !root.linkPreview.empty linkPreviewer: root.linkPreview indicatorEnabled: root.isVisibleInTimeline() }