summaryrefslogtreecommitdiff
path: root/tidal_dl_ng/dialog.py
diff options
context:
space:
mode:
authorRobert Honz <exislow+github@gmail.com>2024-03-29 10:54:04 +0100
committerRobert Honz <exislow+github@gmail.com>2024-03-29 11:17:30 +0100
commit77ef9ef75ecd96efe888fcf1499e761f48aea330 (patch)
tree9ed9eb2faba5a1457154a484203da1681f18929b /tidal_dl_ng/dialog.py
parent58d97afbc274b588b1503df71f20a36a58401ef7 (diff)
downloadtidal-dl-ng-77ef9ef75ecd96efe888fcf1499e761f48aea330.tar.gz
✨ Can explicitly set `ffmpeg` path.
Diffstat (limited to 'tidal_dl_ng/dialog.py')
-rw-r--r--tidal_dl_ng/dialog.py49
1 files changed, 21 insertions, 28 deletions
diff --git a/tidal_dl_ng/dialog.py b/tidal_dl_ng/dialog.py
index 8d48037..c8abdc8 100644
--- a/tidal_dl_ng/dialog.py
+++ b/tidal_dl_ng/dialog.py
@@ -9,7 +9,6 @@ from tidalapi import Quality as QualityAudio
from tidal_dl_ng import __version__
from tidal_dl_ng.config import Settings
from tidal_dl_ng.constants import CoverDimensions, QualityVideo, SkipExisting
-from tidal_dl_ng.helper.path import is_installed_ffmpeg
from tidal_dl_ng.model.cfg import HelpSettings
from tidal_dl_ng.model.cfg import Settings as ModelSettings
from tidal_dl_ng.model.meta import ReleaseLatest
@@ -132,26 +131,9 @@ class DialogPreferences(QtWidgets.QDialog):
self.ui.setupUi(self)
# Set data.
self.gui_populate()
- self._init_signals()
self.exec()
- def _init_signals(self):
- self.ui.cb_video_convert_mp4.stateChanged.connect(self.on_cb_video_convert_mp4)
-
- def on_cb_video_convert_mp4(self, change_status: int):
- # Check if ffmpeg is in PATH otherwise show error message.
- if self.ui.cb_video_convert_mp4.isChecked() and not is_installed_ffmpeg():
- self.ui.cb_video_convert_mp4.setChecked(False)
- self.ui.cb_video_convert_mp4.setCheckState(QtCore.Qt.CheckState.Unchecked)
- QtWidgets.QMessageBox.critical(
- self,
- "FFmpeg not found!",
- "Either FFmpeg is not installed on your computer or not set within "
- "your PATH variable. You cannot activate this option until FFmpeg "
- "is correctly installed and set to your environmental PATH variable.",
- )
-
def _init_line_edit(self):
self.parameters_line_edit = [
"download_base_path",
@@ -160,6 +142,7 @@ class DialogPreferences(QtWidgets.QDialog):
"format_mix",
"format_track",
"format_video",
+ "path_binary_ffmpeg",
]
def _init_comboboxes(self):
@@ -184,30 +167,36 @@ class DialogPreferences(QtWidgets.QDialog):
self.populate_combo()
self.populate_line_edit()
- def dialog_dir_open(self, obj_line_edit):
+ def dialog_chose_file(
+ self,
+ obj_line_edit: QtWidgets.QLineEdit,
+ file_mode: QtWidgets.QFileDialog | QtWidgets.QFileDialog.FileMode = QtWidgets.QFileDialog.Directory,
+ ):
# If a path is set, use it otherwise the users home directory.
settings_path: str = os.path.expanduser(obj_line_edit.text()) if obj_line_edit.text() else ""
- dir_current = settings_path if settings_path and os.path.exists(settings_path) else str(Path.home())
- dialog = QtWidgets.QFileDialog()
+ dir_current: str = settings_path if settings_path and os.path.exists(settings_path) else str(Path.home())
+ dialog: QtWidgets.QFileDialog = QtWidgets.QFileDialog()
# Set to directory mode only but show files.
- dialog.setFileMode(QtWidgets.QFileDialog.Directory)
+ dialog.setFileMode(file_mode)
dialog.setViewMode(QtWidgets.QFileDialog.Detail)
dialog.setOption(QtWidgets.QFileDialog.ShowDirsOnly, False)
+ dialog.setOption(QtWidgets.QFileDialog.DontResolveSymlinks, True)
+
# There is a bug in the PyQt implementation, which hides files in Directory mode.
# Thus, we need to use the PyQt dialog instead of the native dialog.
- if os.name == "nt":
+ if os.name == "nt" and file_mode == QtWidgets.QFileDialog.Directory:
dialog.setOption(QtWidgets.QFileDialog.DontUseNativeDialog, True)
+
dialog.setDirectory(dir_current)
# Execute dialog and set path is something is choosen.
if dialog.exec():
- dir_name = dialog.selectedFiles()[0]
- path = Path(dir_name)
+ dir_name: str = dialog.selectedFiles()[0]
+ path: Path = Path(dir_name)
obj_line_edit.setText(str(path))
def populate_line_edit(self):
-
for pn in self.parameters_line_edit:
label_icon: QtWidgets.QLabel = getattr(self.ui, self.prefix_label + self.prefix_icon + pn)
label: QtWidgets.QLabel = getattr(self.ui, self.prefix_label + pn)
@@ -219,10 +208,14 @@ class DialogPreferences(QtWidgets.QDialog):
line_edit.setText(getattr(self.data, pn))
# Base Path File Dialog
- self.ui.pb_download_base_path.clicked.connect(lambda x: self.dialog_dir_open(self.ui.le_download_base_path))
+ self.ui.pb_download_base_path.clicked.connect(lambda x: self.dialog_chose_file(self.ui.le_download_base_path))
+ self.ui.pb_path_binary_ffmpeg.clicked.connect(
+ lambda x: self.dialog_chose_file(
+ self.ui.le_path_binary_ffmpeg, file_mode=QtWidgets.QFileDialog.FileMode.ExistingFiles
+ )
+ )
def populate_combo(self):
-
for p in self.parameters_combo:
pn: str = p[0]
values: Enum = p[1]