mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 10:44:09 -04:00
Add the news category
This commit is contained in:
parent
f0c69471fc
commit
db50889a80
@ -53,8 +53,7 @@ class Tag(object):
|
|||||||
|
|
||||||
def find_categories(field_metadata):
|
def find_categories(field_metadata):
|
||||||
for category, cat in field_metadata.iteritems():
|
for category, cat in field_metadata.iteritems():
|
||||||
if (cat['is_category'] and cat['kind'] not in {'user', 'search'} and
|
if (cat['is_category'] and cat['kind'] not in {'user', 'search'}):
|
||||||
category != 'news'):
|
|
||||||
yield (category, cat['is_multiple'].get('cache_to_list', None), False)
|
yield (category, cat['is_multiple'].get('cache_to_list', None), False)
|
||||||
elif (cat['datatype'] == 'composite' and
|
elif (cat['datatype'] == 'composite' and
|
||||||
cat['display'].get('make_category', False)):
|
cat['display'].get('make_category', False)):
|
||||||
@ -102,8 +101,11 @@ def get_categories(dbcache, sort='name', book_ids=None, icon_map=None):
|
|||||||
book_ids = frozenset(book_ids) if book_ids else book_ids
|
book_ids = frozenset(book_ids) if book_ids else book_ids
|
||||||
for category, is_multiple, is_composite in find_categories(fm):
|
for category, is_multiple, is_composite in find_categories(fm):
|
||||||
tag_class = create_tag_class(category, fm, icon_map)
|
tag_class = create_tag_class(category, fm, icon_map)
|
||||||
cats = dbcache.fields[category].get_categories(
|
if category == 'news':
|
||||||
tag_class, book_rating_map, lang_map, book_ids)
|
cats = dbcache.fields['tags'].get_news_category(tag_class, book_ids)
|
||||||
|
else:
|
||||||
|
cats = dbcache.fields[category].get_categories(
|
||||||
|
tag_class, book_rating_map, lang_map, book_ids)
|
||||||
if sort == 'popularity':
|
if sort == 'popularity':
|
||||||
key=attrgetter('count')
|
key=attrgetter('count')
|
||||||
elif sort == 'rating':
|
elif sort == 'rating':
|
||||||
|
@ -441,6 +441,34 @@ class SeriesField(ManyToOneField):
|
|||||||
val = self.table.id_map[item_id]
|
val = self.table.id_map[item_id]
|
||||||
return title_sort(val, order=tss, lang=lang)
|
return title_sort(val, order=tss, lang=lang)
|
||||||
|
|
||||||
|
class TagsField(ManyToManyField):
|
||||||
|
|
||||||
|
def get_news_category(self, tag_class, book_ids=None):
|
||||||
|
news_id = None
|
||||||
|
ans = []
|
||||||
|
for item_id, val in self.table.id_map.iteritems():
|
||||||
|
if val == _('News'):
|
||||||
|
news_id = item_id
|
||||||
|
break
|
||||||
|
if news_id is None:
|
||||||
|
return ans
|
||||||
|
|
||||||
|
news_books = self.table.col_book_map[news_id]
|
||||||
|
if book_ids is not None:
|
||||||
|
news_books = news_books.intersection(book_ids)
|
||||||
|
if not news_books:
|
||||||
|
return ans
|
||||||
|
for item_id, item_book_ids in self.table.col_book_map.iteritems():
|
||||||
|
item_book_ids = item_book_ids.intersection(news_books)
|
||||||
|
if item_book_ids:
|
||||||
|
name = self.category_formatter(self.table.id_map[item_id])
|
||||||
|
if name == _('News'):
|
||||||
|
continue
|
||||||
|
c = tag_class(name, id=item_id, sort=name,
|
||||||
|
id_set=item_book_ids, count=len(item_book_ids))
|
||||||
|
ans.append(c)
|
||||||
|
return ans
|
||||||
|
|
||||||
def create_field(name, table):
|
def create_field(name, table):
|
||||||
cls = {
|
cls = {
|
||||||
ONE_ONE : OneToOneField,
|
ONE_ONE : OneToOneField,
|
||||||
@ -455,6 +483,8 @@ def create_field(name, table):
|
|||||||
cls = FormatsField
|
cls = FormatsField
|
||||||
elif name == 'identifiers':
|
elif name == 'identifiers':
|
||||||
cls = IdentifiersField
|
cls = IdentifiersField
|
||||||
|
elif name == 'tags':
|
||||||
|
cls = TagsField
|
||||||
elif table.metadata['datatype'] == 'composite':
|
elif table.metadata['datatype'] == 'composite':
|
||||||
cls = CompositeField
|
cls = CompositeField
|
||||||
elif table.metadata['datatype'] == 'series':
|
elif table.metadata['datatype'] == 'series':
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user