2023-02-03 13:05:32 +00:00
|
|
|
import QtQuick 2.15
|
2021-09-28 15:04:06 +00:00
|
|
|
|
|
|
|
import utils 1.0
|
2021-10-18 14:05:30 +00:00
|
|
|
|
|
|
|
import StatusQ.Core 0.1
|
|
|
|
import StatusQ.Core.Theme 0.1
|
|
|
|
import StatusQ.Controls 0.1
|
2023-09-18 10:30:19 +00:00
|
|
|
import StatusQ.Components 0.1
|
2021-10-18 14:05:30 +00:00
|
|
|
|
2023-10-13 13:36:07 +00:00
|
|
|
import shared.controls 1.0
|
2021-10-27 21:27:49 +00:00
|
|
|
import shared.status 1.0
|
2021-10-28 20:23:30 +00:00
|
|
|
import shared.panels 1.0
|
2023-10-25 15:20:02 +00:00
|
|
|
|
|
|
|
import shared.controls.delegates 1.0
|
2020-10-23 19:46:44 +00:00
|
|
|
|
2023-10-09 10:27:02 +00:00
|
|
|
Flow {
|
2020-12-07 23:38:53 +00:00
|
|
|
id: root
|
2022-10-07 12:17:09 +00:00
|
|
|
|
2023-10-25 15:20:02 +00:00
|
|
|
required property bool isOnline
|
|
|
|
required property bool playAnimations
|
2023-08-22 15:46:26 +00:00
|
|
|
|
2023-09-13 09:12:47 +00:00
|
|
|
required property var linkPreviewModel
|
2023-10-18 09:03:32 +00:00
|
|
|
required property var gifLinks
|
2022-09-20 14:14:58 +00:00
|
|
|
|
2023-10-25 15:20:02 +00:00
|
|
|
required property bool gifUnfurlingEnabled
|
|
|
|
required property bool canAskToUnfurlGifs
|
|
|
|
|
2023-10-09 12:41:27 +00:00
|
|
|
readonly property alias hoveredLink: linksRepeater.hoveredUrl
|
|
|
|
property string highlightLink: ""
|
|
|
|
|
2023-10-25 15:20:02 +00:00
|
|
|
signal imageClicked(var image, var mouse, string imageSource, string url)
|
|
|
|
signal openContextMenu(var item, string url, string domain)
|
|
|
|
signal setNeverAskAboutUnfurlingAgain(bool neverAskAgain)
|
2022-02-16 19:37:03 +00:00
|
|
|
|
2023-10-18 09:03:32 +00:00
|
|
|
function resetLocalAskAboutUnfurling() {
|
|
|
|
d.localAskAboutUnfurling = true
|
|
|
|
}
|
|
|
|
|
2023-10-09 10:27:02 +00:00
|
|
|
spacing: 12
|
|
|
|
|
|
|
|
//TODO: remove once GIF previews are unfurled sender side
|
|
|
|
|
2023-10-18 09:03:32 +00:00
|
|
|
QtObject {
|
|
|
|
id: d
|
|
|
|
property bool localAskAboutUnfurling: true
|
|
|
|
}
|
2023-10-09 10:27:02 +00:00
|
|
|
|
2023-10-18 09:03:32 +00:00
|
|
|
Loader {
|
|
|
|
visible: active
|
|
|
|
active: root.gifLinks && root.gifLinks.length > 0
|
2023-10-25 15:20:02 +00:00
|
|
|
&& !root.gifUnfurlingEnabled
|
|
|
|
&& d.localAskAboutUnfurling && root.canAskToUnfurlGifs
|
2023-10-18 09:03:32 +00:00
|
|
|
sourceComponent: enableLinkComponent
|
|
|
|
}
|
2023-10-09 10:27:02 +00:00
|
|
|
|
2023-10-18 09:03:32 +00:00
|
|
|
Repeater {
|
|
|
|
id: tempRepeater
|
2023-10-25 15:20:02 +00:00
|
|
|
visible: root.canAskToUnfurlGifs
|
|
|
|
model: root.gifUnfurlingEnabled ? gifLinks : []
|
|
|
|
|
|
|
|
delegate: LinkPreviewGifDelegate {
|
|
|
|
required property string modelData
|
|
|
|
|
|
|
|
link: modelData
|
|
|
|
isOnline: root.isOnline
|
|
|
|
playAnimation: root.playAnimations
|
|
|
|
onClicked: root.imageClicked(imageAlias, mouse, link, link)
|
|
|
|
}
|
2023-10-09 10:27:02 +00:00
|
|
|
}
|
|
|
|
|
2020-10-23 19:46:44 +00:00
|
|
|
Repeater {
|
|
|
|
id: linksRepeater
|
2023-07-21 23:08:44 +00:00
|
|
|
|
2023-10-09 12:41:27 +00:00
|
|
|
property string hoveredUrl: ""
|
|
|
|
|
|
|
|
model: root.linkPreviewModel
|
2023-10-25 15:20:02 +00:00
|
|
|
delegate: LinkPreviewCardDelegate {
|
|
|
|
id: delegate
|
|
|
|
highlight: url === root.highlightLink
|
|
|
|
onHoveredChanged: {
|
|
|
|
linksRepeater.hoveredUrl = hovered ? url : ""
|
2023-10-13 13:36:07 +00:00
|
|
|
}
|
|
|
|
onClicked: (mouse) => {
|
2023-10-25 15:20:02 +00:00
|
|
|
if(mouse.button === Qt.RightButton) {
|
|
|
|
const domain = previewType === Constants.LinkPreviewType.Standard ? linkData.domain : Constants.externalStatusLink
|
|
|
|
root.openContextMenu(delegate, url, domain)
|
|
|
|
return
|
2023-10-13 13:36:07 +00:00
|
|
|
}
|
|
|
|
|
2023-10-25 15:20:02 +00:00
|
|
|
if(previewType === Constants.LinkPreviewType.Standard) {
|
|
|
|
Global.openLinkWithConfirmation(url, linkData.domain)
|
|
|
|
return
|
2023-02-03 13:05:32 +00:00
|
|
|
}
|
2023-10-25 15:20:02 +00:00
|
|
|
|
|
|
|
Global.activateDeepLink(url)
|
feat: whitelist gifs (no url extension needed)
Fixes #1377.
Fixes #1479.
Two sites have been added to the whitelist: giphy.com and tenor.com.
`imageUrls` in its entirety has been removed and instead all links are being handle through the message `linkUrls`. This prevents double-handling of urls that may or may not be images.
The logic to automatically show links previews works like this:
1. If the setting "display chat images" is enabled, all links that *contain* ".png", ".jpg", ".jpeg", ".svg", ".gif" will be automatically shown. If the URL doesn't contain the extension, we are not downloading it. This was meant to be somewhat of a security compromise as we do not want to download each and every link posted in a message just to find out its true content type.
2. If the above setting is *disabled*, then we follow the whitelist settings for tenor and giphy. This allows us to preview gifs that do not have a file extension in their url.
feat: bump status-go to the commit that supports the new whitelist (https://github.com/status-im/status-go/pull/2094), and also lets us get link preview data from urls in the whitelist. NOTE: this commit was branched off status-go `develop`, so once it is merged, and we update this PR to the new commit, we will effectively be getting status-go develop changes. We *could* base that status-go PR off of master if it makes things easier.
fix: height on settings update issue
feat: move date/time of message below links
fix: layout issues when changing setting `neverAskAboutUnfurlingAgain`
feat: Add MessageBorder component to aid in showing rounded corners with different radius
2020-12-11 00:53:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-08-22 15:46:26 +00:00
|
|
|
|
|
|
|
Component {
|
|
|
|
id: enableLinkComponent
|
2023-10-18 09:03:32 +00:00
|
|
|
|
2023-08-22 15:46:26 +00:00
|
|
|
Rectangle {
|
|
|
|
id: enableLinkRoot
|
2023-10-18 09:03:32 +00:00
|
|
|
implicitWidth: 300
|
|
|
|
implicitHeight: childrenRect.height + Style.current.smallPadding
|
2023-08-22 15:46:26 +00:00
|
|
|
radius: 16
|
|
|
|
border.width: 1
|
|
|
|
border.color: Style.current.border
|
|
|
|
color: Style.current.background
|
2023-10-18 09:03:32 +00:00
|
|
|
|
2023-08-22 15:46:26 +00:00
|
|
|
StatusFlatRoundButton {
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.topMargin: Style.current.smallPadding
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.rightMargin: Style.current.smallPadding
|
|
|
|
icon.width: 20
|
|
|
|
icon.height: 20
|
|
|
|
icon.name: "close-circle"
|
2023-10-18 09:03:32 +00:00
|
|
|
onClicked: d.localAskAboutUnfurling = false
|
2023-08-22 15:46:26 +00:00
|
|
|
}
|
|
|
|
Image {
|
|
|
|
id: unfurlingImage
|
|
|
|
source: Style.png("unfurling-image")
|
|
|
|
width: 132
|
|
|
|
height: 94
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.topMargin: Style.current.smallPadding
|
|
|
|
}
|
|
|
|
StatusBaseText {
|
|
|
|
id: enableText
|
2023-10-18 09:03:32 +00:00
|
|
|
text: qsTr("Enable automatic GIF unfurling")
|
2023-08-22 15:46:26 +00:00
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
width: parent.width
|
|
|
|
wrapMode: Text.WordWrap
|
|
|
|
anchors.top: unfurlingImage.bottom
|
|
|
|
anchors.topMargin: Style.current.halfPadding
|
|
|
|
color: Theme.palette.directColor1
|
|
|
|
}
|
|
|
|
StatusBaseText {
|
|
|
|
id: infoText
|
|
|
|
text: qsTr("Once enabled, links posted in the chat may share your metadata with their owners")
|
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
width: parent.width
|
|
|
|
wrapMode: Text.WordWrap
|
|
|
|
anchors.top: enableText.bottom
|
|
|
|
font.pixelSize: 13
|
|
|
|
color: Theme.palette.baseColor1
|
|
|
|
}
|
|
|
|
Separator {
|
|
|
|
id: sep1
|
|
|
|
anchors.top: infoText.bottom
|
|
|
|
anchors.topMargin: Style.current.smallPadding
|
|
|
|
}
|
|
|
|
StatusFlatButton {
|
|
|
|
id: enableBtn
|
|
|
|
objectName: "LinksMessageView_enableBtn"
|
|
|
|
text: qsTr("Enable in Settings")
|
|
|
|
onClicked: {
|
|
|
|
Global.changeAppSectionBySectionType(Constants.appSection.profile, Constants.settingsSubsection.messaging);
|
|
|
|
}
|
|
|
|
width: parent.width
|
|
|
|
anchors.top: sep1.bottom
|
|
|
|
Component.onCompleted: {
|
|
|
|
background.radius = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Separator {
|
|
|
|
id: sep2
|
|
|
|
anchors.top: enableBtn.bottom
|
|
|
|
anchors.topMargin: 0
|
|
|
|
}
|
|
|
|
Item {
|
|
|
|
width: parent.width
|
|
|
|
height: 44
|
|
|
|
anchors.top: sep2.bottom
|
|
|
|
clip: true
|
|
|
|
StatusFlatButton {
|
|
|
|
id: dontAskBtn
|
|
|
|
width: parent.width
|
|
|
|
height: (parent.height+Style.current.padding)
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.topMargin: -Style.current.padding
|
|
|
|
contentItem: Item {
|
|
|
|
StatusBaseText {
|
|
|
|
anchors.centerIn: parent
|
|
|
|
anchors.verticalCenterOffset: Style.current.halfPadding
|
|
|
|
font: dontAskBtn.font
|
2023-10-18 09:03:32 +00:00
|
|
|
color: dontAskBtn.textColor
|
2023-08-22 15:46:26 +00:00
|
|
|
text: qsTr("Don't ask me again")
|
|
|
|
}
|
|
|
|
}
|
2023-10-25 15:20:02 +00:00
|
|
|
onClicked: root.setNeverAskAboutUnfurlingAgain(true)
|
2023-08-22 15:46:26 +00:00
|
|
|
Component.onCompleted: {
|
|
|
|
background.radius = Style.current.padding;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-10-23 19:46:44 +00:00
|
|
|
}
|
2023-10-25 15:20:02 +00:00
|
|
|
|