Warning, /plasma-bigscreen/youtube-voice-application/ui/+android/YoutubePlayer.qml is written in an unsupported language. File is not indexed.
0001 import QtMultimedia 5.12 0002 import QtQuick.Layouts 1.4 0003 import QtQuick 2.9 0004 import QtQuick.Controls 2.12 as Controls 0005 import org.kde.kirigami 2.10 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.setTitle 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 property var nextSongBlob: sessionData.nextSongBlob 0024 0025 //The player is always fullscreen 0026 fillWidth: true 0027 background: Rectangle { 0028 color: "black" 0029 } 0030 leftPadding: 0 0031 topPadding: 0 0032 rightPadding: 0 0033 bottomPadding: 0 0034 0035 onEnabledChanged: syncStatusTimer.restart() 0036 onVideoSourceChanged: syncStatusTimer.restart() 0037 Component.onCompleted: { 0038 syncStatusTimer.restart() 0039 } 0040 0041 Keys.onDownPressed: { 0042 controlBarItem.opened = true 0043 controlBarItem.forceActiveFocus() 0044 } 0045 0046 onVideoTitleChanged: { 0047 triggerGuiEvent("YoutubeSkill.RefreshWatchList", {"title": videoTitle}) 0048 if(videoTitle != ""){ 0049 infomationBar.visible = true 0050 } 0051 } 0052 0053 onFocusChanged: { 0054 console.log("here") 0055 if(focus && suggestions.visible){ 0056 console.log("in suggestFocus 1") 0057 suggestions.forceActiveFocus(); 0058 } else if(focus && !suggestions.visbile) { 0059 video.forceActiveFocus(); 0060 } 0061 } 0062 0063 Connections { 0064 target: window 0065 onVisibleChanged: { 0066 if(video.playbackState == MediaPlayer.PlayingState) { 0067 video.stop() 0068 } 0069 } 0070 } 0071 0072 function getViewCount(value){ 0073 return value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') 0074 } 0075 0076 function setPublishedDate(publishDate){ 0077 var date1 = new Date(publishDate).getTime(); 0078 var date2 = new Date().getTime(); 0079 console.log(date1) 0080 console.log(date2) 0081 0082 var msec = date2 - date1; 0083 var mins = Math.floor(msec / 60000); 0084 var hrs = Math.floor(mins / 60); 0085 var days = Math.floor(hrs / 24); 0086 var yrs = Math.floor(days / 365); 0087 mins = mins % 60; 0088 hrs = hrs % 24; 0089 days = days % 365; 0090 var result = "Published: " + days + " days, " + hrs + " hours, " + mins + " minutes ago" 0091 return result 0092 } 0093 0094 function listProperty(item){ 0095 for (var p in item) 0096 { 0097 if( typeof item[p] != "function" ) 0098 if(p != "objectName") 0099 console.log(p + ":" + item[p]); 0100 } 0101 } 0102 0103 // Sometimes can't be restarted reliably immediately, put it in a timer 0104 Timer { 0105 id: syncStatusTimer 0106 interval: 0 0107 onTriggered: { 0108 if (enabled && videoStatus == "play") { 0109 video.play(); 0110 } else if (videoStatus == "stop") { 0111 video.stop(); 0112 } else { 0113 video.pause(); 0114 } 0115 } 0116 } 0117 0118 Timer { 0119 id: delaytimer 0120 } 0121 0122 function delay(delayTime, cb) { 0123 delaytimer.interval = delayTime; 0124 delaytimer.repeat = false; 0125 delaytimer.triggered.connect(cb); 0126 delaytimer.start(); 0127 } 0128 0129 controlBar: Local.SeekControl { 0130 id: seekControl 0131 anchors { 0132 // left: parent.left 0133 // right: parent.right 0134 bottom: parent.bottom 0135 } 0136 title: videoTitle 0137 videoControl: video 0138 duration: video.duration 0139 playPosition: video.position 0140 onSeekPositionChanged: video.seek(seekPosition); 0141 z: 1000 0142 } 0143 0144 Item { 0145 id: videoRoot 0146 anchors.fill: parent 0147 0148 Rectangle { 0149 id: infomationBar 0150 anchors.left: parent.left 0151 anchors.right: parent.right 0152 anchors.top: parent.top 0153 visible: false 0154 color: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.6) 0155 implicitHeight: vidTitle.implicitHeight + Kirigami.Units.largeSpacing * 2 0156 z: 1001 0157 0158 onVisibleChanged: { 0159 delay(15000, function() { 0160 infomationBar.visible = false; 0161 }) 0162 } 0163 0164 Controls.Label { 0165 id: vidTitle 0166 visible: true 0167 maximumLineCount: 2 0168 wrapMode: Text.Wrap 0169 anchors.left: parent.left 0170 anchors.leftMargin: Kirigami.Units.largeSpacing 0171 anchors.verticalCenter: parent.verticalCenter 0172 text: videoTitle 0173 z: 100 0174 } 0175 } 0176 0177 Image { 0178 id: thumbart 0179 anchors.fill: parent 0180 fillMode: Image.PreserveAspectFit 0181 source: root.videoThumb 0182 enabled: root.videoStatus == "stop" ? 1 : 0 0183 visible: root.videoStatus == "stop" ? 1 : 0 0184 } 0185 0186 SuggestionArea { 0187 id: suggestions 0188 visible: false 0189 videoSuggestionList: videoListModel 0190 nxtSongBlob: nextSongBlob 0191 onVisibleChanged: { 0192 if(visible) { 0193 suggestionListFocus = true 0194 } else { 0195 video.focus = true 0196 } 0197 } 0198 } 0199 0200 Video { 0201 id: video 0202 anchors.fill: parent 0203 focus: true 0204 autoLoad: true 0205 autoPlay: false 0206 Keys.onSpacePressed: video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() 0207 KeyNavigation.up: closeButton 0208 //Keys.onLeftPressed: video.seek(video.position - 5000) 0209 //Keys.onRightPressed: video.seek(video.position + 5000) 0210 source: videoSource 0211 readonly property string currentStatus: root.enabled ? root.videoStatus : "pause" 0212 0213 onFocusChanged: { 0214 if(focus){ 0215 console.log("focus in video") 0216 if(suggestions.visbile){ 0217 console.log("in suggestFocus 2") 0218 suggestions.forceActiveFocus(); 0219 } 0220 } 0221 } 0222 0223 onCurrentStatusChanged: {print("OOO"+currentStatus) 0224 switch(currentStatus){ 0225 case "stop": 0226 video.stop(); 0227 break; 0228 case "pause": 0229 video.pause() 0230 break; 0231 case "play": 0232 video.play() 0233 delay(6000, function() { 0234 infomationBar.visible = false; 0235 }) 0236 break; 0237 } 0238 } 0239 0240 Keys.onReturnPressed: { 0241 video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() 0242 } 0243 0244 Keys.onDownPressed: { 0245 controlBarItem.opened = true 0246 controlBarItem.forceActiveFocus() 0247 } 0248 0249 MouseArea { 0250 anchors.fill: parent 0251 onClicked: { 0252 controlBarItem.opened = !controlBarItem.opened 0253 } 0254 } 0255 0256 onStatusChanged: { 0257 if(status == MediaPlayer.EndOfMedia) { 0258 triggerGuiEvent("YoutubeSkill.NextAutoPlaySong", {}) 0259 suggestions.visible = true 0260 } else { 0261 suggestions.visible = false 0262 } 0263 } 0264 } 0265 } 0266 }