Warning, /plasma-bigscreen/peertube-voice-application/ui/+mediacenter/delegates/VideoCard.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick 2.9
0002 import QtQuick.Layouts 1.4
0003 import QtGraphicalEffects 1.0
0004 import QtQuick.Controls 2.3
0005 import org.kde.kirigami 2.8 as Kirigami
0006 import org.kde.plasma.core 2.0 as PlasmaCore
0007 import org.kde.plasma.components 3.0 as PlasmaComponents3
0008 import org.kde.plasma.components 2.0 as PlasmaComponents
0009 import Mycroft 1.0 as Mycroft
0010 import org.kde.mycroft.bigscreen 1.0 as BigScreen
0011 
0012 BigScreen.AbstractDelegate {
0013     id: delegate
0014     
0015     implicitWidth: listView.cellWidth
0016     height: parent.height
0017 
0018     contentItem: ColumnLayout {
0019         spacing: Kirigami.Units.smallSpacing
0020 
0021         Item {
0022             id: imgRoot
0023             //clip: true
0024             Layout.alignment: Qt.AlignTop
0025             Layout.fillWidth: true
0026             Layout.topMargin: -delegate.topPadding + delegate.topInset + extraBorder
0027             Layout.leftMargin: -delegate.leftPadding + delegate.leftInset + extraBorder
0028             Layout.rightMargin: -delegate.rightPadding + delegate.rightInset + extraBorder
0029             // Any width times 0.5625 is a 16:9 ratio
0030             // Adding baseRadius is needed to prevent the bottom from being rounded
0031             Layout.preferredHeight: width * 0.5625 + delegate.baseRadius
0032             // FIXME: another thing copied from AbstractDelegate
0033             property real extraBorder: 0
0034 
0035             layer.enabled: true
0036             layer.effect: OpacityMask {
0037                 cached: true
0038                 maskSource: Rectangle {
0039                     x: imgRoot.x;
0040                     y: imgRoot.y
0041                     width: imgRoot.width
0042                     height: imgRoot.height
0043                     radius: delegate.baseRadius
0044                 }
0045             }
0046 
0047             Image {
0048                 id: img
0049                 source: "https://" + modelData.channel.host + modelData.thumbnail_path
0050                 anchors {
0051                     fill: parent
0052                     // To not round under
0053                     bottomMargin: delegate.baseRadius
0054                 }
0055                 opacity: 1
0056                 fillMode: Image.PreserveAspectCrop
0057 
0058                 Rectangle {
0059                     id: videoDurationTime
0060                     anchors.bottom: parent.bottom
0061                     anchors.bottomMargin: Kirigami.Units.largeSpacing
0062                     anchors.right: parent.right
0063                     anchors.rightMargin: Kirigami.Units.largeSpacing
0064                     // FIXME: kind of hacky to get the padding around the text right
0065                     width: durationText.width + Kirigami.Units.largeSpacing
0066                     height: Kirigami.Units.gridUnit
0067                     radius: delegate.baseRadius
0068                     visible: modelData.duration ? 1 : 0
0069                     color: Qt.rgba(0, 0, 0, 0.8)
0070 
0071                     PlasmaComponents.Label {
0072                         id: durationText
0073                         anchors.centerIn: parent
0074                         text: timeSanitize(modelData.duration)
0075                         color: Kirigami.Theme.textColor
0076                     }
0077                 }
0078             }
0079             
0080             states: [
0081                 State {
0082                     when: delegate.isCurrent
0083                     PropertyChanges {
0084                         target: imgRoot
0085                         extraBorder: delegate.borderSize
0086                     }
0087                 },
0088                 State {
0089                     when: !delegate.isCurrent
0090                     PropertyChanges {
0091                         target: imgRoot
0092                         extraBorder: 0
0093                     }
0094                 }
0095             ]
0096             transitions: Transition {
0097                 onRunningChanged: {
0098                     // Optimize when animating the thumbnail
0099                     img.smooth = !running
0100                 }
0101                 NumberAnimation {
0102                     property: "extraBorder"
0103                     duration: Kirigami.Units.longDuration
0104                     easing.type: Easing.InOutQuad
0105                 }
0106             }
0107         }
0108 
0109         ColumnLayout {
0110             Layout.fillWidth: true
0111             Layout.fillHeight: true
0112             // Compensate for blank space created from not rounding thumbnail bottom corners
0113             Layout.topMargin: -delegate.baseRadius
0114             Layout.alignment: Qt.AlignLeft | Qt.AlignTop
0115             spacing: Kirigami.Units.smallSpacing
0116 
0117             Kirigami.Heading {
0118                 id: videoLabel
0119                 Layout.fillWidth: true
0120                 Layout.alignment: Qt.AlignLeft | Qt.AlignTop
0121                 wrapMode: Text.Wrap
0122                 level: 3
0123                 maximumLineCount: 1
0124                 elide: Text.ElideRight
0125                 color: PlasmaCore.ColorScope.textColor
0126                 Component.onCompleted: {
0127                     text = modelData.name
0128                 }
0129             }
0130 
0131             PlasmaComponents.Label {
0132                 id: videoChannelName
0133                 Layout.fillWidth: true
0134                 wrapMode: Text.WordWrap
0135                 Layout.alignment: Qt.AlignLeft | Qt.AlignTop
0136                 maximumLineCount: 1
0137                 elide: Text.ElideRight
0138                 color: PlasmaCore.ColorScope.textColor
0139                 text: modelData.channel.display_name
0140             }
0141 
0142             RowLayout {
0143                 Layout.fillWidth: true
0144 
0145                 PlasmaComponents.Label {
0146                     id: videoViews
0147                     Layout.alignment: Qt.AlignLeft
0148                     Layout.rightMargin: Kirigami.Units.largeSpacing
0149                     elide: Text.ElideRight
0150                     color: PlasmaCore.ColorScope.textColor
0151                     text: modelData.views
0152                 }
0153 
0154                 PlasmaComponents.Label {
0155                     id: videoUploadDate
0156                     Layout.fillWidth: true
0157                     Layout.alignment: Qt.AlignRight | Qt.AlignTop
0158                     horizontalAlignment: Text.AlignRight
0159                     elide: Text.ElideRight
0160                     color: PlasmaCore.ColorScope.textColor
0161                     text: setPublishedDate(modelData.published_at)
0162                 }
0163             }
0164         }
0165     }
0166 
0167     onClicked: {
0168         busyIndicatorPop.open()
0169         triggerGuiEvent("PeerTube.WatchVideo", modelData)
0170     }
0171 }