You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
4.5 KiB
QML
177 lines
4.5 KiB
QML
/*
|
|
* SPDX-FileCopyrightText: 2020 George Florea Bănuș <georgefb899@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
import QtQuick 2.12
|
|
import QtQuick.Window 2.12
|
|
import FishUI 1.0 as FishUI
|
|
import mpv 1.0
|
|
|
|
MpvObject {
|
|
id: control
|
|
|
|
property int mouseX: mouseArea.mouseX
|
|
property int mouseY: mouseArea.mouseY
|
|
|
|
onReady: {
|
|
if (app.argument(0) !== "") {
|
|
rootWindow.openFile(app.argument(0), true)
|
|
}
|
|
}
|
|
|
|
onFileLoaded: {
|
|
// loadingIndicatorParent.visible = false
|
|
// header.audioTracks = getProperty("track-list").filter(track => track["type"] === "audio")
|
|
// header.subtitleTracks = getProperty("track-list").filter(track => track["type"] === "sub")
|
|
|
|
if (playList.playlistView.count <= 1) {
|
|
setProperty("loop-file", "inf")
|
|
}
|
|
|
|
setProperty("ab-loop-a", "no")
|
|
setProperty("ab-loop-b", "no")
|
|
|
|
mpv.pause = loadTimePosition() !== 0
|
|
position = loadTimePosition()
|
|
}
|
|
|
|
onEndFile: {
|
|
if (reason === "error") {
|
|
if (playlistModel.rowCount() === 0) {
|
|
return
|
|
}
|
|
|
|
// osd.message(i18n("Could not play: %1").arg(title))
|
|
}
|
|
const nextFileRow = playlistModel.getPlayingVideo() + 1
|
|
if (nextFileRow < playList.playlistView.count) {
|
|
const nextFile = playlistModel.getPath(nextFileRow)
|
|
playlistModel.setPlayingVideo(nextFileRow)
|
|
loadFile(nextFile)
|
|
} else {
|
|
// Last file in playlist
|
|
if (PlaylistSettings.repeat) {
|
|
playlistModel.setPlayingVideo(0)
|
|
loadFile(playlistModel.getPath(0))
|
|
}
|
|
}
|
|
}
|
|
|
|
onPauseChanged: {
|
|
if (pause) {
|
|
lockManager.setInhibitionOff()
|
|
} else {
|
|
lockManager.setInhibitionOn()
|
|
}
|
|
}
|
|
|
|
Timer {
|
|
id: hideCursorTimer
|
|
|
|
property double tx: mouseArea.mouseX
|
|
property double ty: mouseArea.mouseY
|
|
property int timeNotMoved: 0
|
|
|
|
running: rootWindow.isFullScreen() && mouseArea.containsMouse
|
|
repeat: true
|
|
interval: 50
|
|
|
|
onTriggered: {
|
|
if (mouseArea.mouseX === tx && mouseArea.mouseY === ty) {
|
|
if (timeNotMoved > 2000) {
|
|
app.hideCursor()
|
|
}
|
|
} else {
|
|
app.showCursor()
|
|
timeNotMoved = 0
|
|
}
|
|
tx = mouseArea.mouseX
|
|
ty = mouseArea.mouseY
|
|
timeNotMoved += interval
|
|
}
|
|
}
|
|
|
|
Connections {
|
|
target: mediaPlayer2Player
|
|
|
|
function onPlaypause() {
|
|
actions.playPauseAction.trigger()
|
|
}
|
|
|
|
function onPlay() {
|
|
control.pause = false
|
|
}
|
|
|
|
function onPause() {
|
|
control.pause = true
|
|
}
|
|
|
|
function onStop() {
|
|
control.position = 0
|
|
control.pause = true
|
|
}
|
|
|
|
function onNext() {
|
|
actions.playNextAction.trigger()
|
|
}
|
|
|
|
function onPrevious() {
|
|
actions.playPreviousAction.trigger()
|
|
}
|
|
|
|
function onSeek() {
|
|
control.command(["add", "time-pos", offset])
|
|
}
|
|
|
|
function onOpenUri() {
|
|
control.command(["add", "time-pos", offset])
|
|
}
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
mediaPlayer2Player.mpv = control
|
|
}
|
|
|
|
MouseArea {
|
|
id: mouseArea
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
|
|
|
onDoubleClicked: {
|
|
if (mouse.button == Qt.LeftButton)
|
|
rootWindow.toggleFullScreen()
|
|
}
|
|
|
|
onClicked: {
|
|
if (mouse.button == Qt.RightButton)
|
|
actions.playPauseAction.triggered()
|
|
}
|
|
|
|
onPressed: {
|
|
playList.state = "hidden"
|
|
}
|
|
}
|
|
|
|
DropArea {
|
|
id: dropArea
|
|
anchors.fill: parent
|
|
keys: ["text/uri-list"]
|
|
|
|
property var acceptedSubtitleTypes: ["application/x-subrip", "text/x-ssa"]
|
|
|
|
onDropped: {
|
|
if (acceptedSubtitleTypes.includes(app.mimeType(drop.urls[0]))) {
|
|
const subFile = drop.urls[0].replace("file://", "")
|
|
command(["sub-add", drop.urls[0], "select"])
|
|
}
|
|
|
|
if (app.mimeType(drop.urls[0]).startsWith("video/") || app.mimeType(drop.urls[0]).startsWith("audio/")) {
|
|
rootWindow.openFile(drop.urls[0], true)
|
|
}
|
|
}
|
|
}
|
|
}
|