X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/145e56d0df5162f8b57574e5b5656c6354274280..0c9e7e914bc548bee30add46fb6e4aadf6ffb16c:/apps/api/management/commands/mobileinit.py?ds=sidebyside diff --git a/apps/api/management/commands/mobileinit.py b/apps/api/management/commands/mobileinit.py index 8e225f95a..91ee3b624 100755 --- a/apps/api/management/commands/mobileinit.py +++ b/apps/api/management/commands/mobileinit.py @@ -8,12 +8,10 @@ import os.path import re import sqlite3 from django.core.management.base import BaseCommand -from slughifi import char_map from api.helpers import timestamp from api.settings import MOBILE_INIT_DB from catalogue.models import Book, Tag -from catalogue.views import tagged_object_list # this should be somewhere else class Command(BaseCommand): @@ -25,7 +23,9 @@ class Command(BaseCommand): db = init_db(last_checked) for b in Book.objects.all(): add_book(db, b) - for t in Tag.objects.exclude(category__in=('book', 'set', 'theme')): + for t in Tag.objects.exclude( + category__in=('book', 'set', 'theme')).exclude(book_count=0): + # only add non-empty tags add_tag(db, t) db.commit() db.close() @@ -51,26 +51,6 @@ def pretty_size(size): return "%d %s" % (size, unit) -special_marks = {'ż': '|', 'Ż': '|',} -def replace_char(m): - char = m.group() - if char_map.has_key(char): - special = special_marks.get(char, '{') - return char_map[char] + special - else: - return char - -def sortify(value): - """ - Turns Unicode into ASCII-sortable str - - Examples : - - >>> slughifi('aa') < slughifi('a a') < slughifi('ą') < slughifi('b') - True - - """ - if not isinstance(value, unicode): value = unicode(value, 'utf-8') @@ -91,7 +71,8 @@ def init_db(last_checked): schema = """ CREATE TABLE book ( id INTEGER PRIMARY KEY, - title VARCHAR, + title VARCHAR, + cover VARCHAR, html_file VARCHAR, html_file_size INTEGER, parent INTEGER, @@ -116,10 +97,6 @@ CREATE INDEX IF NOT EXISTS tag_name_index ON tag (name); CREATE INDEX IF NOT EXISTS tag_category_index ON tag (category); CREATE INDEX IF NOT EXISTS tag_sort_key_index ON tag (sort_key); -CREATE TABLE book_tag (book INTEGER, tag INTEGER); -CREATE INDEX IF NOT EXISTS book_tag_book ON book_tag (book); -CREATE INDEX IF NOT EXISTS book_tag_tag_index ON book_tag (tag); - CREATE TABLE state (last_checked INTEGER); """ @@ -130,7 +107,8 @@ CREATE TABLE state (last_checked INTEGER); def current(last_checked): target = os.path.join(MOBILE_INIT_DB, 'initial.db') - os.unlink(target) + if os.path.lexists(target): + os.unlink(target) os.symlink( 'initial.db-%d' % last_checked, target, @@ -140,9 +118,9 @@ def current(last_checked): book_sql = """ INSERT INTO book - (id, title, html_file, html_file_size, parent, parent_number, sort_key, pretty_size, authors) + (id, title, cover, html_file, html_file_size, parent, parent_number, sort_key, pretty_size, authors) VALUES - (:id, :title, :html_file, :html_file_size, :parent, :parent_number, :sort_key, :size_str, :authors); + (:id, :title, :cover, :html_file, :html_file_size, :parent, :parent_number, :sort_key, :size_str, :authors); """ book_tag_sql = "INSERT INTO book_tag (book, tag) VALUES (:book, :tag);" tag_sql = """ @@ -167,9 +145,13 @@ def add_book(db, book): html_file_size = book.html_file.size else: html_file = html_file_size = None - parent = book.parent + if book.cover: + cover = book.cover.url + else: + cover = None + parent = book.parent_id parent_number = book.parent_number - sort_key = sortify(title) + sort_key = book.sort_key size_str = pretty_size(html_file_size) authors = ", ".join(t.name for t in book.tags.filter(category='author')) db.execute(book_sql, locals()) @@ -177,13 +159,11 @@ def add_book(db, book): def add_tag(db, tag): id = tag.id - category = categories[tag.category] + # category = categories[tag.category] # localized names here? + category = tag.category name = tag.name - sort_key = sortify(tag.sort_key) + sort_key = tag.sort_key - books = list(tagged_object_list(None, [tag], api=True)) + books = Book.tagged_top_level([tag]) book_ids = ','.join(str(b.id) for b in books) db.execute(tag_sql, locals()) - - for b in books: - db.execute(book_tag_sql, {'book': b.id, 'tag': tag.id})