Skip to content

Commit 1243977

Browse files
committed
ruff fail
1 parent aaea73a commit 1243977

File tree

4 files changed

+53
-32
lines changed

4 files changed

+53
-32
lines changed

picard/file.py

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,22 @@ def keep_original_images(self):
449449
def has_error(self):
450450
return self.state == File.State.ERROR
451451

452+
def _handle_conflict(self, new_path, old_path):
453+
config = get_config()
454+
strategy = config.setting['move_conflict_strategy']
455+
if strategy not in ("skip", "rename", "overwrite"):
456+
strategy = "rename"
457+
458+
if not os.path.exists(new_path):
459+
return new_path
460+
461+
if strategy == "skip":
462+
log.warning("Destination exists, skipping %r", old_path)
463+
return None
464+
elif strategy == "rename":
465+
return get_available_filename(new_path, old_path)
466+
return new_path
467+
452468
def save(self):
453469
self.set_pending()
454470
run_file_pre_save_processors(self)
@@ -676,16 +692,9 @@ def _rename(self, old_filename, metadata, settings):
676692
new_dirname = os.path.dirname(new_filename)
677693
if not os.path.isdir(new_dirname):
678694
os.makedirs(new_dirname)
679-
config = get_config()
680-
strategy = config.setting.get('move_conflict_strategy', 'rename')
681-
if os.path.exists(new_filename):
682-
if strategy == "skip":
683-
log.warning("Destination exists, skipping move of %r", old_filename)
684-
return old_filename
685-
elif strategy == "rename":
686-
new_filename = get_available_filename(new_filename, old_filename)
687-
elif strategy == "overwrite":
688-
pass
695+
new_filename = self._handle_conflict(new_filename, old_filename)
696+
if new_filename is None:
697+
return old_filename
689698
log.debug("Moving file %r => %r", old_filename, new_filename)
690699
move_ensure_casing(old_filename, new_filename)
691700
return new_filename
@@ -705,6 +714,7 @@ def _save_images(self, dirname, metadata):
705714
images = metadata.images
706715
for image in images:
707716
image.save(dirname, metadata, counters)
717+
708718
def _move_additional_files(self, old_filename, new_filename, config):
709719
"""Move extra files, like images, playlists…"""
710720
if config.setting['move_files'] and config.setting['move_additional_files']:
@@ -740,21 +750,14 @@ def _get_additional_files_moves(self, old_path, new_path, patterns):
740750
break # we are done with this file
741751

742752
def _apply_additional_files_moves(self, moves):
743-
config = get_config()
744-
strategy = config.setting.get('move_conflict_strategy', 'rename')
745753
for old_file_path, new_file_path in moves:
746754
# FIXME we shouldn't do this from a thread!
747755
if self.tagger.files.get(decode_filename(old_file_path)):
748756
log.debug("File loaded in the tagger, not moving %r", old_file_path)
749757
continue
750-
if os.path.exists(new_file_path):
751-
if strategy == "skip":
752-
log.warning("File %r exists, skipping %r", new_file_path, old_file_path)
753-
continue
754-
elif strategy == "rename":
755-
new_file_path = get_available_filename(new_file_path)
756-
elif strategy == "overwrite":
757-
pass
758+
new_file_path = self._handle_conflict(new_file_path, old_file_path)
759+
if new_file_path is None:
760+
continue
758761
log.debug("Moving %r to %r", old_file_path, new_file_path)
759762
try:
760763
shutil.move(old_file_path, new_file_path)

picard/options.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ def make_default_toolbar_layout():
425425
BoolOption('setting', 'delete_empty_dirs', True, title=N_("Delete empty directories"))
426426
BoolOption('setting', 'move_additional_files', False, title=N_("Move additional files"))
427427
TextOption('setting', 'move_additional_files_pattern', "*.jpg *.png", title=N_("Additional file patterns"))
428+
TextOption('setting', 'move_conflict_strategy', 'rename', title=N_("File conflict handling strategy"))
428429
BoolOption('setting', 'move_files', False, title=N_("Move files"))
429430
TextOption('setting', 'move_files_to', DEFAULT_MUSIC_DIR, title=N_("Destination directory"))
430431
BoolOption('setting', 'rename_files', False, title=N_("Rename files"))

