mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Edit Book: Change the suggested prefix for bulk renaming of files depending on the type of files being renamed. Fixes #1514468 [Bulk renaming of non-Text files in the editor](https://bugs.launchpad.net/calibre/+bug/1514468)
Minor changes to the commit that actually implemented this functionality: 1) List categories in only one place 2) Allow user to rename across categories -- although I can think of no good reason for this, I don't want to place an unnecessary restriction on the functionality.
This commit is contained in:
parent
b1b9a0020c
commit
0d6178f129
@ -8,7 +8,7 @@ __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
from binascii import hexlify
|
from binascii import hexlify
|
||||||
from collections import OrderedDict, defaultdict
|
from collections import OrderedDict, defaultdict, Counter
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
import sip
|
import sip
|
||||||
@ -37,6 +37,14 @@ LINEAR_ROLE = CATEGORY_ROLE + 1
|
|||||||
MIME_ROLE = LINEAR_ROLE + 1
|
MIME_ROLE = LINEAR_ROLE + 1
|
||||||
NBSP = '\xa0'
|
NBSP = '\xa0'
|
||||||
|
|
||||||
|
CATEGORIES = (
|
||||||
|
('text', _('Text'), _('Chapter-')),
|
||||||
|
('styles', _('Styles'), _('Style-')),
|
||||||
|
('images', _('Images'), _('Image-')),
|
||||||
|
('fonts', _('Fonts'), _('Font-')),
|
||||||
|
('misc', _('Miscellaneous'), _('Misc-')),
|
||||||
|
)
|
||||||
|
|
||||||
def name_is_ok(name, show_error):
|
def name_is_ok(name, show_error):
|
||||||
if not name or not name.strip():
|
if not name or not name.strip():
|
||||||
return show_error('') and False
|
return show_error('') and False
|
||||||
@ -59,14 +67,8 @@ def get_bulk_rename_settings(parent, number, msg=None, sanitize=sanitize_file_na
|
|||||||
d.l = l = QFormLayout(d)
|
d.l = l = QFormLayout(d)
|
||||||
d.setLayout(l)
|
d.setLayout(l)
|
||||||
d.prefix = p = QLineEdit(d)
|
d.prefix = p = QLineEdit(d)
|
||||||
default_prefixes = {
|
prefix = prefix or {k:v for k, __, v in CATEGORIES}.get(category, _('Chapter-'))
|
||||||
'images': _('Image-'),
|
p.setText(prefix)
|
||||||
'styles': _('Style-'),
|
|
||||||
'fonts': _('Font-'),
|
|
||||||
'text': _('Chapter-'),
|
|
||||||
'misc': _('Misc-')
|
|
||||||
}
|
|
||||||
p.setText(prefix or default_prefixes.get(category))
|
|
||||||
p.selectAll()
|
p.selectAll()
|
||||||
d.la = la = QLabel(msg or _(
|
d.la = la = QLabel(msg or _(
|
||||||
'All selected files will be renamed to the form prefix-number'))
|
'All selected files will be renamed to the form prefix-number'))
|
||||||
@ -264,13 +266,7 @@ class FileList(QTreeWidget):
|
|||||||
self.root = self.invisibleRootItem()
|
self.root = self.invisibleRootItem()
|
||||||
self.root.setFlags(Qt.ItemIsDragEnabled)
|
self.root.setFlags(Qt.ItemIsDragEnabled)
|
||||||
self.categories = {}
|
self.categories = {}
|
||||||
for category, text in (
|
for category, text, __ in CATEGORIES:
|
||||||
('text', _('Text')),
|
|
||||||
('styles', _('Styles')),
|
|
||||||
('images', _('Images')),
|
|
||||||
('fonts', _('Fonts')),
|
|
||||||
('misc', _('Miscellaneous')),
|
|
||||||
):
|
|
||||||
self.categories[category] = i = QTreeWidgetItem(self.root, 0)
|
self.categories[category] = i = QTreeWidgetItem(self.root, 0)
|
||||||
i.setText(0, text)
|
i.setText(0, text)
|
||||||
i.setData(0, Qt.DecorationRole, self.top_level_pixmap_cache[category])
|
i.setData(0, Qt.DecorationRole, self.top_level_pixmap_cache[category])
|
||||||
@ -524,16 +520,13 @@ class FileList(QTreeWidget):
|
|||||||
' internal structures of the original file.') % current_container().book_type.upper(), show=True)
|
' internal structures of the original file.') % current_container().book_type.upper(), show=True)
|
||||||
return
|
return
|
||||||
names = {unicode(item.data(0, NAME_ROLE) or '') for item in self.selectedItems()}
|
names = {unicode(item.data(0, NAME_ROLE) or '') for item in self.selectedItems()}
|
||||||
categories = {unicode(item.data(0, CATEGORY_ROLE) or '') for item in self.selectedItems()}
|
|
||||||
if len(categories) > 1:
|
|
||||||
return error_dialog(self, _('Cannot rename'),
|
|
||||||
_('The file(s) %s cannot be renamed because they are of different types.') % ('<b>%s</b>' % ', '.join(names)), show=True)
|
|
||||||
bad = names & current_container().names_that_must_not_be_changed
|
bad = names & current_container().names_that_must_not_be_changed
|
||||||
if bad:
|
if bad:
|
||||||
return error_dialog(self, _('Cannot rename'),
|
return error_dialog(self, _('Cannot rename'),
|
||||||
_('The file(s) %s cannot be renamed.') % ('<b>%s</b>' % ', '.join(bad)), show=True)
|
_('The file(s) %s cannot be renamed.') % ('<b>%s</b>' % ', '.join(bad)), show=True)
|
||||||
names = sorted(names, key=self.index_of_name)
|
names = sorted(names, key=self.index_of_name)
|
||||||
fmt, num = get_bulk_rename_settings(self, len(names), category=categories.pop())
|
categories = Counter(unicode(item.data(0, CATEGORY_ROLE) or '') for item in self.selectedItems())
|
||||||
|
fmt, num = get_bulk_rename_settings(self, len(names), category=categories.most_common(1)[0][0])
|
||||||
if fmt is not None:
|
if fmt is not None:
|
||||||
def change_name(name, num):
|
def change_name(name, num):
|
||||||
parts = name.split('/')
|
parts = name.split('/')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user