Warning, /plasma-bigscreen/peertube-voice-application/ui/+mediacenter/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 // Sometimes can't be restarted reliably immediately, put it in a timer 0106 Timer { 0107 id: syncStatusTimer 0108 interval: 0 0109 onTriggered: { 0110 if (enabled && videoStatus == "play") { 0111 video.play(); 0112 } else if (videoStatus == "stop") { 0113 video.stop(); 0114 } else { 0115 video.pause(); 0116 } 0117 } 0118 } 0119 0120 Timer { 0121 id: delaytimer 0122 } 0123 0124 function delay(delayTime, cb) { 0125 delaytimer.interval = delayTime; 0126 delaytimer.repeat = false; 0127 delaytimer.triggered.connect(cb); 0128 delaytimer.start(); 0129 } 0130 0131 controlBar: Local.SeekControl { 0132 id: seekControl 0133 anchors { 0134 left: parent.left 0135 right: parent.right 0136 bottom: parent.bottom 0137 } 0138 title: videoTitle 0139 videoControl: video 0140 duration: video.duration 0141 playPosition: video.position 0142 onSeekPositionChanged: video.seek(seekPosition); 0143 z: 1000 0144 } 0145 0146 Item { 0147 id: videoRoot 0148 anchors.fill: parent 0149 0150 Rectangle { 0151 id: infomationBar 0152 anchors.left: parent.left 0153 anchors.right: parent.right 0154 anchors.top: parent.top 0155 visible: false 0156 color: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.6) 0157 implicitHeight: vidTitle.implicitHeight + Kirigami.Units.largeSpacing * 2 0158 z: 1001 0159 0160 onVisibleChanged: { 0161 delay(15000, function() { 0162 infomationBar.visible = false; 0163 }) 0164 } 0165 0166 Kirigami.Heading { 0167 id: vidTitle 0168 level: 2 0169 height: Kirigami.Units.gridUnit * 2 0170 visible: true 0171 anchors.verticalCenter: parent.verticalCenter 0172 text: "Title: " + 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 Controls.Popup { 0187 id: busyIndicatorPop 0188 x: (parent.width - width) / 2 0189 y: (parent.height - height) / 2 0190 0191 background: Rectangle { 0192 anchors.fill: parent 0193 color: Qt.rgba(0, 0, 0, 0.5) 0194 } 0195 closePolicy: Controls.Popup.CloseOnEscape | Controls.Popup.CloseOnPressOutsideParent 0196 0197 RowLayout { 0198 anchors.centerIn: parent 0199 0200 Controls.BusyIndicator { 0201 running: busyIndicate 0202 } 0203 0204 Kirigami.Heading { 0205 level: 2 0206 text: "Searching Video" 0207 } 0208 } 0209 0210 onOpened: { 0211 busyIndicate = true 0212 } 0213 0214 onClosed: { 0215 busyIndicate = false 0216 } 0217 } 0218 0219 Video { 0220 id: video 0221 anchors.fill: parent 0222 focus: true 0223 autoLoad: true 0224 autoPlay: false 0225 Keys.onSpacePressed: video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() 0226 KeyNavigation.up: closeButton 0227 source: videoSource 0228 readonly property string currentStatus: root.enabled ? root.videoStatus : "pause" 0229 0230 onCurrentStatusChanged: {print("OOO"+currentStatus) 0231 switch(currentStatus){ 0232 case "stop": 0233 video.stop(); 0234 break; 0235 case "pause": 0236 video.pause() 0237 break; 0238 case "play": 0239 video.play() 0240 busyIndicatorPop.close() 0241 delay(6000, function() { 0242 infomationBar.visible = false; 0243 }) 0244 break; 0245 } 0246 } 0247 0248 Keys.onReturnPressed: { 0249 video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() 0250 } 0251 0252 Keys.onDownPressed: { 0253 controlBarItem.opened = true 0254 controlBarItem.forceActiveFocus() 0255 } 0256 0257 MouseArea { 0258 anchors.fill: parent 0259 onClicked: { 0260 controlBarItem.opened = !controlBarItem.opened 0261 } 0262 } 0263 0264 onStatusChanged: { 0265 console.log(status) 0266 if(status == 7) { 0267 changePage() 0268 } 0269 } 0270 } 0271 } 0272 }