1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import os
import sys
from argparse import ArgumentParser, RawTextHelpFormatter
from pathlib import Path
from PySide6.QtCore import QDir, QFileInfo, QObject, QUrl, Slot
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine, QmlElement, QmlSingleton
from PySide6.QtMultimedia import QMediaFormat
_opt_verbose = False
QML_IMPORT_NAME = "io.qt.filenameprovider"
QML_IMPORT_MAJOR_VERSION = 1
@QmlElement
@QmlSingleton
class FileNameProvider(QObject):
def __init__(self, p=None):
super().__init__(p)
@Slot(str, result=str)
def getFileName(self, p):
return QFileInfo(p).fileName()
def nameFilters():
"""Create a tuple of name filters/preferred index for populating the
open file dialog."""
result = []
preferredFilter = ""
formats = QMediaFormat().supportedFileFormats(QMediaFormat.Decode)
for m, format in enumerate(formats):
mediaFormat = QMediaFormat(format)
mimeType = mediaFormat.mimeType()
if mimeType.isValid():
filter = QMediaFormat.fileFormatDescription(format) + " ("
for i, suffix in enumerate(mimeType.suffixes()):
if i:
filter += ' '
filter += "*." + suffix
filter += ')'
result.append(filter)
if mimeType.name() == "video/mp4":
preferredFilter = filter
result.sort()
preferred = result.index(preferredFilter) if preferredFilter else 0
return (result, preferred)
if __name__ == "__main__":
argument_parser = ArgumentParser(description="Media Player",
formatter_class=RawTextHelpFormatter)
argument_parser.add_argument("-v", "--verbose", action="store_true",
help="Generate more output")
argument_parser.add_argument("url", help="The URL to open", nargs='?',
type=str)
options = argument_parser.parse_args()
_opt_verbose = options.verbose
if _opt_verbose:
os.environ["QML_IMPORT_TRACE"] = "1"
source = QUrl.fromUserInput(options.url, QDir.currentPath()) if options.url else QUrl()
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
app_dir = Path(__file__).parent
app_dir_url = QUrl.fromLocalFile(os.fspath(app_dir))
engine.addImportPath(os.fspath(app_dir))
nameFilterList, selectedNameFilter = nameFilters()
engine.setInitialProperties({
"source": source,
"nameFilters": nameFilterList,
"selectedNameFilter": selectedNameFilter})
engine.loadFromModule("MediaPlayer", "Main")
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec())
|