210 lines
6.6 KiB
QML
210 lines
6.6 KiB
QML
import QtQuick 2.15
|
|
|
|
import utils 1.0
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Components 0.1
|
|
|
|
import shared.controls 1.0
|
|
import shared.panels 1.0
|
|
import shared.status 1.0
|
|
import shared.stores 1.0
|
|
|
|
import shared.controls.delegates 1.0
|
|
|
|
Flow {
|
|
id: root
|
|
|
|
property UtilsStore utilsStore
|
|
|
|
required property bool isOnline
|
|
required property bool playAnimations
|
|
|
|
required property var linkPreviewModel
|
|
required property var gifLinks
|
|
|
|
required property bool gifUnfurlingEnabled
|
|
required property bool canAskToUnfurlGifs
|
|
|
|
readonly property alias hoveredLink: linksRepeater.hoveredUrl
|
|
property string highlightLink: ""
|
|
|
|
signal imageClicked(var image, var mouse, string imageSource, string url)
|
|
signal openContextMenu(var item, string url, string domain)
|
|
signal setNeverAskAboutUnfurlingAgain(bool neverAskAgain)
|
|
|
|
function resetLocalAskAboutUnfurling() {
|
|
d.localAskAboutUnfurling = true
|
|
}
|
|
|
|
spacing: 12
|
|
|
|
//TODO: remove once GIF previews are unfurled sender side
|
|
|
|
QtObject {
|
|
id: d
|
|
property bool localAskAboutUnfurling: true
|
|
}
|
|
|
|
Loader {
|
|
visible: active
|
|
active: root.gifLinks && root.gifLinks.length > 0
|
|
&& !root.gifUnfurlingEnabled
|
|
&& d.localAskAboutUnfurling && root.canAskToUnfurlGifs
|
|
sourceComponent: enableLinkComponent
|
|
}
|
|
|
|
Repeater {
|
|
id: tempRepeater
|
|
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)
|
|
}
|
|
}
|
|
|
|
Repeater {
|
|
id: linksRepeater
|
|
|
|
property string hoveredUrl: ""
|
|
|
|
model: root.linkPreviewModel
|
|
delegate: LinkPreviewCardDelegate {
|
|
id: delegate
|
|
|
|
utilsStore: root.utilsStore
|
|
|
|
highlight: url === root.highlightLink
|
|
onHoveredChanged: {
|
|
linksRepeater.hoveredUrl = hovered ? url : ""
|
|
}
|
|
onClicked: (mouse) => {
|
|
if(mouse.button === Qt.RightButton) {
|
|
const domain = previewType === Constants.LinkPreviewType.Standard ? linkData.domain : Constants.externalStatusLink
|
|
root.openContextMenu(delegate, url, domain)
|
|
return
|
|
}
|
|
|
|
if(previewType === Constants.LinkPreviewType.Standard) {
|
|
Global.openLinkWithConfirmation(url, linkData.domain)
|
|
return
|
|
}
|
|
|
|
Global.activateDeepLink(url)
|
|
}
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: enableLinkComponent
|
|
|
|
Rectangle {
|
|
id: enableLinkRoot
|
|
implicitWidth: 300
|
|
implicitHeight: childrenRect.height + Theme.smallPadding
|
|
radius: 16
|
|
border.width: 1
|
|
border.color: Theme.palette.border
|
|
color: Theme.palette.background
|
|
|
|
StatusFlatRoundButton {
|
|
anchors.top: parent.top
|
|
anchors.topMargin: Theme.smallPadding
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Theme.smallPadding
|
|
icon.width: 20
|
|
icon.height: 20
|
|
icon.name: "close-circle"
|
|
onClicked: d.localAskAboutUnfurling = false
|
|
}
|
|
Image {
|
|
id: unfurlingImage
|
|
source: Theme.png("unfurling-image")
|
|
width: 132
|
|
height: 94
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.top: parent.top
|
|
anchors.topMargin: Theme.smallPadding
|
|
}
|
|
StatusBaseText {
|
|
id: enableText
|
|
text: qsTr("Enable automatic GIF unfurling")
|
|
horizontalAlignment: Text.AlignHCenter
|
|
width: parent.width
|
|
wrapMode: Text.WordWrap
|
|
anchors.top: unfurlingImage.bottom
|
|
anchors.topMargin: Theme.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: Theme.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+Theme.padding)
|
|
anchors.top: parent.top
|
|
anchors.topMargin: -Theme.padding
|
|
contentItem: Item {
|
|
StatusBaseText {
|
|
anchors.centerIn: parent
|
|
anchors.verticalCenterOffset: Theme.halfPadding
|
|
font: dontAskBtn.font
|
|
color: dontAskBtn.textColor
|
|
text: qsTr("Don't ask me again")
|
|
}
|
|
}
|
|
onClicked: root.setNeverAskAboutUnfurlingAgain(true)
|
|
Component.onCompleted: {
|
|
background.radius = Theme.padding
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|