picard/ui/forms/ui_options_renaming.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,15 @@ def setupUi(self, RenamingOptionsPage):
5555
self.delete_empty_dirs = QtWidgets.QCheckBox(parent=self.move_files)
5656
self.delete_empty_dirs.setObjectName("delete_empty_dirs")
5757
self.verticalLayout_4.addWidget(self.delete_empty_dirs)
58-
self.move_overwrite_existing_files = QtWidgets.QCheckBox(parent=self.move_files)
59-
self.move_overwrite_existing_files.setObjectName("move_overwrite_existing_files")
60-
self.verticalLayout_4.addWidget(self.move_overwrite_existing_files)
58+
self.move_conflict_skip = QtWidgets.QRadioButton(parent=self.move_files)
59+
self.move_conflict_skip.setObjectName("move_conflict_skip")
60+
self.verticalLayout_4.addWidget(self.move_conflict_skip)
61+
self.move_conflict_rename = QtWidgets.QRadioButton(parent=self.move_files)
62+
self.move_conflict_rename.setObjectName("move_conflict_rename")
63+
self.verticalLayout_4.addWidget(self.move_conflict_rename)
64+
self.move_conflict_overwrite = QtWidgets.QRadioButton(parent=self.move_files)
65+
self.move_conflict_overwrite.setObjectName("move_conflict_overwrite")
66+
self.verticalLayout_4.addWidget(self.move_conflict_overwrite)
6167
self.verticalLayout_5.addWidget(self.move_files)
6268
self.rename_files = QtWidgets.QCheckBox(parent=RenamingOptionsPage)
6369
self.rename_files.setObjectName("rename_files")
@@ -150,8 +156,10 @@ def setupUi(self, RenamingOptionsPage):
150156
RenamingOptionsPage.setTabOrder(self.move_files_to_browse, self.move_additional_files)
151157
RenamingOptionsPage.setTabOrder(self.move_additional_files, self.move_additional_files_pattern)
152158
RenamingOptionsPage.setTabOrder(self.move_additional_files_pattern, self.delete_empty_dirs)
153-
RenamingOptionsPage.setTabOrder(self.delete_empty_dirs, self.move_overwrite_existing_files)
154-
RenamingOptionsPage.setTabOrder(self.move_overwrite_existing_files, self.rename_files)
159+
RenamingOptionsPage.setTabOrder(self.delete_empty_dirs, self.move_conflict_skip)
160+
RenamingOptionsPage.setTabOrder(self.move_conflict_skip, self.move_conflict_rename)
161+
RenamingOptionsPage.setTabOrder(self.move_conflict_rename, self.move_conflict_overwrite)
162+
RenamingOptionsPage.setTabOrder(self.move_conflict_overwrite, self.rename_files)
155163
RenamingOptionsPage.setTabOrder(self.rename_files, self.naming_script_selector)
156164
RenamingOptionsPage.setTabOrder(self.naming_script_selector, self.open_script_editor)
157165
RenamingOptionsPage.setTabOrder(self.open_script_editor, self.example_filename_before)
@@ -164,7 +172,9 @@ def retranslateUi(self, RenamingOptionsPage):
164172
self.move_files_to_browse.setToolTip(_("Select directory"))
165173
self.move_additional_files.setText(_("Move additional files (case insensitive):"))
166174
self.delete_empty_dirs.setText(_("Delete empty directories"))
167-
self.move_overwrite_existing_files.setText(_("Overwrite existing files"))
175+
self.move_conflict_skip.setText(_("Do not move duplicate files"))
176+
self.move_conflict_rename.setText(_("Move and rename file with numeric suffix"))
177+
self.move_conflict_overwrite.setText(_("Move and overwrite existing files"))
168178
self.rename_files.setText(_("Rename files when saving"))
169179
self.selected_script_label.setText(_("Selected file naming script:"))
170180
self.open_script_editor.setText(_("Edit file naming script…"))

picard/ui/options/renaming.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
from PyQt6 import QtWidgets
3939
from PyQt6.QtGui import QPalette
4040

41-
from picard.config import get_config
41+
from picard.config import get_config, log
4242
from picard.extension_points.options_pages import register_options_page
4343
from picard.i18n import (
4444
N_,
@@ -77,7 +77,6 @@ class RenamingOptionsPage(OptionsPage):
7777
('move_files_to', ['move_files_to']),
7878
('move_additional_files', ['move_additional_files']),
7979
('move_additional_files_pattern', ['move_additional_files_pattern']),
80-
('move_conflict_strategy', ['move_conflict_strategy']),
8180
('delete_empty_dirs', ['delete_empty_dirs']),
8281
('rename_files', ['rename_files']),
8382
('selected_file_naming_script_id', ['naming_script_selector']),
@@ -250,10 +249,16 @@ def load(self):
250249
self.ui.move_files_to.setCursorPosition(0)
251250
self.ui.move_additional_files.setChecked(config.setting['move_additional_files'])
252251
self.ui.move_additional_files_pattern.setText(config.setting['move_additional_files_pattern'])
253-
strategy = config.setting['move_conflict_strategy']
254-
self.ui.move_conflict_skip.setChecked(strategy == "skip")
255-
self.ui.move_conflict_rename.setChecked(strategy == "rename")
256-
self.ui.move_conflict_overwrite.setChecked(strategy == "overwrite")
252+
strategy = config.setting['move_conflict_strategy'] or "rename"
253+
if strategy == "skip":
254+
self.ui.move_conflict_skip.setChecked(True)
255+
elif strategy == "rename":
256+
self.ui.move_conflict_rename.setChecked(True)
257+
elif strategy == "overwrite":
258+
self.ui.move_conflict_overwrite.setChecked(True)
259+
else:
260+
log.warning("Invalid move_conflict_strategy: %r, defaulting to 'rename'", strategy)
261+
self.ui.move_conflict_rename.setChecked(True)
257262
self.ui.delete_empty_dirs.setChecked(config.setting['delete_empty_dirs'])
258263
self.naming_scripts = config.setting['file_renaming_scripts']
259264
self.selected_naming_script_id = config.setting['selected_file_naming_script_id']
@@ -294,6 +299,8 @@ def save(self):
294299
config.setting['move_conflict_strategy'] = "rename"
295300
elif self.ui.move_conflict_overwrite.isChecked():
296301
config.setting['move_conflict_strategy'] = "overwrite"
302+
else:
303+
config.setting['move_conflict_strategy'] = "rename"
297304
config.setting['move_additional_files_pattern'] = self.ui.move_additional_files_pattern.text()
298305
config.setting['delete_empty_dirs'] = self.ui.delete_empty_dirs.isChecked()
299306
config.setting['selected_file_naming_script_id'] = self.selected_naming_script_id

0 commit comments

Comments
 (0)