mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Also discard duplicates from batched rename matching existing file names
This commit is contained in:
parent
a8caf05566
commit
8466f81072
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user