mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
1) fix problem in rtf metadata writer -- categories isn't a standard option.
2) fix book/base.py to always return a default. That is what python is supposed to do. 3) add ability to code 'key in mi' (the __iter__ function) (base.py) 4) add has_key() to base.py 5) have rename refuse to allow & characters in author names
This commit is contained in:
parent
fa9c23031e
commit
bb97bd6cab
@ -133,6 +133,12 @@ class Metadata(object):
|
|||||||
# Don't abuse this privilege
|
# Don't abuse this privilege
|
||||||
self.__dict__[field] = val
|
self.__dict__[field] = val
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return object.__getattribute__(self, '_data').iterkeys()
|
||||||
|
|
||||||
|
def has_key(self, key):
|
||||||
|
return key in object.__getattribute__(self, '_data')
|
||||||
|
|
||||||
def deepcopy(self):
|
def deepcopy(self):
|
||||||
m = Metadata(None)
|
m = Metadata(None)
|
||||||
m.__dict__ = copy.deepcopy(self.__dict__)
|
m.__dict__ = copy.deepcopy(self.__dict__)
|
||||||
@ -140,12 +146,10 @@ class Metadata(object):
|
|||||||
return m
|
return m
|
||||||
|
|
||||||
def get(self, field, default=None):
|
def get(self, field, default=None):
|
||||||
if default is not None:
|
|
||||||
try:
|
try:
|
||||||
return self.__getattribute__(field)
|
return self.__getattribute__(field)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return default
|
return default
|
||||||
return self.__getattribute__(field)
|
|
||||||
|
|
||||||
def get_extra(self, field):
|
def get_extra(self, field):
|
||||||
_data = object.__getattribute__(self, '_data')
|
_data = object.__getattribute__(self, '_data')
|
||||||
|
@ -125,7 +125,7 @@ def create_metadata(stream, options):
|
|||||||
au = u', '.join(au)
|
au = u', '.join(au)
|
||||||
author = au.encode('ascii', 'ignore')
|
author = au.encode('ascii', 'ignore')
|
||||||
md += r'{\author %s}'%(author,)
|
md += r'{\author %s}'%(author,)
|
||||||
if options.category:
|
if options.get('category', None):
|
||||||
category = options.category.encode('ascii', 'ignore')
|
category = options.category.encode('ascii', 'ignore')
|
||||||
md += r'{\category %s}'%(category,)
|
md += r'{\category %s}'%(category,)
|
||||||
comp = options.comment if hasattr(options, 'comment') else options.comments
|
comp = options.comment if hasattr(options, 'comment') else options.comments
|
||||||
@ -180,7 +180,7 @@ def set_metadata(stream, options):
|
|||||||
src = pat.sub(r'{\\author ' + author + r'}', src)
|
src = pat.sub(r'{\\author ' + author + r'}', src)
|
||||||
else:
|
else:
|
||||||
src = add_metadata_item(src, 'author', author)
|
src = add_metadata_item(src, 'author', author)
|
||||||
category = options.category
|
category = options.get('category', None)
|
||||||
if category != None:
|
if category != None:
|
||||||
category = category.encode('ascii', 'replace')
|
category = category.encode('ascii', 'replace')
|
||||||
pat = re.compile(base_pat.replace('name', 'category'), re.DOTALL)
|
pat = re.compile(base_pat.replace('name', 'category'), re.DOTALL)
|
||||||
|
@ -6,6 +6,7 @@ __license__ = 'GPL v3'
|
|||||||
from PyQt4.Qt import Qt, QDialog, QTableWidgetItem, QAbstractItemView
|
from PyQt4.Qt import Qt, QDialog, QTableWidgetItem, QAbstractItemView
|
||||||
|
|
||||||
from calibre.ebooks.metadata import author_to_author_sort
|
from calibre.ebooks.metadata import author_to_author_sort
|
||||||
|
from calibre.gui2 import error_dialog
|
||||||
from calibre.gui2.dialogs.edit_authors_dialog_ui import Ui_EditAuthorsDialog
|
from calibre.gui2.dialogs.edit_authors_dialog_ui import Ui_EditAuthorsDialog
|
||||||
|
|
||||||
class tableItem(QTableWidgetItem):
|
class tableItem(QTableWidgetItem):
|
||||||
@ -109,6 +110,12 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
if col == 0:
|
if col == 0:
|
||||||
item = self.table.item(row, 0)
|
item = self.table.item(row, 0)
|
||||||
aut = unicode(item.text()).strip()
|
aut = unicode(item.text()).strip()
|
||||||
|
amper = aut.find('&')
|
||||||
|
if amper >= 0:
|
||||||
|
error_dialog(self.parent(), _('Invalid author name'),
|
||||||
|
_('Author names cannot contain & characters.')).exec_()
|
||||||
|
aut = aut.replace('&', '%')
|
||||||
|
self.table.item(row, 0).setText(aut)
|
||||||
c = self.table.item(row, 1)
|
c = self.table.item(row, 1)
|
||||||
c.setText(author_to_author_sort(aut))
|
c.setText(author_to_author_sort(aut))
|
||||||
item = c
|
item = c
|
||||||
|
@ -505,7 +505,12 @@ class TagsModel(QAbstractItemModel): # {{{
|
|||||||
key = item.parent.category_key
|
key = item.parent.category_key
|
||||||
# make certain we know about the item's category
|
# make certain we know about the item's category
|
||||||
if key not in self.db.field_metadata:
|
if key not in self.db.field_metadata:
|
||||||
return
|
return False
|
||||||
|
if key == 'authors':
|
||||||
|
if val.find('&') >= 0:
|
||||||
|
error_dialog(self.tags_view, _('Invalid author name'),
|
||||||
|
_('Author names cannot contain & characters.')).exec_()
|
||||||
|
return False
|
||||||
if key == 'search':
|
if key == 'search':
|
||||||
if val in saved_searches().names():
|
if val in saved_searches().names():
|
||||||
error_dialog(self.tags_view, _('Duplicate search name'),
|
error_dialog(self.tags_view, _('Duplicate search name'),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user