mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Make author sort changes backward compatible
This commit is contained in:
parent
f712c3cc3b
commit
54af6259bc
@ -28,10 +28,14 @@ def authors_to_string(authors):
|
|||||||
else:
|
else:
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
_bracket_pat = re.compile(r'[\[({].*?[})\]]')
|
||||||
def author_to_author_sort(author):
|
def author_to_author_sort(author):
|
||||||
|
if not author:
|
||||||
|
return ''
|
||||||
method = tweaks['author_sort_copy_method']
|
method = tweaks['author_sort_copy_method']
|
||||||
if method == 'copy' or (method == 'comma' and ',' in author):
|
if method == 'copy' or (method == 'comma' and ',' in author):
|
||||||
return author
|
return author
|
||||||
|
author = _bracket_pat.sub('', author).strip()
|
||||||
tokens = author.split()
|
tokens = author.split()
|
||||||
tokens = tokens[-1:] + tokens[:-1]
|
tokens = tokens[-1:] + tokens[:-1]
|
||||||
if len(tokens) > 1:
|
if len(tokens) > 1:
|
||||||
|
@ -136,6 +136,23 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
self.initialize_dynamic()
|
self.initialize_dynamic()
|
||||||
|
|
||||||
def initialize_dynamic(self):
|
def initialize_dynamic(self):
|
||||||
|
self.conn.executescript('''
|
||||||
|
DROP TRIGGER IF EXISTS author_insert_trg;
|
||||||
|
CREATE TEMP TRIGGER author_insert_trg
|
||||||
|
AFTER INSERT ON authors
|
||||||
|
BEGIN
|
||||||
|
UPDATE authors SET sort=author_to_author_sort(NEW.name) WHERE id=NEW.id;
|
||||||
|
END;
|
||||||
|
DROP TRIGGER IF EXISTS author_update_trg;
|
||||||
|
CREATE TEMP TRIGGER author_update_trg
|
||||||
|
BEFORE UPDATE ON authors
|
||||||
|
BEGIN
|
||||||
|
UPDATE authors SET sort=author_to_author_sort(NEW.name)
|
||||||
|
WHERE id=NEW.id AND name <> NEW.name;
|
||||||
|
END;
|
||||||
|
''')
|
||||||
|
self.conn.execute(
|
||||||
|
'UPDATE authors SET sort=author_to_author_sort(name) WHERE sort IS NULL')
|
||||||
self.conn.executescript(u'''
|
self.conn.executescript(u'''
|
||||||
CREATE TEMP VIEW IF NOT EXISTS tag_browser_news AS SELECT DISTINCT
|
CREATE TEMP VIEW IF NOT EXISTS tag_browser_news AS SELECT DISTINCT
|
||||||
id,
|
id,
|
||||||
|
@ -385,28 +385,5 @@ class SchemaUpgrade(object):
|
|||||||
if table.startswith('custom_column_') and link_table in tables:
|
if table.startswith('custom_column_') and link_table in tables:
|
||||||
create_cust_tag_browser_view(table, link_table)
|
create_cust_tag_browser_view(table, link_table)
|
||||||
|
|
||||||
from calibre.ebooks.metadata import author_to_author_sort
|
self.conn.execute('UPDATE authors SET sort=author_to_author_sort(name)')
|
||||||
|
|
||||||
aut = self.conn.get('SELECT id, name FROM authors');
|
|
||||||
records = []
|
|
||||||
for (id, author) in aut:
|
|
||||||
records.append((id, author.replace('|', ',')))
|
|
||||||
for id,author in records:
|
|
||||||
self.conn.execute('UPDATE authors SET sort=? WHERE id=?',
|
|
||||||
(author_to_author_sort(author.replace('|', ',')).strip(), id))
|
|
||||||
self.conn.commit()
|
|
||||||
self.conn.executescript('''
|
|
||||||
DROP TRIGGER IF EXISTS author_insert_trg;
|
|
||||||
CREATE TRIGGER author_insert_trg
|
|
||||||
AFTER INSERT ON authors
|
|
||||||
BEGIN
|
|
||||||
UPDATE authors SET sort=author_to_author_sort(NEW.name) WHERE id=NEW.id;
|
|
||||||
END;
|
|
||||||
DROP TRIGGER IF EXISTS author_update_trg;
|
|
||||||
CREATE TRIGGER author_update_trg
|
|
||||||
BEFORE UPDATE ON authors
|
|
||||||
BEGIN
|
|
||||||
UPDATE authors SET sort=author_to_author_sort(NEW.name)
|
|
||||||
WHERE id=NEW.id AND name <> NEW.name;
|
|
||||||
END;
|
|
||||||
''')
|
|
||||||
|
@ -94,6 +94,9 @@ class Connection(sqlite.Connection):
|
|||||||
return ans[0]
|
return ans[0]
|
||||||
return ans.fetchall()
|
return ans.fetchall()
|
||||||
|
|
||||||
|
def _author_to_author_sort(x):
|
||||||
|
if not x: return ''
|
||||||
|
return author_to_author_sort(x.replace('|', ','))
|
||||||
|
|
||||||
class DBThread(Thread):
|
class DBThread(Thread):
|
||||||
|
|
||||||
@ -121,7 +124,7 @@ class DBThread(Thread):
|
|||||||
else:
|
else:
|
||||||
self.conn.create_function('title_sort', 1, title_sort)
|
self.conn.create_function('title_sort', 1, title_sort)
|
||||||
self.conn.create_function('author_to_author_sort', 1,
|
self.conn.create_function('author_to_author_sort', 1,
|
||||||
lambda x: author_to_author_sort(x.replace('|', ',')))
|
_author_to_author_sort)
|
||||||
self.conn.create_function('uuid4', 0, lambda : str(uuid.uuid4()))
|
self.conn.create_function('uuid4', 0, lambda : str(uuid.uuid4()))
|
||||||
# Dummy functions for dynamically created filters
|
# Dummy functions for dynamically created filters
|
||||||
self.conn.create_function('books_list_filter', 1, lambda x: 1)
|
self.conn.create_function('books_list_filter', 1, lambda x: 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user