Warning, /multimedia/plasmatube/src/ui/components/VideoListItem.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2019 Linus Jahn <lnj@kaidan.im>
0002 // SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0003 // SPDX-License-Identifier: GPL-3.0-or-later
0004
0005 import QtQuick
0006 import QtQuick.Layouts
0007 import QtQuick.Controls as QQC2
0008 import Qt5Compat.GraphicalEffects
0009
0010 import org.kde.kirigami as Kirigami
0011
0012 import "utils.js" as Utils
0013
0014 QQC2.ItemDelegate {
0015 id: root
0016
0017 property string vid
0018 property url thumbnail
0019 property bool liveNow
0020 property date length
0021 property string title
0022 property string author
0023 property string authorId
0024 property string description
0025 property int viewCount
0026 property string publishedText
0027 property bool watched
0028
0029 signal contextMenuRequested
0030
0031 hoverEnabled: !Kirigami.Settings.hasTransientTouchInput
0032 onPressAndHold: contextMenuRequested()
0033
0034 contentItem: RowLayout {
0035 id: gridLayout
0036 anchors.top: parent.top
0037 anchors.topMargin: root.topPadding
0038 anchors.left: parent.left
0039 anchors.leftMargin: root.leftPadding
0040 anchors.right: parent.right
0041 anchors.rightMargin: root.rightPadding
0042
0043 spacing: Kirigami.Units.largeSpacing
0044
0045 TapHandler {
0046 acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
0047 acceptedButtons: Qt.RightButton
0048 onTapped: root.contextMenuRequested()
0049 }
0050
0051 Image {
0052 id: thumb
0053 Layout.preferredWidth: root.width < 500 ? Kirigami.Units.gridUnit * 8 : Kirigami.Units.gridUnit * 12
0054 Layout.preferredHeight: root.width < 500 ? Kirigami.Units.gridUnit * 4.5 : Kirigami.Units.gridUnit * 6.75
0055 Layout.maximumWidth: root.width < 500 ? Kirigami.Units.gridUnit * 8 : Kirigami.Units.gridUnit * 12
0056 Layout.maximumHeight: root.width < 500 ? Kirigami.Units.gridUnit * 4.5 : Kirigami.Units.gridUnit * 6.75
0057 source: thumbnail
0058 fillMode: Image.PreserveAspectCrop
0059 layer.enabled: true
0060 layer.effect: OpacityMask {
0061 maskSource: mask
0062 }
0063 Rectangle {
0064 id: mask
0065 radius: 7
0066 anchors.fill: thumb
0067 visible: false
0068 }
0069 PlaceholderItem {
0070 anchors.fill: parent
0071 visible: thumb.status !== Image.Ready
0072 }
0073 Text {
0074 visible: !liveNow && text !== "00:00"
0075 text: Utils.formatTime(length)
0076 color: "white"
0077
0078 anchors.right: parent.right
0079 anchors.bottom: parent.bottom
0080 anchors.rightMargin: 7
0081 anchors.bottomMargin: 3
0082
0083 z: 2
0084
0085 Rectangle {
0086 anchors.fill: parent
0087 anchors.leftMargin: -2
0088 anchors.rightMargin: -2
0089 z: -1
0090 color: "#90000000"
0091 radius: 2
0092 width: 60
0093 height: 15
0094 }
0095 }
0096
0097 Rectangle {
0098 id: watchIndicator
0099
0100 color: "black"
0101 opacity: 0.5
0102 visible: root.watched
0103 anchors.fill: parent
0104
0105 Rectangle {
0106 anchors {
0107 bottom: parent.bottom
0108 left: parent.left
0109 right: parent.right
0110 }
0111
0112 color: "red"
0113 height: 3
0114 }
0115 }
0116 }
0117
0118 ColumnLayout {
0119 id: videoInfo
0120 Layout.alignment: Qt.AlignTop
0121 // Layout.preferredHeight: thumb.height
0122 spacing: Kirigami.Units.smallSpacing
0123
0124 Kirigami.Heading {
0125 Layout.alignment: Qt.AlignTop
0126 Layout.fillWidth: true
0127
0128 text: title
0129 level: 4
0130 maximumLineCount: 2
0131 wrapMode: Text.Wrap
0132 elide: Text.ElideRight
0133 }
0134
0135 QQC2.Label {
0136 font.pointSize: Kirigami.Theme.smallFont.pointSize
0137 text: author
0138 color: Kirigami.Theme.disabledTextColor
0139 maximumLineCount: 2
0140 elide: Text.ElideRight
0141 }
0142
0143 Row {
0144 spacing: 0
0145
0146 QQC2.Label {
0147 font.pointSize: Kirigami.Theme.smallFont.pointSize
0148 text: i18n("%1 views", Utils.formatCount(viewCount))
0149 color: Kirigami.Theme.disabledTextColor
0150 maximumLineCount: 1
0151 elide: Text.ElideRight
0152 }
0153
0154 QQC2.Label {
0155 font.pointSize: Kirigami.Theme.smallFont.pointSize
0156 text: i18n(" \u2022 %1", liveNow ? "<i>live now</i>" : publishedText)
0157 color: Kirigami.Theme.disabledTextColor
0158 maximumLineCount: 1
0159 elide: Text.ElideRight
0160 visible: publishedText.length !== 0
0161 }
0162 }
0163 }
0164 }
0165 }