Warning, /plasma-bigscreen/youtube-voice-application/ui/+mediacenter/YoutubePlayerBB.qml is written in an unsupported language. File is not indexed.
0001 import QtAV 1.7 0002 import QtQuick.Layouts 1.4 0003 import QtQuick 2.9 0004 import QtQuick.Controls 2.0 as Controls 0005 import org.kde.kirigami 2.8 as Kirigami 0006 import QtGraphicalEffects 1.0 0007 0008 import Mycroft 1.0 as Mycroft 0009 0010 import "." as Local 0011 0012 Mycroft.Delegate { 0013 id: root 0014 0015 property var videoSource: sessionData.video 0016 property var videoStatus: sessionData.status 0017 property var videoThumb: sessionData.videoThumb 0018 property var videoTitle: sessionData.currenttitle 0019 property var videoAuthor: sessionData.videoAuthor 0020 property var videoViewCount: sessionData.viewCount 0021 property var videoPublishDate: sessionData.publishedDate 0022 property var videoListModel: sessionData.videoListBlob.videoList 0023 0024 //The player is always fullscreen 0025 fillWidth: true 0026 background: Rectangle { 0027 color: "black" 0028 } 0029 leftPadding: 0 0030 topPadding: 0 0031 rightPadding: 0 0032 bottomPadding: 0 0033 0034 onEnabledChanged: syncStatusTimer.restart() 0035 onVideoSourceChanged: syncStatusTimer.restart() 0036 Component.onCompleted: syncStatusTimer.restart() 0037 0038 Keys.onShiftPressed: { 0039 console.log(parent.currentIndex) 0040 } 0041 0042 function getViewCount(value){ 0043 return value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') 0044 } 0045 0046 function setPublishedDate(publishDate){ 0047 if(publishDate){ 0048 var date1 = new Date(publishDate).getTime(); 0049 var date2 = new Date().getTime(); 0050 console.log(date1) 0051 console.log(date2) 0052 0053 var msec = date2 - date1; 0054 var mins = Math.floor(msec / 60000); 0055 var hrs = Math.floor(mins / 60); 0056 var days = Math.floor(hrs / 24); 0057 var yrs = Math.floor(days / 365); 0058 mins = mins % 60; 0059 hrs = hrs % 24; 0060 days = days % 365; 0061 var result = "Published: " + days + " days, " + hrs + " hours, " + mins + " minutes ago" 0062 return result 0063 } else { 0064 return "" 0065 } 0066 } 0067 0068 // Sometimes can't be restarted reliably immediately, put it in a timer 0069 Timer { 0070 id: syncStatusTimer 0071 interval: 0 0072 onTriggered: { 0073 if (enabled && videoStatus == "play") { 0074 video.play(); 0075 } else if (videoStatus == "stop") { 0076 video.stop(); 0077 } else { 0078 video.pause(); 0079 } 0080 } 0081 } 0082 0083 Timer { 0084 id: delaytimer 0085 } 0086 0087 function delay(delayTime, cb) { 0088 delaytimer.interval = delayTime; 0089 delaytimer.repeat = false; 0090 delaytimer.triggered.connect(cb); 0091 delaytimer.start(); 0092 } 0093 0094 controlBar: Local.SeekControl { 0095 id: seekControl 0096 anchors { 0097 left: parent.left 0098 right: parent.right 0099 bottom: parent.bottom 0100 } 0101 title: videoTitle 0102 videoControl: video 0103 duration: video.duration 0104 playPosition: video.position 0105 onSeekPositionChanged: video.seek(seekPosition); 0106 z: 1000 0107 } 0108 0109 Item { 0110 id: videoRoot 0111 anchors.fill: parent 0112 focus: true 0113 0114 Rectangle { 0115 id: infomationBar 0116 anchors.left: parent.left 0117 anchors.right: parent.right 0118 anchors.top: parent.top 0119 color: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.6) 0120 implicitHeight: infoLayout.implicitHeight + Kirigami.Units.largeSpacing * 2 0121 z: 1001 0122 0123 onVisibleChanged: { 0124 delay(15000, function() { 0125 infomationBar.visible = false; 0126 }) 0127 } 0128 0129 RowLayout { 0130 id: infoLayout 0131 anchors.fill: parent 0132 0133 ColumnLayout { 0134 Layout.fillWidth: true 0135 Layout.fillHeight: true 0136 Layout.alignment: Qt.AlignLeft 0137 Layout.leftMargin: Kirigami.Units.largeSpacing 0138 0139 Kirigami.Heading { 0140 id: vidTitle 0141 level: 2 0142 height: Kirigami.Units.gridUnit * 2 0143 visible: true 0144 text: "Title: " + videoTitle 0145 z: 100 0146 } 0147 0148 Kirigami.Heading { 0149 id: vidAuthor 0150 level: 2 0151 height: Kirigami.Units.gridUnit * 2 0152 visible: true 0153 text: "Published By: " + videoAuthor 0154 z: 100 0155 } 0156 } 0157 0158 ColumnLayout { 0159 Layout.fillWidth: true 0160 Layout.fillHeight: true 0161 Layout.alignment: Qt.AlignRight 0162 Layout.rightMargin: Kirigami.Units.largeSpacing 0163 0164 Kirigami.Heading { 0165 id: vidCount 0166 level: 2 0167 height: Kirigami.Units.gridUnit * 2 0168 visible: true 0169 text: "Views: " + getViewCount(videoViewCount) 0170 z: 100 0171 } 0172 0173 Kirigami.Heading { 0174 id: vidPublishDate 0175 level: 2 0176 height: Kirigami.Units.gridUnit * 2 0177 visible: true 0178 text: setPublishedDate(videoPublishDate) 0179 z: 100 0180 } 0181 } 0182 } 0183 } 0184 0185 SuggestionArea { 0186 id: suggestArea 0187 videoSuggestionList: sessionData.videoListBlob.videoList 0188 z: 2000 0189 visible: false 0190 } 0191 0192 Image { 0193 id: thumbart 0194 anchors.fill: parent 0195 fillMode: Image.PreserveAspectFit 0196 source: root.videoThumb 0197 enabled: root.videoStatus == "stop" ? 1 : 0 0198 visible: root.videoStatus == "stop" ? 1 : 0 0199 } 0200 0201 VideoOutput2 { 0202 opengl: true 0203 fillMode: VideoOutput.PreserveAspectFit 0204 source: video 0205 anchors.fill: parent 0206 } 0207 0208 AVPlayer { 0209 id: video 0210 autoLoad: true 0211 autoPlay: false 0212 source: videoSource 0213 videoCodecPriority: ["FFmpeg", "VAAPI"] 0214 0215 readonly property string currentStatus: root.enabled ? root.videoStatus : "pause" 0216 0217 onCurrentStatusChanged: {print("OOO"+currentStatus) 0218 switch(currentStatus){ 0219 case "stop": 0220 video.stop(); 0221 break; 0222 case "pause": 0223 video.pause() 0224 break; 0225 case "play": 0226 video.play() 0227 delay(15000, function() { 0228 infomationBar.visible = false; 0229 }) 0230 break; 0231 } 0232 } 0233 } 0234 0235 KeyNavigation.up: closeButton 0236 Keys.onSpacePressed: { 0237 video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() 0238 infomationBar.visible = true 0239 } 0240 Keys.onDownPressed: { 0241 controlBarItem.opened = true 0242 controlBarItem.forceActiveFocus() 0243 } 0244 0245 MouseArea { 0246 anchors.fill: parent 0247 onClicked: { 0248 infomationBar.visible = true; 0249 controlBarItem.opened = !controlBarItem.opened 0250 } 0251 } 0252 } 0253 }