From 5709ad98f0e529a37e858931e1ec2f37c3875dcf Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Fri, 19 May 2017 16:34:48 +0200 Subject: [PATCH 01/16] prevent adding new images with existing sources --- apps/cover/forms.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/cover/forms.py b/apps/cover/forms.py index 36010c75..7306b33a 100755 --- a/apps/cover/forms.py +++ b/apps/cover/forms.py @@ -36,12 +36,21 @@ class ImageAddForm(forms.ModelForm): % {'url': img.get_absolute_url()})) return cl + def clean_source_url(self): + source_url = self.cleaned_data['source_url'] or None + if source_url is not None: + same_source = Image.objects.filter(source_url=source_url) + if same_source: + raise forms.ValidationError(mark_safe( + ugettext('Image already in repository' + % same_source.first().get_absolute_url()))) + def clean(self): cleaned_data = super(ImageAddForm, self).clean() download_url = cleaned_data.get('download_url', None) uploaded_file = cleaned_data.get('file', None) if not download_url and not uploaded_file: - raise forms.ValidationError('No image specified') + raise forms.ValidationError(ugettext('No image specified')) if download_url: image_data = URLOpener().open(download_url).read() width, height = PILImage.open(StringIO(image_data)).size @@ -49,7 +58,7 @@ class ImageAddForm(forms.ModelForm): width, height = PILImage.open(uploaded_file.file).size min_width, min_height = settings.MIN_COVER_SIZE if width < min_width or height < min_height: - raise forms.ValidationError('Image too small: %sx%s, minimal dimensions %sx%s' % + raise forms.ValidationError(ugettext('Image too small: %sx%s, minimal dimensions %sx%s') % (width, height, min_width, min_height)) return cleaned_data @@ -66,7 +75,7 @@ class ImageEditForm(forms.ModelForm): width, height = PILImage.open(uploaded_file.file).size min_width, min_height = settings.MIN_COVER_SIZE if width < min_width or height < min_height: - raise forms.ValidationError('Image too small: %sx%s, minimal dimensions %sx%s' % + raise forms.ValidationError(ugettext('Image too small: %sx%s, minimal dimensions %sx%s') % (width, height, min_width, min_height)) -- 2.20.1 From eab7b3e180b32ddfd25db49fc00070cb8084c714 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Mon, 22 May 2017 16:31:17 +0200 Subject: [PATCH 02/16] skip books with isbn metadata --- apps/catalogue/management/commands/insert_isbn.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/catalogue/management/commands/insert_isbn.py b/apps/catalogue/management/commands/insert_isbn.py index e9727daa..7548cb1f 100644 --- a/apps/catalogue/management/commands/insert_isbn.py +++ b/apps/catalogue/management/commands/insert_isbn.py @@ -69,6 +69,7 @@ class Command(BaseCommand): csvfile.close() for slug, isbn_list in isbn_lists.iteritems(): + print 'processing %s' % slug book = Book.objects.get(dc_slug=slug) chunk = book.chunk_set.first() old_head = chunk.head @@ -76,7 +77,8 @@ class Command(BaseCommand): tree = etree.fromstring(src) isbn_node = tree.find('.//' + DCNS("relation.hasFormat")) if isbn_node is not None: - raise Exception('%s already contains ISBN metadata!' % slug) + print '%s already contains ISBN metadata, skipping' % slug + continue desc = tree.find(".//" + RDFNS("Description")) for format, isbn in isbn_list: for template in ISBN_TEMPLATES: -- 2.20.1 From dab276bc0a4bdb890d7a356db21abf40fe7311bb Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Tue, 23 May 2017 11:48:51 +0200 Subject: [PATCH 03/16] get xml by dc_slug --- apps/catalogue/urls.py | 1 + apps/catalogue/views.py | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/apps/catalogue/urls.py b/apps/catalogue/urls.py index 7989d2ad..164ec1b5 100644 --- a/apps/catalogue/urls.py +++ b/apps/catalogue/urls.py @@ -37,6 +37,7 @@ urlpatterns = patterns('catalogue.views', permission_required('catalogue.change_book')(GalleryView.as_view()), name="catalogue_book_gallery"), url(r'^book/(?P[^/]+)/xml$', 'book_xml', name="catalogue_book_xml"), + url(r'^book/dc/(?P[^/]+)/xml$', 'book_xml_dc', name="catalogue_book_xml_dc"), url(r'^book/(?P[^/]+)/txt$', 'book_txt', name="catalogue_book_txt"), url(r'^book/(?P[^/]+)/html$', 'book_html', name="catalogue_book_html"), url(r'^book/(?P[^/]+)/epub$', 'book_epub', name="catalogue_book_epub"), diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index b30297cd..e71b3495 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -204,18 +204,27 @@ def upload(request): }) -@never_cache -def book_xml(request, slug): - book = get_object_or_404(Book, slug=slug) +def serve_xml(request, book, slug): if not book.accessible(request): return HttpResponseForbidden("Not authorized.") xml = book.materialize() - response = http.HttpResponse(xml, content_type='application/xml') response['Content-Disposition'] = 'attachment; filename=%s.xml' % slug return response +@never_cache +def book_xml(request, slug): + book = get_object_or_404(Book, slug=slug) + return serve_xml(request, book, slug) + + +@never_cache +def book_xml_dc(request, slug): + book = get_object_or_404(Book, dc_slug=slug) + return serve_xml(request, book, slug) + + @never_cache def book_txt(request, slug): book = get_object_or_404(Book, slug=slug) -- 2.20.1 From 8ac560f9402b05f2811bf8207338110f01e2e576 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Tue, 23 May 2017 12:19:33 +0200 Subject: [PATCH 04/16] skip *_o.jpg when updating covers --- apps/cover/management/commands/refresh_covers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/cover/management/commands/refresh_covers.py b/apps/cover/management/commands/refresh_covers.py index 2c78db9b..1097a754 100644 --- a/apps/cover/management/commands/refresh_covers.py +++ b/apps/cover/management/commands/refresh_covers.py @@ -21,8 +21,8 @@ class Command(BaseCommand): def handle(self, *args, **options): from_id = options.get('from_id', 1) for image in Image.objects.filter(id__gte=from_id).exclude(book=None).order_by('id'): - print image.id - if image.source_url and 'flickr.com' in image.source_url: + if image.source_url and 'flickr.com' in image.source_url and not image.download_url.endswith('_o.jpg'): + print image.id try: flickr_data = get_flickr_data(image.source_url) print flickr_data -- 2.20.1 From 2295af1947e8fe5777120462ea174ec1b044ebdb Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Tue, 23 May 2017 12:27:14 +0200 Subject: [PATCH 05/16] fix/refactor refresh covers --- .../management/commands/refresh_covers.py | 47 ++++++++++--------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/apps/cover/management/commands/refresh_covers.py b/apps/cover/management/commands/refresh_covers.py index 1097a754..cc0ef31c 100644 --- a/apps/cover/management/commands/refresh_covers.py +++ b/apps/cover/management/commands/refresh_covers.py @@ -20,28 +20,29 @@ class Command(BaseCommand): def handle(self, *args, **options): from_id = options.get('from_id', 1) - for image in Image.objects.filter(id__gte=from_id).exclude(book=None).order_by('id'): - if image.source_url and 'flickr.com' in image.source_url and not image.download_url.endswith('_o.jpg'): - print image.id + images = Image.objects.filter(id__gte=from_id).exclude(book=None).order_by('id') + images = images.filter(source_url__contains='flickr.com').exclude(download_url__endswith='_o.jpg') + for image in images: + print image.id + try: + flickr_data = get_flickr_data(image.source_url) + print flickr_data + except FlickrError as e: + print 'Flickr analysis failed: %s' % e + else: + flickr_url = flickr_data['download_url'] + if flickr_url != image.download_url: + same_url = Image.objects.filter(download_url=flickr_url) + if same_url: + print 'Download url already present in image %s' % same_url.get().id + continue try: - flickr_data = get_flickr_data(image.source_url) - print flickr_data - except FlickrError as e: - print 'Flickr analysis failed: %s' % e + t = URLOpener().open(flickr_url).read() + except urllib.URLError: + print 'Broken download url' + except IOError: + print 'Connection failed' else: - flickr_url = flickr_data['download_url'] - if flickr_url != image.download_url: - same_url = Image.objects.filter(download_url=flickr_url) - if same_url: - print 'Download url already present in image %s' % same_url.get().id - continue - try: - t = URLOpener().open(flickr_url).read() - except urllib.URLError: - print 'Broken download url' - except IOError: - print 'Connection failed' - else: - image.download_url = flickr_url - image.file.save(image.file.name, ContentFile(t)) - image.save() + image.download_url = flickr_url + image.file.save(image.file.name, ContentFile(t)) + image.save() -- 2.20.1 From d8990e1ab64fe3bf453d06fab8e983d25f2df2c4 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Tue, 23 May 2017 15:50:11 +0200 Subject: [PATCH 06/16] allow download xml for non-public books (tmp?) --- apps/catalogue/views.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index e71b3495..c6ae4197 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -205,9 +205,7 @@ def upload(request): def serve_xml(request, book, slug): - if not book.accessible(request): - return HttpResponseForbidden("Not authorized.") - xml = book.materialize() + xml = book.materialize(publishable=True) response = http.HttpResponse(xml, content_type='application/xml') response['Content-Disposition'] = 'attachment; filename=%s.xml' % slug return response @@ -216,11 +214,14 @@ def serve_xml(request, book, slug): @never_cache def book_xml(request, slug): book = get_object_or_404(Book, slug=slug) + if not book.accessible(request): + return HttpResponseForbidden("Not authorized.") return serve_xml(request, book, slug) @never_cache def book_xml_dc(request, slug): + # no permission check, because non-public books book = get_object_or_404(Book, dc_slug=slug) return serve_xml(request, book, slug) -- 2.20.1 From 8906541ccda592d4e3c3d21618fb34f662916aa0 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Fri, 26 May 2017 12:12:49 +0200 Subject: [PATCH 07/16] don't allow download xml for non-public books --- apps/catalogue/views.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index c6ae4197..e6f6cca7 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -205,6 +205,8 @@ def upload(request): def serve_xml(request, book, slug): + if not book.accessible(request): + return HttpResponseForbidden("Not authorized.") xml = book.materialize(publishable=True) response = http.HttpResponse(xml, content_type='application/xml') response['Content-Disposition'] = 'attachment; filename=%s.xml' % slug @@ -214,14 +216,11 @@ def serve_xml(request, book, slug): @never_cache def book_xml(request, slug): book = get_object_or_404(Book, slug=slug) - if not book.accessible(request): - return HttpResponseForbidden("Not authorized.") return serve_xml(request, book, slug) @never_cache def book_xml_dc(request, slug): - # no permission check, because non-public books book = get_object_or_404(Book, dc_slug=slug) return serve_xml(request, book, slug) -- 2.20.1 From 8a57885f70d87d9f79b0c0d47dc0f683d434b734 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Fri, 26 May 2017 13:22:33 +0200 Subject: [PATCH 08/16] slightly improve book.publish --- apps/catalogue/models/book.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py index 84c05dbd..42a4d1fc 100755 --- a/apps/catalogue/models/book.py +++ b/apps/catalogue/models/book.py @@ -428,8 +428,8 @@ class Book(models.Model): """ self.assert_publishable() changes = self.get_current_changes(publishable=True) - book_xml = self.materialize(changes=changes) if not fake: + book_xml = self.materialize(changes=changes) data = {"book_xml": book_xml} if host: data['gallery_url'] = host + self.gallery_url() @@ -438,6 +438,9 @@ class Book(models.Model): br = BookPublishRecord.objects.create(book=self, user=user) for c in changes: ChunkPublishRecord.objects.create(book_record=br, change=c) + if not self.public: + self.public = True + self.save() post_publish.send(sender=br) def latex_dir(self): -- 2.20.1 From 0d19a23e6c4fb4c164e074ca47ff16d9b65fcb17 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Fri, 30 Jun 2017 14:43:47 +0200 Subject: [PATCH 09/16] update librarian --- lib/librarian | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/librarian b/lib/librarian index 43fe93ca..dd6f1372 160000 --- a/lib/librarian +++ b/lib/librarian @@ -1 +1 @@ -Subproject commit 43fe93caf99d223acd1defc31afdfda6b596551b +Subproject commit dd6f13725963dd34f96ebbf7688461ab1ce4466c -- 2.20.1 From 440e003c328f12462a1ca8b512fbeb4bb5ad903a Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Fri, 30 Jun 2017 15:11:37 +0200 Subject: [PATCH 10/16] WYSIWYG for subscript tag --- apps/toolbar/fixtures/initial_toolbar.yaml | 11 +++++++++++ redakcja/static/xsl/wl2html_client.xsl | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/apps/toolbar/fixtures/initial_toolbar.yaml b/apps/toolbar/fixtures/initial_toolbar.yaml index 52799ff8..c70180ef 100644 --- a/apps/toolbar/fixtures/initial_toolbar.yaml +++ b/apps/toolbar/fixtures/initial_toolbar.yaml @@ -424,6 +424,17 @@ tooltip: '' model: toolbar.button pk: 48 +- fields: + accesskey: '' + group: [15] + label: indeks dolny + link: '' + params: '{"tag": "indeks_dolny"}' + scriptlet: insert_tag + slug: indeks-dolny + tooltip: '' + model: toolbar.button + pk: 49 - fields: accesskey: '' group: [29] diff --git a/redakcja/static/xsl/wl2html_client.xsl b/redakcja/static/xsl/wl2html_client.xsl index f5f4e04d..b6029dbc 100644 --- a/redakcja/static/xsl/wl2html_client.xsl +++ b/redakcja/static/xsl/wl2html_client.xsl @@ -637,6 +637,16 @@ + + + + + + + + + + -- 2.20.1 From 987b8f97cc92737294840efbfb9b3c54ff334b66 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Thu, 27 Jul 2017 11:42:23 +0200 Subject: [PATCH 14/16] increased word spacing in WL XML --- apps/toolbar/fixtures/initial_toolbar.yaml | 13 ++++++++++++- lib/librarian | 2 +- redakcja/static/css/book.css | 6 ++++++ redakcja/static/css/html.css | 5 +++++ redakcja/static/css/html_print.css | 6 ++++++ redakcja/static/js/wiki/view_editor_wysiwyg.js | 2 +- redakcja/static/js/wiki/xslt.js | 2 +- redakcja/static/xsl/wl2html_client.xsl | 2 +- 8 files changed, 33 insertions(+), 5 deletions(-) diff --git a/apps/toolbar/fixtures/initial_toolbar.yaml b/apps/toolbar/fixtures/initial_toolbar.yaml index 5766ec73..bc2ea1c2 100644 --- a/apps/toolbar/fixtures/initial_toolbar.yaml +++ b/apps/toolbar/fixtures/initial_toolbar.yaml @@ -435,6 +435,17 @@ tooltip: '' model: toolbar.button pk: 49 +- fields: + accesskey: '' + group: [15] + label: "wi\u0119ksze odst\u0119py" + link: '' + params: '{"tag": "wieksze_odstepy"}' + scriptlet: insert_tag + slug: wieksze-odstepy + tooltip: "wi\u0119ksze odst\u0119py mi\u0119dzy s\u0142owami" + model: toolbar.button + pk: 50 - fields: accesskey: '' group: [29] @@ -721,7 +732,7 @@ params: '{"tag": "wers_do_prawej"}' scriptlet: insert_tag slug: wers-do-prawej - tooltip: "wers wyrównany do prawej" + tooltip: "wers wyr\xf3wnany do prawej" model: toolbar.button pk: 109 - fields: diff --git a/lib/librarian b/lib/librarian index fee2ad60..a4af74c1 160000 --- a/lib/librarian +++ b/lib/librarian @@ -1 +1 @@ -Subproject commit fee2ad602df51da7201802a325c1d38def5263ce +Subproject commit a4af74c13b9139bb75ce9e6d40d743f58089b2ef diff --git a/redakcja/static/css/book.css b/redakcja/static/css/book.css index c68e46ec..89edfdf2 100644 --- a/redakcja/static/css/book.css +++ b/redakcja/static/css/book.css @@ -394,6 +394,12 @@ em.person { font-variant: small-caps; } +em.wieksze-odstepy +{ + font-style: normal; + word-spacing: 1em; +} + .verse:after { content: "\feff"; } diff --git a/redakcja/static/css/html.css b/redakcja/static/css/html.css index 01c623ad..003d7d23 100644 --- a/redakcja/static/css/html.css +++ b/redakcja/static/css/html.css @@ -302,6 +302,11 @@ font-variant: small-caps; } +em.wieksze_odstepy { + font-style: normal; + word-spacing: 1em; +} + .htmlview .parse-warning { display: block; font-size: 10pt; diff --git a/redakcja/static/css/html_print.css b/redakcja/static/css/html_print.css index 63a2d439..2cb6d412 100644 --- a/redakcja/static/css/html_print.css +++ b/redakcja/static/css/html_print.css @@ -234,3 +234,9 @@ font-style: normal; font-variant: small-caps; } + +.htmlview em.wieksze-odstepy +{ + font-style: normal; + word-spacing: 1em; +} diff --git a/redakcja/static/js/wiki/view_editor_wysiwyg.js b/redakcja/static/js/wiki/view_editor_wysiwyg.js index 4353848e..3ec4f701 100644 --- a/redakcja/static/js/wiki/view_editor_wysiwyg.js +++ b/redakcja/static/js/wiki/view_editor_wysiwyg.js @@ -206,7 +206,7 @@ if($('div.html-editarea textarea')[0]) { var specialCharsContainer = $(""); - var specialChars = ['Ą','ą','Ć','ć','Ę','ę','Ł','ł','Ń','ń','Ó','ó','Ś','ś','Ż','ż','Ź','ź','Á','á','À','à', + var specialChars = [' ', 'Ą','ą','Ć','ć','Ę','ę','Ł','ł','Ń','ń','Ó','ó','Ś','ś','Ż','ż','Ź','ź','Á','á','À','à', 'Â','â','Ä','ä','Å','å','Ā','ā','Ă','ă','Ã','ã', 'Æ','æ','Ç','ç','Č','č','Ċ','ċ','Ď','ď','É','é','È','è', 'Ê','ê','Ë','ë','Ē','ē','Ě','ě','Ġ','ġ','Ħ','ħ','Í','í','Î','î', diff --git a/redakcja/static/js/wiki/xslt.js b/redakcja/static/js/wiki/xslt.js index b4844a56..1ddd7325 100644 --- a/redakcja/static/js/wiki/xslt.js +++ b/redakcja/static/js/wiki/xslt.js @@ -17,7 +17,7 @@ function withStylesheets(code_block, onError) if (!xml2htmlStylesheet) { $.blockUI({message: 'Ładowanie arkuszy stylów...'}); $.ajax({ - url: STATIC_URL + 'xsl/wl2html_client.xsl?20170726', + url: STATIC_URL + 'xsl/wl2html_client.xsl?20170727', dataType: 'xml', timeout: 10000, success: function(data) { diff --git a/redakcja/static/xsl/wl2html_client.xsl b/redakcja/static/xsl/wl2html_client.xsl index 09b6b793..33413afd 100644 --- a/redakcja/static/xsl/wl2html_client.xsl +++ b/redakcja/static/xsl/wl2html_client.xsl @@ -627,7 +627,7 @@ - + -- 2.20.1 From 074893b70aa3979c598ed306d4cc0f21abdf3458 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Fri, 4 Aug 2017 17:17:24 +0200 Subject: [PATCH 15/16] update table style --- lib/librarian | 2 +- redakcja/static/css/book.css | 9 +++++++++ redakcja/static/css/html.css | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/librarian b/lib/librarian index a4af74c1..c87453a1 160000 --- a/lib/librarian +++ b/lib/librarian @@ -1 +1 @@ -Subproject commit a4af74c13b9139bb75ce9e6d40d743f58089b2ef +Subproject commit c87453a1da79443d74132398e7dd1aaa83140fee diff --git a/redakcja/static/css/book.css b/redakcja/static/css/book.css index 89edfdf2..6d78f79f 100644 --- a/redakcja/static/css/book.css +++ b/redakcja/static/css/book.css @@ -15,6 +15,15 @@ a { max-width: 36em; } +table { + border-collapse: collapse; + width: 100%; +} + +table.border, table.border td, table.border th { + border: 1px solid black; +} + /* ================================== */ /* = Header with logo and menu = */ /* ================================== */ diff --git a/redakcja/static/css/html.css b/redakcja/static/css/html.css index 003d7d23..6439a648 100644 --- a/redakcja/static/css/html.css +++ b/redakcja/static/css/html.css @@ -302,7 +302,7 @@ font-variant: small-caps; } -em.wieksze_odstepy { +.htmlview em.wieksze_odstepy { font-style: normal; word-spacing: 1em; } -- 2.20.1 From 6fdfad14e49e9b8fc4e01c71317fe98ff9c10574 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Mon, 7 Aug 2017 15:24:47 +0200 Subject: [PATCH 16/16] add option to select cover class in metadata --- apps/cover/views.py | 8 ++++---- lib/librarian | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/cover/views.py b/apps/cover/views.py index 25033c18..f493392d 100644 --- a/apps/cover/views.py +++ b/apps/cover/views.py @@ -25,7 +25,7 @@ def preview(request, book, chunk=None, rev=None): If rev is not given, use publishable version. """ from PIL import Image - from librarian.cover import DefaultEbookCover + from librarian.cover import make_cover from librarian.dcparser import BookInfo chunk = Chunk.get(book, chunk) @@ -44,7 +44,7 @@ def preview(request, book, chunk=None, rev=None): info = BookInfo.from_string(xml) except: return HttpResponseRedirect(os.path.join(settings.STATIC_URL, "img/sample_cover.png")) - cover = DefaultEbookCover(info) + cover = make_cover(info) response = HttpResponse(content_type=cover.mime_type()) image = cover.image().resize(PREVIEW_SIZE, Image.ANTIALIAS) image.save(response, cover.format) @@ -58,7 +58,7 @@ def preview_from_xml(request): from PIL import Image from os import makedirs from lxml import etree - from librarian.cover import DefaultEbookCover + from librarian.cover import make_cover from librarian.dcparser import BookInfo xml = request.POST['xml'] @@ -67,7 +67,7 @@ def preview_from_xml(request): except: return HttpResponse(os.path.join(settings.STATIC_URL, "img/sample_cover.png")) coverid = sha1(etree.tostring(info.to_etree())).hexdigest() - cover = DefaultEbookCover(info) + cover = make_cover(info) cover_dir = 'cover/preview' try: diff --git a/lib/librarian b/lib/librarian index c87453a1..40110cdb 160000 --- a/lib/librarian +++ b/lib/librarian @@ -1 +1 @@ -Subproject commit c87453a1da79443d74132398e7dd1aaa83140fee +Subproject commit 40110cdb916b003da032cb350fad27bd22f64602 -- 2.20.1