mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
...
This commit is contained in:
parent
cdd3c6bc48
commit
c756509cb3
@ -25,7 +25,8 @@ from calibre.utils.config import to_json, from_json, prefs, tweaks
|
|||||||
from calibre.utils.date import utcfromtimestamp, parse_date
|
from calibre.utils.date import utcfromtimestamp, parse_date
|
||||||
from calibre.utils.filenames import is_case_sensitive
|
from calibre.utils.filenames import is_case_sensitive
|
||||||
from calibre.db.tables import (OneToOneTable, ManyToOneTable, ManyToManyTable,
|
from calibre.db.tables import (OneToOneTable, ManyToOneTable, ManyToManyTable,
|
||||||
SizeTable, FormatsTable, AuthorsTable, IdentifiersTable, CompositeTable)
|
SizeTable, FormatsTable, AuthorsTable, IdentifiersTable,
|
||||||
|
CompositeTable, LanguagesTable)
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
'''
|
'''
|
||||||
@ -604,11 +605,12 @@ class DB(object):
|
|||||||
for col in ('series', 'publisher', 'rating'):
|
for col in ('series', 'publisher', 'rating'):
|
||||||
tables[col] = ManyToOneTable(col, self.field_metadata[col].copy())
|
tables[col] = ManyToOneTable(col, self.field_metadata[col].copy())
|
||||||
|
|
||||||
for col in ('authors', 'tags', 'formats', 'identifiers'):
|
for col in ('authors', 'tags', 'formats', 'identifiers', 'languages'):
|
||||||
cls = {
|
cls = {
|
||||||
'authors':AuthorsTable,
|
'authors':AuthorsTable,
|
||||||
'formats':FormatsTable,
|
'formats':FormatsTable,
|
||||||
'identifiers':IdentifiersTable,
|
'identifiers':IdentifiersTable,
|
||||||
|
'languages':LanguagesTable,
|
||||||
}.get(col, ManyToManyTable)
|
}.get(col, ManyToManyTable)
|
||||||
tables[col] = cls(col, self.field_metadata[col].copy())
|
tables[col] = cls(col, self.field_metadata[col].copy())
|
||||||
|
|
||||||
|
@ -13,7 +13,8 @@ from functools import wraps, partial
|
|||||||
|
|
||||||
from calibre.db.locking import create_locks, RecordLock
|
from calibre.db.locking import create_locks, RecordLock
|
||||||
from calibre.db.fields import create_field
|
from calibre.db.fields import create_field
|
||||||
from calibre.ebooks.book.base import Metadata
|
from calibre.db.tables import VirtualTable
|
||||||
|
from calibre.ebooks.metadata.book.base import Metadata
|
||||||
from calibre.utils.date import now
|
from calibre.utils.date import now
|
||||||
|
|
||||||
def api(f):
|
def api(f):
|
||||||
@ -189,7 +190,8 @@ class Cache(object):
|
|||||||
if table.metadata['datatype'] == 'composite':
|
if table.metadata['datatype'] == 'composite':
|
||||||
self.composites.add(field)
|
self.composites.add(field)
|
||||||
|
|
||||||
self.fields['ondevice'] = create_field('ondevice', None)
|
self.fields['ondevice'] = create_field('ondevice',
|
||||||
|
VirtualTable('ondevice'))
|
||||||
|
|
||||||
@read_api
|
@read_api
|
||||||
def field_for(self, name, book_id, default_value=None):
|
def field_for(self, name, book_id, default_value=None):
|
||||||
|
@ -13,6 +13,7 @@ from dateutil.tz import tzoffset
|
|||||||
|
|
||||||
from calibre.constants import plugins
|
from calibre.constants import plugins
|
||||||
from calibre.utils.date import parse_date, local_tz, UNDEFINED_DATE
|
from calibre.utils.date import parse_date, local_tz, UNDEFINED_DATE
|
||||||
|
from calibre.utils.localization import lang_map
|
||||||
from calibre.ebooks.metadata import author_to_author_sort
|
from calibre.ebooks.metadata import author_to_author_sort
|
||||||
|
|
||||||
_c_speedup = plugins['speedup'][0]
|
_c_speedup = plugins['speedup'][0]
|
||||||
@ -54,6 +55,19 @@ class Table(object):
|
|||||||
self.link_table = (link_table if link_table else
|
self.link_table = (link_table if link_table else
|
||||||
'books_%s_link'%self.metadata['table'])
|
'books_%s_link'%self.metadata['table'])
|
||||||
|
|
||||||
|
class VirtualTable(Table):
|
||||||
|
|
||||||
|
'''
|
||||||
|
A dummy table used for fields that only exist in memory like ondevice
|
||||||
|
'''
|
||||||
|
|
||||||
|
def __init__(self, name, table_type=ONE_ONE, datatype='text'):
|
||||||
|
metadata = {'datatype':datatype, 'table':name}
|
||||||
|
self.table_type = table_type
|
||||||
|
Table.__init__(self, name, metadata)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class OneToOneTable(Table):
|
class OneToOneTable(Table):
|
||||||
|
|
||||||
'''
|
'''
|
||||||
@ -210,3 +224,9 @@ class IdentifiersTable(ManyToManyTable):
|
|||||||
for key in tuple(self.col_book_map.iterkeys()):
|
for key in tuple(self.col_book_map.iterkeys()):
|
||||||
self.col_book_map[key] = tuple(self.col_book_map[key])
|
self.col_book_map[key] = tuple(self.col_book_map[key])
|
||||||
|
|
||||||
|
class LanguagesTable(ManyToManyTable):
|
||||||
|
|
||||||
|
def read_id_maps(self, db):
|
||||||
|
ManyToManyTable.read_id_maps(self, db)
|
||||||
|
lm = lang_map()
|
||||||
|
self.lang_name_map = {x:lm.get(x, x) for x in self.id_map.itervalues()}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user