mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Add languages field to metadata diff tool
This commit is contained in:
parent
cec0eff1c1
commit
c9c9473884
@ -23,14 +23,17 @@ class LanguagesEdit(EditWithComplete):
|
|||||||
self.comma_map = {k:k.replace(',', '|') for k in self.names_with_commas}
|
self.comma_map = {k:k.replace(',', '|') for k in self.names_with_commas}
|
||||||
self.comma_rmap = {v:k for k, v in self.comma_map.iteritems()}
|
self.comma_rmap = {v:k for k, v in self.comma_map.iteritems()}
|
||||||
self._rmap = {lower(v):k for k,v in self._lang_map.iteritems()}
|
self._rmap = {lower(v):k for k,v in self._lang_map.iteritems()}
|
||||||
if db is not None:
|
|
||||||
self.init_langs(db)
|
self.init_langs(db)
|
||||||
|
|
||||||
def init_langs(self, db):
|
def init_langs(self, db):
|
||||||
|
if db is not None:
|
||||||
pmap = {self._lang_map.get(x[1], x[1]):1 for x in
|
pmap = {self._lang_map.get(x[1], x[1]):1 for x in
|
||||||
db.get_languages_with_ids()}
|
db.get_languages_with_ids()}
|
||||||
all_items = sorted(self._lang_map.itervalues(),
|
all_items = sorted(self._lang_map.itervalues(),
|
||||||
key=lambda x: (-pmap.get(x, 0), sort_key(x)))
|
key=lambda x: (-pmap.get(x, 0), sort_key(x)))
|
||||||
|
else:
|
||||||
|
all_items = sorted(self._lang_map.itervalues(),
|
||||||
|
key=lambda x: sort_key(x))
|
||||||
self.update_items_cache(all_items)
|
self.update_items_cache(all_items)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -19,6 +19,7 @@ from calibre import fit_image
|
|||||||
from calibre.ebooks.metadata import title_sort, authors_to_sort_string
|
from calibre.ebooks.metadata import title_sort, authors_to_sort_string
|
||||||
from calibre.gui2 import pixmap_to_data, gprefs
|
from calibre.gui2 import pixmap_to_data, gprefs
|
||||||
from calibre.gui2.comments_editor import Editor
|
from calibre.gui2.comments_editor import Editor
|
||||||
|
from calibre.gui2.languages import LanguagesEdit as LE
|
||||||
from calibre.gui2.metadata.basic_widgets import PubdateEdit, RatingEdit
|
from calibre.gui2.metadata.basic_widgets import PubdateEdit, RatingEdit
|
||||||
from calibre.ptempfile import PersistentTemporaryFile
|
from calibre.ptempfile import PersistentTemporaryFile
|
||||||
from calibre.utils.date import UNDEFINED_DATE
|
from calibre.utils.date import UNDEFINED_DATE
|
||||||
@ -78,6 +79,37 @@ class LineEdit(QLineEdit):
|
|||||||
def is_blank(self):
|
def is_blank(self):
|
||||||
return not self.current_val.strip()
|
return not self.current_val.strip()
|
||||||
|
|
||||||
|
class LanguagesEdit(LE):
|
||||||
|
|
||||||
|
changed = pyqtSignal()
|
||||||
|
|
||||||
|
def __init__(self, field, is_new, parent, metadata, extra):
|
||||||
|
LE.__init__(self, parent=parent)
|
||||||
|
self.is_new = is_new
|
||||||
|
self.field = field
|
||||||
|
self.metadata = metadata
|
||||||
|
self.textChanged.connect(self.changed)
|
||||||
|
if not is_new:
|
||||||
|
self.lineEdit().setReadOnly(True)
|
||||||
|
|
||||||
|
@dynamic_property
|
||||||
|
def current_val(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.lang_codes
|
||||||
|
def fset(self, val):
|
||||||
|
self.lang_codes = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
|
||||||
|
def from_mi(self, mi):
|
||||||
|
self.lang_codes = mi.languages
|
||||||
|
|
||||||
|
def to_mi(self, mi):
|
||||||
|
mi.languages = self.lang_codes
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_blank(self):
|
||||||
|
return not self.current_val
|
||||||
|
|
||||||
class RatingsEdit(RatingEdit):
|
class RatingsEdit(RatingEdit):
|
||||||
|
|
||||||
changed = pyqtSignal()
|
changed = pyqtSignal()
|
||||||
@ -152,6 +184,7 @@ class IdentifiersEdit(LineEdit):
|
|||||||
def from_mi(self, mi):
|
def from_mi(self, mi):
|
||||||
val = ('%s:%s' % (k, v) for k, v in mi.identifiers.iteritems())
|
val = ('%s:%s' % (k, v) for k, v in mi.identifiers.iteritems())
|
||||||
self.setText(', '.join(val))
|
self.setText(', '.join(val))
|
||||||
|
self.setCursorPosition(0)
|
||||||
|
|
||||||
def to_mi(self, mi):
|
def to_mi(self, mi):
|
||||||
parts = (x.strip() for x in self.current_val.split(',') if x.strip())
|
parts = (x.strip() for x in self.current_val.split(',') if x.strip())
|
||||||
@ -285,7 +318,7 @@ class CompareSingle(QWidget):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self, field_metadata, parent=None, revert_tooltip=None,
|
self, field_metadata, parent=None, revert_tooltip=None,
|
||||||
datetime_fmt='MMMM yyyy', blank_as_equal=True,
|
datetime_fmt='MMMM yyyy', blank_as_equal=True,
|
||||||
fields=('title', 'authors', 'series', 'tags', 'rating', 'publisher', 'pubdate', 'identifiers', 'comments', 'cover')):
|
fields=('title', 'authors', 'series', 'tags', 'rating', 'publisher', 'pubdate', 'identifiers', 'languages', 'comments', 'cover')):
|
||||||
QWidget.__init__(self, parent)
|
QWidget.__init__(self, parent)
|
||||||
self.l = l = QGridLayout()
|
self.l = l = QGridLayout()
|
||||||
l.setContentsMargins(0, 0, 0, 0)
|
l.setContentsMargins(0, 0, 0, 0)
|
||||||
@ -308,6 +341,8 @@ class CompareSingle(QWidget):
|
|||||||
cls = SeriesEdit
|
cls = SeriesEdit
|
||||||
elif field == 'identifiers':
|
elif field == 'identifiers':
|
||||||
cls = IdentifiersEdit
|
cls = IdentifiersEdit
|
||||||
|
elif field == 'languages':
|
||||||
|
cls = LanguagesEdit
|
||||||
elif 'comments' in {field, dt}:
|
elif 'comments' in {field, dt}:
|
||||||
cls = CommentsEdit
|
cls = CommentsEdit
|
||||||
elif 'rating' in {field, dt}:
|
elif 'rating' in {field, dt}:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user