Warning, /plasma-bigscreen/peertube-voice-application/ui/PeerTubePlayer.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_stream 0016 property var videoStatus: sessionData.video_status 0017 property var videoThumb: "https://" + sessionData.video_meta.channel.host + sessionData.video_meta.thumbnail_path 0018 property var videoTitle: sessionData.video_meta.name 0019 property var videoAuthor: sessionData.video_meta.channel.name 0020 property var videoViewCount: sessionData.video_meta.views 0021 property var videoPublishDate: sessionData.video_meta.published_at 0022 property bool busyIndicate: false 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: { 0037 syncStatusTimer.restart() 0038 } 0039 0040 function changePage(){ 0041 delay(3500, function() { 0042 parent.parent.parent.currentIndex++ 0043 parent.parent.parent.currentItem.contentItem.forceActiveFocus() 0044 }) 0045 } 0046 0047 onVideoThumbChanged: { 0048 if(videoThumb == ""){ 0049 busyIndicatorPop.open() 0050 } else { 0051 busyIndicatorPop.close() 0052 } 0053 } 0054 0055 Keys.onDownPressed: { 0056 controlBarItem.opened = true 0057 controlBarItem.forceActiveFocus() 0058 } 0059 0060 onFocusChanged: { 0061 if(focus){ 0062 video.forceActiveFocus(); 0063 } 0064 } 0065 0066 Connections { 0067 target: window 0068 onVisibleChanged: { 0069 if(video.playbackState == MediaPlayer.PlayingState) { 0070 videoStatus = "stop" 0071 video.stop() 0072 } 0073 } 0074 } 0075 0076 function getViewCount(value){ 0077 return value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') 0078 } 0079 0080 function setPublishedDate(publishDate) { 0081 var date1 = new Date(publishDate).getTime(); 0082 var date2 = new Date().getTime(); 0083 console.log(date1) 0084 console.log(date2) 0085 0086 var msec = date2 - date1; 0087 var mins = Math.floor(msec / 60000); 0088 var hrs = Math.floor(mins / 60); 0089 var days = Math.floor(hrs / 24); 0090 var yrs = Math.floor(days / 365); 0091 mins = mins % 60; 0092 hrs = hrs % 24; 0093 days = days % 365; 0094 var result = "" 0095 if(days == 0 && hrs > 0) { 0096 result = hrs + " hours, " + mins + " minutes ago" 0097 } else if (days == 0 && hrs == 0) { 0098 result = mins + " minutes ago" 0099 } else { 0100 result = days + " days, " + hrs + " hours, " + mins + " minutes ago" 0101 } 0102 return result 0103 } 0104 0105 function listProperty(item) { 0106 for (var p in item) 0107 { 0108 if( typeof item[p] != "function" ) 0109 if(p != "objectName") 0110 console.log(p + ":" + item[p]); 0111 } 0112 } 0113 0114 // Sometimes can't be restarted reliably immediately, put it in a timer 0115 Timer { 0116 id: syncStatusTimer 0117 interval: 0 0118 onTriggered: { 0119 if (enabled && videoStatus == "play") { 0120 video.play(); 0121 } else if (videoStatus == "stop") { 0122 video.stop(); 0123 } else { 0124 video.pause(); 0125 } 0126 } 0127 } 0128 0129 Timer { 0130 id: delaytimer 0131 } 0132 0133 function delay(delayTime, cb) { 0134 delaytimer.interval = delayTime; 0135 delaytimer.repeat = false; 0136 delaytimer.triggered.connect(cb); 0137 delaytimer.start(); 0138 } 0139 0140 controlBar: Local.SeekControl { 0141 id: seekControl 0142 anchors { 0143 left: parent.left 0144 right: parent.right 0145 bottom: parent.bottom 0146 } 0147 title: videoTitle 0148 videoControl: video 0149 duration: video.duration 0150 playPosition: video.position 0151 onSeekPositionChanged: video.seek(seekPosition); 0152 z: 1000 0153 } 0154 0155 Item { 0156 id: videoRoot 0157 anchors.fill: parent 0158 0159 Rectangle { 0160 id: infomationBar 0161 anchors.left: parent.left 0162 anchors.right: parent.right 0163 anchors.top: parent.top 0164 visible: false 0165 color: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.6) 0166 implicitHeight: vidTitle.implicitHeight + Kirigami.Units.largeSpacing * 2 0167 z: 1001 0168 0169 onVisibleChanged: { 0170 delay(15000, function() { 0171 infomationBar.visible = false; 0172 }) 0173 } 0174 0175 Kirigami.Heading { 0176 id: vidTitle 0177 level: 2 0178 height: Kirigami.Units.gridUnit * 2 0179 visible: true 0180 anchors.verticalCenter: parent.verticalCenter 0181 text: "Title: " + videoTitle 0182 z: 100 0183 } 0184 } 0185 0186 Image { 0187 id: thumbart 0188 anchors.fill: parent 0189 fillMode: Image.PreserveAspectFit 0190 source: root.videoThumb 0191 enabled: root.videoStatus == "stop" ? 1 : 0 0192 visible: root.videoStatus == "stop" ? 1 : 0 0193 } 0194 0195 Controls.Popup { 0196 id: busyIndicatorPop 0197 x: (parent.width - width) / 2 0198 y: (parent.height - height) / 2 0199 0200 background: Rectangle { 0201 anchors.fill: parent 0202 color: Qt.rgba(0, 0, 0, 0.5) 0203 } 0204 closePolicy: Controls.Popup.CloseOnEscape | Controls.Popup.CloseOnPressOutsideParent 0205 0206 RowLayout { 0207 anchors.centerIn: parent 0208 0209 Controls.BusyIndicator { 0210 running: busyIndicate 0211 } 0212 0213 Kirigami.Heading { 0214 level: 2 0215 text: "Searching Video" 0216 } 0217 } 0218 0219 onOpened: { 0220 busyIndicate = true 0221 } 0222 0223 onClosed: { 0224 busyIndicate = false 0225 } 0226 } 0227 0228 Video { 0229 id: video 0230 anchors.fill: parent 0231 focus: true 0232 autoLoad: true 0233 autoPlay: false 0234 Keys.onSpacePressed: video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() 0235 KeyNavigation.up: closeButton 0236 source: videoSource 0237 readonly property string currentStatus: root.enabled ? root.videoStatus : "pause" 0238 0239 onCurrentStatusChanged: {print("OOO"+currentStatus) 0240 switch(currentStatus){ 0241 case "stop": 0242 video.stop(); 0243 break; 0244 case "pause": 0245 video.pause() 0246 break; 0247 case "play": 0248 video.play() 0249 busyIndicatorPop.close() 0250 delay(6000, function() { 0251 infomationBar.visible = false; 0252 }) 0253 break; 0254 } 0255 } 0256 0257 Keys.onReturnPressed: { 0258 video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() 0259 } 0260 0261 Keys.onDownPressed: { 0262 controlBarItem.opened = true 0263 controlBarItem.forceActiveFocus() 0264 } 0265 0266 MouseArea { 0267 anchors.fill: parent 0268 onClicked: { 0269 controlBarItem.opened = !controlBarItem.opened 0270 } 0271 } 0272 0273 onStatusChanged: { 0274 console.log(status) 0275 if(status == 7) { 0276 changePage() 0277 } 0278 } 0279 } 0280 } 0281 }