コード例 #1
0
ファイル: categories.py プロジェクト: qykth-git/calibre
def sort_key_for_name_and_first_letter(x):
    v1 = icu_upper(x.sort or x.name)
    v2 = v1 or ' '
    # The idea is that '9999999999' is larger than any digit so all digits
    # will sort in front. Non-digits will sort according to their ICU first letter
    c = v2[0]
    return (c if numeric_collation and c.isdigit() else '9999999999',
            collation_order(v2), sort_key(v1))
コード例 #2
0
ファイル: categories.py プロジェクト: ZRhinoceros/calibre
def sort_categories(items, sort, first_letter_sort=False):
    if sort == "popularity":
        key = lambda x: (-getattr(x, "count", 0), sort_key(x.sort or x.name))
    elif sort == "rating":
        key = lambda x: (-getattr(x, "avg_rating", 0.0), sort_key(x.sort or x.name))
    else:
        if first_letter_sort:
            key = lambda x: (collation_order(icu_upper(x.sort or x.name or " ")), sort_key(x.sort or x.name))
        else:
            key = lambda x: sort_key(x.sort or x.name)
    items.sort(key=key)
    return items
コード例 #3
0
def sort_categories(items, sort, first_letter_sort=False):
    if sort == 'popularity':
        key=lambda x:(-getattr(x, 'count', 0), sort_key(x.sort or x.name))
    elif sort == 'rating':
        key=lambda x:(-getattr(x, 'avg_rating', 0.0), sort_key(x.sort or x.name))
    else:
        if first_letter_sort:
            key=lambda x:(collation_order(icu_upper(x.sort or x.name or ' ')),
                          sort_key(x.sort or x.name))
        else:
            key=lambda x:sort_key(x.sort or x.name)
    items.sort(key=key)
    return items
コード例 #4
0
ファイル: metadata.py プロジェクト: PERCE-NEIGE/Calibribook
def build_first_letter_list(category_items):
    # Build a list of 'equal' first letters by noticing changes
    # in ICU's 'ordinal' for the first letter. In this case, the
    # first letter can actually be more than one letter long.
    cl_list = [None] * len(category_items)
    last_ordnum = 0
    last_c = ' '
    for idx, tag in enumerate(category_items):
        if not tag.sort:
            c = ' '
        else:
            c = icu_upper(tag.sort)
        ordnum, ordlen = collation_order(c)
        if last_ordnum != ordnum:
            last_c = c[0:ordlen]
            last_ordnum = ordnum
        cl_list[idx] = last_c
    return cl_list
コード例 #5
0
            new_cats['.'.join(comps)] = user_cats[k]
    try:
        if new_cats != user_cats:
            dbcache.set_pref('user_categories', new_cats)
    except:
        pass
    return new_cats


category_sort_keys = {True:{}, False: {}}
category_sort_keys[True]['popularity'] = category_sort_keys[False]['popularity'] = \
    lambda x:(-getattr(x, 'count', 0), sort_key(x.sort or x.name))
category_sort_keys[True]['rating'] = category_sort_keys[False]['rating'] = \
    lambda x:(-getattr(x, 'avg_rating', 0.0), sort_key(x.sort or x.name))
category_sort_keys[True]['name'] = \
    lambda x:(collation_order(icu_upper(x.sort or x.name or ' ')), sort_key(x.sort or x.name))
category_sort_keys[False]['name'] = \
    lambda x:sort_key(x.sort or x.name)


def get_categories(dbcache, sort='name', book_ids=None, first_letter_sort=False):
    if sort not in CATEGORY_SORTS:
        raise ValueError('sort ' + sort + ' not a valid value')

    fm = dbcache.field_metadata
    book_rating_map = dbcache.fields['rating'].book_value_map
    lang_map = dbcache.fields['languages'].book_value_map

    categories = {}
    book_ids = frozenset(book_ids) if book_ids else book_ids
    pm_cache = {}
コード例 #6
0
ファイル: categories.py プロジェクト: MarioJC/calibre
            new_cats['.'.join(comps)] = user_cats[k]
    try:
        if new_cats != user_cats:
            dbcache.set_pref('user_categories', new_cats)
    except:
        pass
    return new_cats


category_sort_keys = {True:{}, False: {}}
category_sort_keys[True]['popularity'] = category_sort_keys[False]['popularity'] = \
    lambda x:(-getattr(x, 'count', 0), sort_key(x.sort or x.name))
category_sort_keys[True]['rating'] = category_sort_keys[False]['rating'] = \
    lambda x:(-getattr(x, 'avg_rating', 0.0), sort_key(x.sort or x.name))
category_sort_keys[True]['name'] = \
    lambda x:(collation_order(icu_upper(x.sort or x.name or ' ')), sort_key(x.sort or x.name))
category_sort_keys[False]['name'] = \
    lambda x:sort_key(x.sort or x.name)


def get_categories(dbcache, sort='name', book_ids=None, first_letter_sort=False):
    if sort not in CATEGORY_SORTS:
        raise ValueError('sort ' + sort + ' not a valid value')

    fm = dbcache.field_metadata
    book_rating_map = dbcache.fields['rating'].book_value_map
    lang_map = dbcache.fields['languages'].book_value_map

    categories = {}
    book_ids = frozenset(book_ids) if book_ids else book_ids
    pm_cache = {}