Friendiqa/src/qml/newsqml/NewsVideoLarge.qml
2024-05-01 21:23:16 +02:00

141 lines
4.5 KiB
QML

// This file is part of Friendiqa
// https://git.friendi.ca/lubuwest/Friendiqa
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations including
// the two.
//
// You must obey the GNU General Public License in all respects for all
// of the code used other than OpenSSL. If you modify file(s) with this
// exception, you may extend this exception to your version of the
// file(s), but you are not obligated to do so. If you do not wish to do
// so, delete this exception statement from your version. If you delete
// this exception statement from all source files in the program, then
// also delete it here.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtMultimedia 6.3
import QtQuick 6.3
import QtQuick.Controls 6.3
import "qrc:/qml/genericqml"
Page{
id:newsvideofullscreen
width:root.width;
height:root.height-3*root.fontFactor*osSettings.bigFontSize
property alias source: video.source
property string mimetype:""
Rectangle{
anchors.fill: newsvideofullscreen
color: "black"
}
Text{
id:noticeText
text:""
color:"light grey"
width:parent.width/2
wrapMode: Text.Wrap
font.pointSize: osSettings.bigFontSize
x:parent.width/2-parent.height/4
y:parent.height/5
visible: video.playbackState!=MediaPlayer.PlayingState
}
MediaPlayer {
id: video
audioOutput: AudioOutput {}
videoOutput: videoOutput
Component.onCompleted: {play()}
onErrorChanged: {noticeText.text=errorString;Qt.openUrlExternally(source)}
}
VideoOutput {
id: videoOutput
anchors.fill: parent
MouseArea {
anchors.fill:parent;
onClicked:{
if(video.playbackState!=MediaPlayer.PlayingState){
video.play()} else{video.pause()
}
if(Math.round(video.position/video.duration*1000) == 1000){
video.position=0;video.play()
}
}
}
Rectangle{
color:"light grey"
visible: video.playbackState!=MediaPlayer.PlayingState || (Math.round(video.position/video.duration*1000) == 1000)
opacity: 0.5
anchors.centerIn: videoOutput
width: 5*root.fontFactor*osSettings.bigFontSize
height: 5*root.fontFactor*osSettings.bigFontSize
Image{
anchors.fill: parent
source: "qrc:/assets/icons/play.svg"
}
}
}
ProgressBar{
id: videoBuffer
width: parent.width-4*mm
x: 2*mm
height: mm
contentItem: Item {
Rectangle {
width: videoBuffer.visualPosition * parent.width
height: parent.height
color: "light blue"
}
}
anchors.bottom: parent.bottom
value: video.bufferProgress
}
Slider{
id: videoSlider
x: 2*mm
width: parent.width-4*mm
height: 2*mm
z: 2
anchors.bottom: parent.bottom
visible:video.playbackState!=MediaPlayer.StoppedState && video.seekable
value: video.position/video.duration
onMoved: video.position=value*video.duration
}
MButton {
id: closeButton
z:2
anchors.top: parent.top
anchors.topMargin: 1*mm
anchors.right: parent.right
anchors.rightMargin: 1*mm
opacity: 0.6
text: qsTr("Close")
display: AbstractButton.IconOnly
icon.name: "dialog-close"
icon.source: "qrc:/assets/icons/times-circle.svg"
onClicked: {if (rootstackView.depth>1){ rootstackView.pop()}
}
}
}