22from modules .audio_converter import AudioConverter
33from modules .config import config , application_path
44from pathlib import Path
5+ import subprocess
56
67
78class ConverterPromptWidget (QtWidgets .QWidget ):
@@ -16,11 +17,13 @@ def __init__(self):
1617 self .selected_items = []
1718
1819 self .out_settings_groupbox = QtWidgets .QGroupBox ("Output Settings" )
20+ self .in_files_groupbox = QtWidgets .QGroupBox ("Input Files/Folders (double click to open)" )
1921
20- self .files_list = QtWidgets .QLabel ( "No File(s) or Directory Selected" )
22+ self .__file_list = QtWidgets .QListWidget ( )
2123 self .convert_button = QtWidgets .QPushButton ("Convert File(s)" )
2224 self .file_button = QtWidgets .QPushButton ("Select File(s)" )
2325 self .dir_button = QtWidgets .QPushButton ("Select Directory" )
26+ self .remove_converted_files_checkbox = QtWidgets .QCheckBox ("Remove Converted Files" )
2427 self .mirror_checkbox = QtWidgets .QCheckBox ("Mirror Folder Structure" )
2528 self .dironly_checkbox = QtWidgets .QCheckBox (
2629 "Only allow directory selection" )
@@ -33,6 +36,9 @@ def __init__(self):
3336 self .dironly_checkbox .setChecked (True )
3437 self .metadata_naming_checkbox .setChecked (
3538 config ['RecreateFileNameFromMetadata' ])
39+ self .remove_converted_files_checkbox .setChecked (
40+ config ['RemoveConvertedFiles' ])
41+ self .remove_converted_files_checkbox .setDisabled (True )
3642
3743 for i in self .audio_converter .allowed_formats :
3844 self .allowed_formats_dropdown .addItem (i )
@@ -43,9 +49,14 @@ def __init__(self):
4349 self .allowed_quality_dropdown .setCurrentText (config ['ExportQuality' ])
4450
4551 self .layout = QtWidgets .QVBoxLayout (self )
46- self .layout .addWidget (self .files_list )
52+ self .in_files_groupbox_layout = QtWidgets .QVBoxLayout ()
53+ #self.in_files_groupbox_layout.addStretch(1)
54+ self .in_files_groupbox_layout .addWidget (self .__file_list )
55+ self .in_files_groupbox .setLayout (self .in_files_groupbox_layout )
56+ self .layout .addWidget (self .in_files_groupbox )
4757 out_settings_groupbox_layout = QtWidgets .QVBoxLayout ()
4858 out_settings_groupbox_layout .addWidget (self .metadata_naming_checkbox )
59+ out_settings_groupbox_layout .addWidget (self .remove_converted_files_checkbox )
4960 out_settings_groupbox_layout .addWidget (self .dironly_checkbox )
5061 out_settings_groupbox_layout .addWidget (self .mirror_checkbox )
5162 out_settings_groupbox_layout .addWidget (QtWidgets .QLabel (
@@ -54,9 +65,9 @@ def __init__(self):
5465 out_settings_groupbox_layout .addWidget (QtWidgets .QLabel (
5566 "Output Audio File Quality" , alignment = QtCore .Qt .AlignLeft ))
5667 out_settings_groupbox_layout .addWidget (self .allowed_quality_dropdown )
57- # out_settings_groupbox_layout.addStretch(1)
5868 self .out_settings_groupbox .setLayout (out_settings_groupbox_layout )
5969 self .layout .addWidget (self .out_settings_groupbox )
70+
6071 self .layout .addWidget (self .file_button )
6172 self .layout .addWidget (self .dir_button )
6273 self .layout .addWidget (self .convert_button )
@@ -65,27 +76,42 @@ def __init__(self):
6576 self .file_button .clicked .connect (self .get_files )
6677 self .dir_button .clicked .connect (self .get_dirs )
6778 self .dironly_checkbox .toggled .connect (self .dir_only_checkbox_changed )
68- self .metadata_naming_checkbox .toggled .connect (
69- self .metadata_naming_checkbox_changed )
79+ self .metadata_naming_checkbox .toggled .connect (self .metadata_naming_checkbox_changed )
80+ self .remove_converted_files_checkbox .toggled .connect (self .remove_converted_files_checkbox_changed )
81+ self .__file_list .itemDoubleClicked .connect (self .directory_path_clicked )
7082
7183 self .dir_only_checkbox_changed ()
7284 self .set_selected_items ()
7385
7486 def convert_files (self ):
75- selected_item = self .selected_items [0 ]
87+ selected_items = []
88+ for x in range (self .__file_list .count ()):
89+ selected_items .append (Path (self .__file_list .item (x ).text ()))
90+
7691 self .audio_converter .settings ['export_format' ] = self .allowed_formats_dropdown .currentText (
7792 )
7893 self .audio_converter .settings ['export_quality' ] = self .allowed_quality_dropdown .currentText (
7994 )
8095 is_mirroring_enabled = self .mirror_checkbox .checkState () == QtCore .Qt .CheckState .Checked
81- is_file = self .dironly_checkbox .checkState () != QtCore .Qt .CheckState .Checked
96+ is_files = self .dironly_checkbox .checkState () != QtCore .Qt .CheckState .Checked
8297 self .audio_converter .generate_file_tree (
83- selected_item , mirror_file_structure = is_mirroring_enabled , is_file = is_file )
98+ selected_items , mirror_file_structure = is_mirroring_enabled , is_files = is_files )
99+
100+ def directory_path_clicked (self , item : QtWidgets .QListWidgetItem ):
101+ path = Path (item .text ())
102+ if Path .is_dir (path ):
103+ path = str (path .resolve ())
104+ else :
105+ path = str (path .parent .resolve ())
106+ subprocess .Popen (f'explorer "{ path } "' )
84107
85108 def metadata_naming_checkbox_changed (self ):
86109 is_checked = self .metadata_naming_checkbox .checkState () == QtCore .Qt .CheckState .Checked
87110 p_val = self .audio_converter .settings ['file_name_modifications' ]['recreate_file_name_from_metadata' ]
88111 self .audio_converter .settings ['file_name_modifications' ]['recreate_file_name_from_metadata' ] = not p_val
112+
113+ def remove_converted_files_checkbox_changed (self ):
114+ pass
89115
90116 def dir_only_checkbox_changed (self ):
91117 is_checked = self .dironly_checkbox .checkState () == QtCore .Qt .CheckState .Checked
@@ -96,10 +122,13 @@ def dir_only_checkbox_changed(self):
96122 def set_selected_items (self , items : list = []):
97123 self .selected_items = items
98124 no_items_selected = len (items ) == 0
99- self .files_list .setText (
100- "No File(s) or Directory Selected" if no_items_selected else str (items ))
101125 self .convert_button .setDisabled (no_items_selected )
102126
127+ self .__file_list .clear ()
128+ if not no_items_selected :
129+ for i in items :
130+ self .__file_list .addItem (i )
131+
103132 def get_dirs (self ):
104133 dlg = QtWidgets .QFileDialog (self , 'Select Directory' )
105134 dlg .setFileMode (QtWidgets .QFileDialog .Directory )
@@ -112,7 +141,8 @@ def get_dirs(self):
112141
113142 def get_files (self ):
114143 dlg = QtWidgets .QFileDialog (self , 'Select File(s)' )
115- # dlg.setFileMode(QtWidgets.QFileDialog.AnyFile)
144+ dlg .setFileMode (QtWidgets .QFileDialog .ExistingFiles )
145+
116146 filter_raw = ""
117147 for fex in config ['FileFilter' ].split ('|' ):
118148 filter_raw += f"*.{ fex } "
@@ -121,8 +151,8 @@ def get_files(self):
121151 file_filter = f"Audio Files ({ filter_raw } )"
122152 dlg .setNameFilters ([file_filter , "Any (*)" ])
123153 dlg .selectNameFilter (file_filter )
124- filenames = []
125154
155+ filenames = []
126156 if dlg .exec ():
127157 filenames = dlg .selectedFiles ()
128158 self .set_selected_items (filenames )
0 commit comments