Also discard duplicates from batched rename matching existing file names

This commit is contained in:
Kovid Goyal 2022-09-22 23:06:51 +05:30
parent a8caf05566
commit 8466f81072
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 28 additions and 17 deletions

View File

@ -792,6 +792,7 @@ class Boss(QObject):
def rename_done(self, name_map, job, from_filelist=None):
if job.traceback is not None:
self.gui.file_list.restore_temp_names()
return error_dialog(self.gui, _('Failed to rename files'),
_('Failed to rename files, click "Show details" for more information.'),
det_msg=job.traceback, show=True)

View File

@ -48,6 +48,7 @@ NAME_ROLE = Qt.ItemDataRole.UserRole
CATEGORY_ROLE = NAME_ROLE + 1
LINEAR_ROLE = CATEGORY_ROLE + 1
MIME_ROLE = LINEAR_ROLE + 1
TEMP_NAME_ROLE = MIME_ROLE + 1
NBSP = '\xa0'
@ -290,8 +291,16 @@ class FileList(QTreeWidget, OpenWithHandler):
self.pending_renames[old] = new
QTimer.singleShot(10, self.dispatch_pending_renames)
item = self.itemFromIndex(index)
item.setData(0, TEMP_NAME_ROLE, item.text(0))
item.setText(0, new)
def restore_temp_names(self):
for item in self.all_files:
q = item.data(0, TEMP_NAME_ROLE)
if q:
item.setText(0, q)
item.setData(0, TEMP_NAME_ROLE, None)
def dispatch_pending_renames(self):
if self.pending_renames:
if self.state() != QAbstractItemView.State.EditingState:
@ -301,7 +310,7 @@ class FileList(QTreeWidget, OpenWithHandler):
self.rename_requested.emit(old, new)
else:
ur = {}
seen_vals = set()
seen_vals = {c.data(0, NAME_ROLE) or '' for c in self.all_files}
for k, v in pr.items():
if v not in seen_vals:
seen_vals.add(v)
@ -409,8 +418,7 @@ class FileList(QTreeWidget, OpenWithHandler):
return c
def select_name(self, name, set_as_current_index=False):
for parent in self.categories.values():
for c in (parent.child(i) for i in range(parent.childCount())):
for c in self.all_files:
q = str(c.data(0, NAME_ROLE) or '')
c.setSelected(q == name)
if q == name:
@ -419,8 +427,7 @@ class FileList(QTreeWidget, OpenWithHandler):
self.setCurrentItem(c)
def select_names(self, names, current_name=None):
for parent in self.categories.values():
for c in (parent.child(i) for i in range(parent.childCount())):
for c in self.all_files:
q = str(c.data(0, NAME_ROLE) or '')
c.setSelected(q in names)
if q == current_name:
@ -1195,6 +1202,9 @@ class FileListWidget(QWidget):
def build(self, container, preserve_state=True):
self.file_list.build(container, preserve_state=preserve_state)
def restore_temp_names(self):
self.file_list.restore_temp_names()
@property
def searchable_names(self):
return self.file_list.searchable_names