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):
|
def rename_done(self, name_map, job, from_filelist=None):
|
||||||
if job.traceback is not None:
|
if job.traceback is not None:
|
||||||
|
self.gui.file_list.restore_temp_names()
|
||||||
return error_dialog(self.gui, _('Failed to rename files'),
|
return error_dialog(self.gui, _('Failed to rename files'),
|
||||||
_('Failed to rename files, click "Show details" for more information.'),
|
_('Failed to rename files, click "Show details" for more information.'),
|
||||||
det_msg=job.traceback, show=True)
|
det_msg=job.traceback, show=True)
|
||||||
|
@ -48,6 +48,7 @@ NAME_ROLE = Qt.ItemDataRole.UserRole
|
|||||||
CATEGORY_ROLE = NAME_ROLE + 1
|
CATEGORY_ROLE = NAME_ROLE + 1
|
||||||
LINEAR_ROLE = CATEGORY_ROLE + 1
|
LINEAR_ROLE = CATEGORY_ROLE + 1
|
||||||
MIME_ROLE = LINEAR_ROLE + 1
|
MIME_ROLE = LINEAR_ROLE + 1
|
||||||
|
TEMP_NAME_ROLE = MIME_ROLE + 1
|
||||||
NBSP = '\xa0'
|
NBSP = '\xa0'
|
||||||
|
|
||||||
|
|
||||||
@ -290,8 +291,16 @@ class FileList(QTreeWidget, OpenWithHandler):
|
|||||||
self.pending_renames[old] = new
|
self.pending_renames[old] = new
|
||||||
QTimer.singleShot(10, self.dispatch_pending_renames)
|
QTimer.singleShot(10, self.dispatch_pending_renames)
|
||||||
item = self.itemFromIndex(index)
|
item = self.itemFromIndex(index)
|
||||||
|
item.setData(0, TEMP_NAME_ROLE, item.text(0))
|
||||||
item.setText(0, new)
|
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):
|
def dispatch_pending_renames(self):
|
||||||
if self.pending_renames:
|
if self.pending_renames:
|
||||||
if self.state() != QAbstractItemView.State.EditingState:
|
if self.state() != QAbstractItemView.State.EditingState:
|
||||||
@ -301,7 +310,7 @@ class FileList(QTreeWidget, OpenWithHandler):
|
|||||||
self.rename_requested.emit(old, new)
|
self.rename_requested.emit(old, new)
|
||||||
else:
|
else:
|
||||||
ur = {}
|
ur = {}
|
||||||
seen_vals = set()
|
seen_vals = {c.data(0, NAME_ROLE) or '' for c in self.all_files}
|
||||||
for k, v in pr.items():
|
for k, v in pr.items():
|
||||||
if v not in seen_vals:
|
if v not in seen_vals:
|
||||||
seen_vals.add(v)
|
seen_vals.add(v)
|
||||||
@ -409,24 +418,22 @@ class FileList(QTreeWidget, OpenWithHandler):
|
|||||||
return c
|
return c
|
||||||
|
|
||||||
def select_name(self, name, set_as_current_index=False):
|
def select_name(self, name, set_as_current_index=False):
|
||||||
for parent in self.categories.values():
|
for c in self.all_files:
|
||||||
for c in (parent.child(i) for i in range(parent.childCount())):
|
q = str(c.data(0, NAME_ROLE) or '')
|
||||||
q = str(c.data(0, NAME_ROLE) or '')
|
c.setSelected(q == name)
|
||||||
c.setSelected(q == name)
|
if q == name:
|
||||||
if q == name:
|
self.scrollToItem(c)
|
||||||
self.scrollToItem(c)
|
if set_as_current_index:
|
||||||
if set_as_current_index:
|
self.setCurrentItem(c)
|
||||||
self.setCurrentItem(c)
|
|
||||||
|
|
||||||
def select_names(self, names, current_name=None):
|
def select_names(self, names, current_name=None):
|
||||||
for parent in self.categories.values():
|
for c in self.all_files:
|
||||||
for c in (parent.child(i) for i in range(parent.childCount())):
|
q = str(c.data(0, NAME_ROLE) or '')
|
||||||
q = str(c.data(0, NAME_ROLE) or '')
|
c.setSelected(q in names)
|
||||||
c.setSelected(q in names)
|
if q == current_name:
|
||||||
if q == current_name:
|
self.scrollToItem(c)
|
||||||
self.scrollToItem(c)
|
s = self.selectionModel()
|
||||||
s = self.selectionModel()
|
s.setCurrentIndex(self.indexFromItem(c), QItemSelectionModel.SelectionFlag.NoUpdate)
|
||||||
s.setCurrentIndex(self.indexFromItem(c), QItemSelectionModel.SelectionFlag.NoUpdate)
|
|
||||||
|
|
||||||
def mark_name_as_current(self, name):
|
def mark_name_as_current(self, name):
|
||||||
current = self.item_from_name(name)
|
current = self.item_from_name(name)
|
||||||
@ -1195,6 +1202,9 @@ class FileListWidget(QWidget):
|
|||||||
def build(self, container, preserve_state=True):
|
def build(self, container, preserve_state=True):
|
||||||
self.file_list.build(container, preserve_state=preserve_state)
|
self.file_list.build(container, preserve_state=preserve_state)
|
||||||
|
|
||||||
|
def restore_temp_names(self):
|
||||||
|
self.file_list.restore_temp_names()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def searchable_names(self):
|
def searchable_names(self):
|
||||||
return self.file_list.searchable_names
|
return self.file_list.searchable_names
|
||||||
|
Loading…
x
Reference in New Issue
Block a user