Skip to content

Commit 80d2117

Browse files
committed
Updated design
1 parent 3a0704f commit 80d2117

10 files changed

Lines changed: 227 additions & 40 deletions

File tree

src/server/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@ list(APPEND LIBS
1616
Qt6::QuickDialogs2 Qt6::QuickControls2
1717
${CMARK_LIBRARY} ${CMARK_EXT_LIBRARY}
1818
<<<<<<< HEAD
19+
<<<<<<< HEAD
1920
<<<<<<< HEAD
2021
protobuf::libprotobuf
22+
=======
23+
>>>>>>> fbae1ad9 (Updated design)
2124
minizip
2225
OpenSSL::Crypto
2326
wayland-client
@@ -735,6 +738,7 @@ set(VICINAE_QML_FILES
735738
src/qml/qml/SearchableDropdown.qml
736739
src/qml/qml/ClipboardHistoryView.qml
737740
src/qml/qml/ClipboardFilterAccessory.qml
741+
src/qml/qml/LinkPreview.qml
738742
src/qml/qml/DetailPanel.qml
739743
src/qml/qml/MetadataBar.qml
740744
src/qml/qml/AlertDialog.qml

src/server/database/clipboard/migrations.qrc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@
22
<qresource prefix="database/clipboard">
33
<file>migrations/001_init.sql</file>
44
<file>migrations/002_add_url_metadata.sql</file>
5-
<file>migrations/003_add_og_image.sql</file>
65
</qresource>
76
</RCC>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
ALTER TABLE selection ADD COLUMN og_title TEXT;
22
ALTER TABLE selection ADD COLUMN og_description TEXT;
3+
ALTER TABLE selection ADD COLUMN og_image TEXT;

src/server/database/clipboard/migrations/003_add_og_image.sql

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/server/src/qml/clipboard-history-view-host.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,15 @@ void ClipboardHistoryViewHost::handleDataRetrieved(int totalCount) {
165165
void ClipboardHistoryViewHost::loadDetail(const ClipboardHistoryEntry &entry) {
166166
m_detailTextContent.clear();
167167
m_detailImageSource.clear();
168+
m_detailOgTitle.clear();
169+
m_detailOgDescription.clear();
168170
m_detailOgImageUrl.clear();
169171
m_hasDetailError = false;
170172
m_detailErrorTitle.clear();
171173
m_detailErrorDescription.clear();
172174

175+
m_detailOgTitle = entry.ogTitle.value_or(QString());
176+
m_detailOgDescription = entry.ogDescription.value_or(QString());
173177
m_detailOgImageUrl = entry.ogImage.value_or(QString());
174178
m_detailMimeType = entry.mimeType;
175179
m_detailSize = formatSize(entry.size);
@@ -270,6 +274,8 @@ void ClipboardHistoryViewHost::clearDetail() {
270274
m_hasDetailError = false;
271275
m_detailTextContent.clear();
272276
m_detailImageSource.clear();
277+
m_detailOgTitle.clear();
278+
m_detailOgDescription.clear();
273279
m_detailOgImageUrl.clear();
274280
m_detailMimeType.clear();
275281
m_detailSize.clear();

src/server/src/qml/clipboard-history-view-host.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ class ClipboardHistoryViewHost : public ViewHostBase {
2727
Q_PROPERTY(QString detailEncryptionIcon READ detailEncryptionIcon NOTIFY detailChanged)
2828
Q_PROPERTY(QString detailErrorTitle READ detailErrorTitle NOTIFY detailChanged)
2929
Q_PROPERTY(QString detailErrorDescription READ detailErrorDescription NOTIFY detailChanged)
30+
Q_PROPERTY(QString detailOgTitle READ detailOgTitle NOTIFY detailChanged)
31+
Q_PROPERTY(QString detailOgDescription READ detailOgDescription NOTIFY detailChanged)
3032
Q_PROPERTY(QString detailOgImageUrl READ detailOgImageUrl NOTIFY detailChanged)
3133

3234
public:
@@ -61,6 +63,8 @@ class ClipboardHistoryViewHost : public ViewHostBase {
6163
QString detailEncryptionIcon() const { return m_detailEncryptionIcon; }
6264
QString detailErrorTitle() const { return m_detailErrorTitle; }
6365
QString detailErrorDescription() const { return m_detailErrorDescription; }
66+
QString detailOgTitle() const { return m_detailOgTitle; }
67+
QString detailOgDescription() const { return m_detailOgDescription; }
6468
QString detailOgImageUrl() const { return m_detailOgImageUrl; }
6569

6670
signals:
@@ -98,6 +102,8 @@ class ClipboardHistoryViewHost : public ViewHostBase {
98102
QString m_detailEncryptionIcon;
99103
QString m_detailErrorTitle;
100104
QString m_detailErrorDescription;
105+
QString m_detailOgTitle;
106+
QString m_detailOgDescription;
101107
QString m_detailOgImageUrl;
102108

103109
std::unique_ptr<QTemporaryFile> m_tmpFile;

src/server/src/qml/qml/ClipboardHistoryView.qml

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -233,36 +233,11 @@ Item {
233233
anchors.fill: parent
234234
active: !root.host.hasDetailError && root.host.detailImageSource === "" && root.host.detailTextContent !== ""
235235
visible: active
236-
sourceComponent: ColumnLayout {
237-
spacing: 0
238-
239-
TextViewer {
240-
text: root.host.detailTextContent
241-
monospace: true
242-
Layout.fillWidth: true
243-
Layout.fillHeight: root.host.detailOgImageUrl === ""
244-
Layout.preferredHeight: root.host.detailOgImageUrl !== "" ? implicitHeight + 20 : -1
245-
Layout.maximumHeight: root.host.detailOgImageUrl !== "" ? parent.height * 0.15 : -1
246-
}
247-
248-
Rectangle {
249-
visible: root.host.detailOgImageUrl !== ""
250-
Layout.fillWidth: true
251-
implicitHeight: 1
252-
color: Theme.divider
253-
}
254-
255-
Image {
256-
visible: root.host.detailOgImageUrl !== ""
257-
source: root.host.detailOgImageUrl
258-
Layout.fillWidth: true
259-
Layout.fillHeight: true
260-
Layout.margins: 10
261-
fillMode: Image.PreserveAspectFit
262-
sourceSize.width: 500
263-
cache: true
264-
asynchronous: true
265-
}
236+
sourceComponent: LinkPreview {
237+
url: root.host.detailTextContent
238+
title: root.host.detailOgTitle
239+
description: root.host.detailOgDescription
240+
imageUrl: root.host.detailOgImageUrl
266241
}
267242
}
268243

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import QtQuick
2+
import QtQuick.Controls
3+
import QtQuick.Layouts
4+
import QtQuick.Effects
5+
6+
ScrollView {
7+
id: root
8+
9+
required property string url
10+
property string title
11+
property string description
12+
property string imageUrl
13+
14+
clip: true
15+
contentWidth: availableWidth
16+
17+
ColumnLayout {
18+
width: root.availableWidth
19+
spacing: 0
20+
21+
Text {
22+
text: root.url
23+
color: Theme.textMuted
24+
font.pointSize: Theme.smallerFontSize
25+
font.family: "monospace"
26+
elide: Text.ElideMiddle
27+
Layout.fillWidth: true
28+
Layout.margins: 12
29+
Layout.bottomMargin: 4
30+
}
31+
32+
Text {
33+
visible: root.title !== ""
34+
text: root.title
35+
color: Theme.accent
36+
font.pointSize: Theme.regularFontSize
37+
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
38+
maximumLineCount: 2
39+
elide: Text.ElideRight
40+
Layout.fillWidth: true
41+
Layout.leftMargin: 12
42+
Layout.rightMargin: 12
43+
Layout.bottomMargin: 4
44+
}
45+
46+
Text {
47+
visible: root.description !== ""
48+
text: root.description
49+
color: Theme.foreground
50+
font.pointSize: Theme.smallerFontSize
51+
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
52+
maximumLineCount: 4
53+
elide: Text.ElideRight
54+
Layout.fillWidth: true
55+
Layout.leftMargin: 12
56+
Layout.rightMargin: 12
57+
Layout.bottomMargin: 8
58+
}
59+
60+
Item {
61+
visible: root.imageUrl !== ""
62+
Layout.fillWidth: true
63+
Layout.leftMargin: 12
64+
Layout.rightMargin: 12
65+
Layout.preferredHeight: ogImage.implicitWidth > 0 ? width * (ogImage.implicitHeight / ogImage.implicitWidth) : 0
66+
67+
Rectangle {
68+
id: imageMask
69+
anchors.fill: parent
70+
radius: 8
71+
visible: false
72+
layer.enabled: true
73+
}
74+
75+
Image {
76+
id: ogImage
77+
anchors.fill: parent
78+
source: root.imageUrl
79+
fillMode: Image.PreserveAspectFit
80+
sourceSize.width: 500
81+
cache: true
82+
asynchronous: true
83+
visible: false
84+
}
85+
86+
MultiEffect {
87+
anchors.fill: ogImage
88+
source: ogImage
89+
maskEnabled: true
90+
maskSource: imageMask
91+
}
92+
}
93+
}
94+
}

0 commit comments

Comments
 (0)