diff --git a/cps/db.py b/cps/db.py index e8a7415d..15032026 100644 --- a/cps/db.py +++ b/cps/db.py @@ -944,16 +944,13 @@ class CalibreDB: def get_typeahead(self, database, query, replace=('', ''), tag_filter=true()): query = query or '' self.create_functions() - # self.session.connection().connection.connection.create_function("lower", 1, lcase) entries = self.session.query(database).filter(tag_filter). \ filter(func.lower(database.name).ilike("%" + query + "%")).all() - # json_dumps = json.dumps([dict(name=escape(r.name.replace(*replace))) for r in entries]) json_dumps = json.dumps([dict(name=r.name.replace(*replace)) for r in entries]) return json_dumps def check_exists_book(self, authr, title): self.create_functions() - # self.session.connection().connection.connection.create_function("lower", 1, lcase) q = list() author_terms = re.split(r'\s*&\s*', authr) for author_term in author_terms: @@ -1111,7 +1108,7 @@ class CalibreDB: .group_by(text('books_languages_link.lang_code')).all() tags = list() for lang in languages: - tag = Category(isoLanguages.get_language_name(get_locale(), lang[0].lang_code), lang[0].lang_code) + tag = Category(isoLanguages.get_language_name(get_locale(), None, lang[0].lang_code), lang[0].lang_code) tags.append([tag, lang[1]]) # Append all books without language to list if not return_all_languages: @@ -1121,7 +1118,7 @@ class CalibreDB: .filter(self.common_filters()) .count()) if no_lang_count: - tags.append([Category(_("None"), "none"), no_lang_count]) + tags.append([Category(_("None"), None, "none"), no_lang_count]) return sorted(tags, key=lambda x: x[0].name.lower(), reverse=reverse_order) else: if not languages: @@ -1175,14 +1172,25 @@ def lcase(s): return s.lower() +def title_sort(title, config): + # calibre sort stuff + title_pat = re.compile(config.config_title_regex, re.IGNORECASE) + match = title_pat.search(title) + if match: + prep = match.group(1) + title = title[len(prep):] + ', ' + prep + return strip_whitespaces(title) + class Category: name = None + sort = None id = None count = None rating = None def __init__(self, name, cat_id, rating=None): self.name = name + self.sort = name self.id = cat_id self.rating = rating self.count = 1 diff --git a/cps/editbooks.py b/cps/editbooks.py index a2c39b9d..218f249d 100644 --- a/cps/editbooks.py +++ b/cps/editbooks.py @@ -1611,7 +1611,7 @@ def add_objects(db_book_object, db_object, db_session, db_type, add_elements): if db_type == 'author': new_element = db_object(add_element, helper.get_sorted_author(add_element.replace('|', ','))) elif db_type == 'series': - new_element = db_object(add_element, add_element) + new_element = db_object(add_element, db.title_sort(add_element, config)) elif db_type == 'custom': new_element = db_object(value=add_element) elif db_type == 'publisher': @@ -1642,7 +1642,7 @@ def create_objects_for_addition(db_element, add_element, db_type): elif db_type == 'series': if db_element.name != add_element: db_element.name = add_element - db_element.sort = add_element + db_element.sort = db.title_sort(add_element, config) elif db_type == 'author': if db_element.name != add_element: db_element.name = add_element diff --git a/cps/search.py b/cps/search.py index dd38fdcf..795f5d02 100644 --- a/cps/search.py +++ b/cps/search.py @@ -258,7 +258,6 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): cc = calibre_db.get_cc_columns(config, filter_config_custom_read=True) calibre_db.create_functions() - # calibre_db.session.connection().connection.connection.create_function("lower", 1, db.lcase) query = calibre_db.generate_linked_query(config.config_read_column, db.Books) q = query.outerjoin(db.books_series_link, db.Books.id == db.books_series_link.c.book)\ .outerjoin(db.Series)\ diff --git a/cps/web.py b/cps/web.py index 961e1df7..f65728ef 100644 --- a/cps/web.py +++ b/cps/web.py @@ -301,7 +301,6 @@ def get_matching_tags(): tag_dict = {'tags': []} q = calibre_db.session.query(db.Books).filter(calibre_db.common_filters(True)) calibre_db.create_functions() - # calibre_db.session.connection().connection.connection.create_function("lower", 1, db.lcase) author_input = request.args.get('authors') or '' title_input = request.args.get('title') or '' include_tag_inputs = request.args.getlist('include_tag') or '' @@ -1026,7 +1025,7 @@ def series_list(): .count()) if no_series_count: entries.append([db.Category(_("None"), "-1"), no_series_count]) - entries = sorted(entries, key=lambda x: x[0].name.lower(), reverse=not order_no) + entries = sorted(entries, key=lambda x: (x[0].sort or x[0].name).lower(), reverse=not order_no) return render_title_template('list.html', entries=entries, folder='web.books_list',