diff --git a/README.md b/README.md index d76ad9f3490f8847f921dfd1e52c71b9738acd0a..e0c66a74a9047a582f2de6b4a49f3fbbf8799b50 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ #### Simple OPDS Catalog - Простой OPDS Каталог #### Author: Dmitry V.Shelepnev -#### Версия 0.43 +#### Версия 0.44 #### 1. Простая установка Simple OPDS (используем простую БД sqlite3) diff --git a/opds_catalog/feeds.py b/opds_catalog/feeds.py index 5ddd5891747d8500577afbe45641bae90d96fbdf..8c34fe797bb55017abd4e161087c8c1e3b45970c 100644 --- a/opds_catalog/feeds.py +++ b/opds_catalog/feeds.py @@ -319,12 +319,14 @@ class CatalogsFeed(AuthFeed): if item['authors']: s += _("<b>Authors: </b>%(authors)s<br/>") if item['genres']: s += _("<b>Genres: </b>%(genres)s<br/>") if item['series']: s += _("<b>Series: </b>%(series)s<br/>") + if item['ser_no']: s += _("<b>No in Series: </b>%(ser_no)s<br/>") s += _("<b>File: </b>%(filename)s<br/><b>File size: </b>%(filesize)s<br/><b>Changes date: </b>%(docdate)s<br/>") s +="<p class='book'>%(annotation)s</p>" return s%{'title':item['title'],'filename':item['filename'], 'filesize':item['filesize'],'docdate':item['docdate'],'annotation':item['annotation'], 'authors':", ".join(a['full_name'] for a in item['authors']), 'genres':", ".join(g['subsection'] for g in item['genres']), - 'series':", ".join(s['ser'] for s in item['series']), + 'series':", ".join(s['ser'] for s in item['series']), + 'ser_no': ", ".join(str(s['ser_no']) for s in item['ser_no']), } def OpenSearch(request): @@ -418,7 +420,8 @@ class SearchBooksFeed(AuthFeed): ser_id = int(searchterms) except: ser_id = 0 - books = Book.objects.filter(series=ser_id).order_by('search_title','-docdate') + #books = Book.objects.filter(series=ser_id).order_by('search_title','-docdate') + books = Book.objects.filter(series=ser_id).order_by('bseries__ser_no', 'search_title', '-docdate') # Поиск книг по автору и серии elif searchtype == "as": try: @@ -427,7 +430,7 @@ class SearchBooksFeed(AuthFeed): except: ser_id = 0 author_id = 0 - books = Book.objects.filter(authors=author_id, series=ser_id if ser_id else None).order_by('search_title','-docdate') + books = Book.objects.filter(authors=author_id, series=ser_id if ser_id else None).order_by('bseries__ser_no', 'search_title', '-docdate') # Поиск книг по жанру elif searchtype == 'g': try: @@ -569,6 +572,7 @@ class SearchBooksFeed(AuthFeed): if item['authors']: s += _("<b>Authors: </b>%(authors)s<br/>") if item['genres']: s += _("<b>Genres: </b>%(genres)s<br/>") if item['series']: s += _("<b>Series: </b>%(series)s<br/>") + if item['ser_no']: s += _("<b>No in Series: </b>%(ser_no)s<br/>") s += _("<b>File: </b>%(filename)s<br/><b>File size: </b>%(filesize)s<br/><b>Changes date: </b>%(docdate)s<br/>") if item['doubles']: s += _("<b>Doubles count: </b>%(doubles)s<br/>") s +="<p class='book'>%(annotation)s</p>" @@ -576,7 +580,8 @@ class SearchBooksFeed(AuthFeed): 'doubles':item['doubles'],'annotation':item['annotation'], 'authors':", ".join(a['full_name'] for a in item['authors']), 'genres':", ".join(g['subsection'] for g in item['genres']), - 'series':", ".join(s['ser'] for s in item['series']), + 'series':", ".join(s['ser'] for s in item['series']), + 'ser_no': ", ".join(str(s['ser_no']) for s in item['ser_no']), } class SelectSeriesFeed(AuthFeed): diff --git a/opds_catalog/locale/ru/LC_MESSAGES/django.mo b/opds_catalog/locale/ru/LC_MESSAGES/django.mo index 07a3ac8441e71848effb9cc5fa949bbf5b57215d..92a7e3558ec90b23c74d592c74279e86981b4766 100644 Binary files a/opds_catalog/locale/ru/LC_MESSAGES/django.mo and b/opds_catalog/locale/ru/LC_MESSAGES/django.mo differ diff --git a/opds_catalog/locale/ru/LC_MESSAGES/django.po b/opds_catalog/locale/ru/LC_MESSAGES/django.po index fef3493f3174bcc834c7c8e84e96f2c09261e7df..b29cf76048744beafbee8bcb3cb1925bee30c8d8 100644 --- a/opds_catalog/locale/ru/LC_MESSAGES/django.po +++ b/opds_catalog/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-18 23:04+0300\n" +"POT-Creation-Date: 2018-01-20 17:27+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -85,22 +85,26 @@ msgstr "Книжная полка (%(username)s)" msgid "%(username)s books readed: %(bookshelf)s." msgstr "Книг прочитано (%(username)s): %(bookshelf)s." -#: .\opds_catalog\feeds.py:319 .\opds_catalog\feeds.py:569 +#: .\opds_catalog\feeds.py:319 .\opds_catalog\feeds.py:572 #, python-format msgid "<b>Authors: </b>%(authors)s<br/>" msgstr "<b>Авторов: </b>%(authors)s<br/>" -#: .\opds_catalog\feeds.py:320 .\opds_catalog\feeds.py:570 +#: .\opds_catalog\feeds.py:320 .\opds_catalog\feeds.py:573 #, python-format msgid "<b>Genres: </b>%(genres)s<br/>" msgstr "<b>Жанров: </b>%(genres)s<br/>" -#: .\opds_catalog\feeds.py:321 .\opds_catalog\feeds.py:571 +#: .\opds_catalog\feeds.py:321 .\opds_catalog\feeds.py:574 #, python-format msgid "<b>Series: </b>%(series)s<br/>" msgstr "<b>Серий: </b>%(series)s<br/>" -#: .\opds_catalog\feeds.py:322 .\opds_catalog\feeds.py:572 +#: .\opds_catalog\feeds.py:322 .\opds_catalog\feeds.py:575 +msgid "<b>No in Series: </b>%(ser_no)s<br/>" +msgstr "<b>No в серии: </b>%(series)s<br/>" + +#: .\opds_catalog\feeds.py:323 .\opds_catalog\feeds.py:576 #, python-format msgid "" "<b>File: </b>%(filename)s<br/><b>File size: </b>%(filesize)s<br/><b>Changes " @@ -109,147 +113,147 @@ msgstr "" "<b>Файл: </b>%(filename)s<br/><b>Размер файла: </b>%(filesize)s<br/><b>Дата " "изменения: </b>%(docdate)s<br/>" -#: .\opds_catalog\feeds.py:355 .\opds_catalog\tests\test_feeds.py:60 +#: .\opds_catalog\feeds.py:357 .\opds_catalog\tests\test_feeds.py:60 msgid "Search by titles" msgstr "Поиск по наименованиям" -#: .\opds_catalog\feeds.py:355 +#: .\opds_catalog\feeds.py:357 msgid "Search books by title" msgstr "Поиск книг по наименованию" -#: .\opds_catalog\feeds.py:356 +#: .\opds_catalog\feeds.py:358 msgid "Search by authors" msgstr "Поиск авторов" -#: .\opds_catalog\feeds.py:356 +#: .\opds_catalog\feeds.py:358 msgid "Search authors by name" msgstr "Поиск авторов по имени" -#: .\opds_catalog\feeds.py:357 +#: .\opds_catalog\feeds.py:359 msgid "Search series" msgstr "Поиск серий" -#: .\opds_catalog\feeds.py:389 +#: .\opds_catalog\feeds.py:391 msgid "Books found" msgstr "Найдены книги" -#: .\opds_catalog\feeds.py:389 +#: .\opds_catalog\feeds.py:391 msgid "doubles hide" msgstr "дубликаты скрыты" -#: .\opds_catalog\feeds.py:389 +#: .\opds_catalog\feeds.py:391 msgid "doubles show" msgstr "дубликаты показаны" -#: .\opds_catalog\feeds.py:573 +#: .\opds_catalog\feeds.py:577 #, python-format msgid "<b>Doubles count: </b>%(doubles)s<br/>" msgstr "<b>Число дубликатов: </b>%(doubles)s<br/>" -#: .\opds_catalog\feeds.py:587 +#: .\opds_catalog\feeds.py:592 msgid "Series by authors select" msgstr "Выбор серий у автора" -#: .\opds_catalog\feeds.py:608 +#: .\opds_catalog\feeds.py:613 msgid "Books by series" msgstr "Книги по сериям" -#: .\opds_catalog\feeds.py:608 +#: .\opds_catalog\feeds.py:613 msgid "Books by author and series" msgstr "Книги по авторам и сериям" -#: .\opds_catalog\feeds.py:609 +#: .\opds_catalog\feeds.py:614 msgid "Books outside series" msgstr "Книги вне серий" -#: .\opds_catalog\feeds.py:609 +#: .\opds_catalog\feeds.py:614 msgid "Books by author outside series" msgstr "Книги автора вне серий" -#: .\opds_catalog\feeds.py:610 +#: .\opds_catalog\feeds.py:615 msgid "Books by alphabet" msgstr "Книги по алфавиту" -#: .\opds_catalog\feeds.py:610 +#: .\opds_catalog\feeds.py:615 msgid "Books by author alphabetical order" msgstr "Книги автора в алфавитном порядке" -#: .\opds_catalog\feeds.py:641 +#: .\opds_catalog\feeds.py:646 msgid "Authors found" msgstr "Найдены авторы" -#: .\opds_catalog\feeds.py:694 .\opds_catalog\feeds.py:772 +#: .\opds_catalog\feeds.py:699 .\opds_catalog\feeds.py:777 #, python-format msgid "Books count: %s" msgstr "Всего: %s книг" -#: .\opds_catalog\feeds.py:710 +#: .\opds_catalog\feeds.py:715 msgid "Series found" msgstr "Найдены серии" -#: .\opds_catalog\feeds.py:796 +#: .\opds_catalog\feeds.py:801 msgid "Select language" msgstr "Выбор алфавита" -#: .\opds_catalog\feeds.py:808 .\opds_catalog\tests\test_feeds.py:106 +#: .\opds_catalog\feeds.py:813 .\opds_catalog\tests\test_feeds.py:106 #: .\opds_catalog\tests\test_feeds.py:119 #: .\opds_catalog\tests\test_feeds.py:130 msgid "Cyrillic" msgstr "Кириллица (РУС)" -#: .\opds_catalog\feeds.py:809 .\opds_catalog\tests\test_feeds.py:107 +#: .\opds_catalog\feeds.py:814 .\opds_catalog\tests\test_feeds.py:107 msgid "Latin" msgstr "Латинница (LAT)" -#: .\opds_catalog\feeds.py:810 .\opds_catalog\tests\test_feeds.py:108 +#: .\opds_catalog\feeds.py:815 .\opds_catalog\tests\test_feeds.py:108 msgid "Digits" msgstr "Цифры (0..9)" -#: .\opds_catalog\feeds.py:811 .\opds_catalog\tests\test_feeds.py:109 +#: .\opds_catalog\feeds.py:816 .\opds_catalog\tests\test_feeds.py:109 msgid "Other symbols" msgstr "Другие символы" -#: .\opds_catalog\feeds.py:812 .\opds_catalog\tests\test_feeds.py:110 +#: .\opds_catalog\feeds.py:817 .\opds_catalog\tests\test_feeds.py:110 msgid "Show all" msgstr "Показать все" -#: .\opds_catalog\feeds.py:842 +#: .\opds_catalog\feeds.py:847 msgid "Select books by substring" msgstr "Поиск книг по подстроке" -#: .\opds_catalog\feeds.py:879 .\opds_catalog\feeds.py:1045 +#: .\opds_catalog\feeds.py:884 .\opds_catalog\feeds.py:1050 #, python-format msgid "Found: %s books" msgstr "Найдено %s книг" -#: .\opds_catalog\feeds.py:900 +#: .\opds_catalog\feeds.py:905 msgid "Select authors by substring" msgstr "Поиск авторов по подстроке" -#: .\opds_catalog\feeds.py:937 +#: .\opds_catalog\feeds.py:942 #, python-format msgid "Found: %s authors" msgstr "Найдено %s авторов" -#: .\opds_catalog\feeds.py:958 +#: .\opds_catalog\feeds.py:963 msgid "Select series by substring" msgstr "Поиск серий по подстроке" -#: .\opds_catalog\feeds.py:995 +#: .\opds_catalog\feeds.py:1000 #, python-format msgid "Found: %s series" msgstr "Найдено %s серий" -#: .\opds_catalog\feeds.py:1016 +#: .\opds_catalog\feeds.py:1021 #, python-format msgid "Select genres (%s)" msgstr "Выбор жанра (%s)" -#: .\opds_catalog\feeds.py:1016 +#: .\opds_catalog\feeds.py:1021 msgid "section" msgstr "секция" -#: .\opds_catalog\feeds.py:1016 +#: .\opds_catalog\feeds.py:1021 msgid "subsection" msgstr "подсекция" diff --git a/sopds/locale/ru/LC_MESSAGES/django.mo b/sopds/locale/ru/LC_MESSAGES/django.mo index e3fe54e0cdc14c3b036252a8f670321cfee3bb57..f13b10124c7e0b97514d3a26030ee86a3d918612 100644 Binary files a/sopds/locale/ru/LC_MESSAGES/django.mo and b/sopds/locale/ru/LC_MESSAGES/django.mo differ diff --git a/sopds/locale/ru/LC_MESSAGES/django.po b/sopds/locale/ru/LC_MESSAGES/django.po index 98401d2a206d96b6d2b0727a3ae560ea4b01ceee..53647f2d85f0f40057e2d4aea35acffc95fe02e0 100644 --- a/sopds/locale/ru/LC_MESSAGES/django.po +++ b/sopds/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-18 23:04+0300\n" +"POT-Creation-Date: 2018-01-20 17:27+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/sopds_web_backend/locale/ru/LC_MESSAGES/django.mo b/sopds_web_backend/locale/ru/LC_MESSAGES/django.mo index eeb2d191d2a83691e11f5ef95d6052f778bf422d..a4f83201f8b4cb1f3d4142862f0e003f2921e3db 100644 Binary files a/sopds_web_backend/locale/ru/LC_MESSAGES/django.mo and b/sopds_web_backend/locale/ru/LC_MESSAGES/django.mo differ diff --git a/sopds_web_backend/locale/ru/LC_MESSAGES/django.po b/sopds_web_backend/locale/ru/LC_MESSAGES/django.po index c1f24e8c45591c933313cee5aad41309c2ddbd2a..bc1629f90a6b7ce66744e5476663197831b4c88a 100644 --- a/sopds_web_backend/locale/ru/LC_MESSAGES/django.po +++ b/sopds_web_backend/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-18 23:04+0300\n" +"POT-Creation-Date: 2018-01-20 17:27+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -228,7 +228,7 @@ msgid "Log in" msgstr "Вход" #: .\sopds_web_backend\templates\sopds_logo.html:14 -#: .\sopds_web_backend\views.py:275 .\sopds_web_backend\views.py:315 +#: .\sopds_web_backend\views.py:276 .\sopds_web_backend\views.py:316 msgid "Search" msgstr "Найти" @@ -247,36 +247,36 @@ msgstr "Автор" #: .\sopds_web_backend\templates\sopds_logo.html:29 #: .\sopds_web_backend\templates\sopds_menu.html:10 #: .\sopds_web_backend\templates\sopds_menu.html:33 -#: .\sopds_web_backend\views.py:275 .\sopds_web_backend\views.py:479 +#: .\sopds_web_backend\views.py:276 .\sopds_web_backend\views.py:480 msgid "Series" msgstr "Серии" #: .\sopds_web_backend\templates\sopds_menu.html:6 #: .\sopds_web_backend\templates\sopds_menu.html:16 -#: .\sopds_web_backend\views.py:374 +#: .\sopds_web_backend\views.py:375 msgid "Catalogs" msgstr "Каталоги" #: .\sopds_web_backend\templates\sopds_menu.html:7 #: .\sopds_web_backend\templates\sopds_menu.html:17 #: .\sopds_web_backend\views.py:96 .\sopds_web_backend\views.py:102 -#: .\sopds_web_backend\views.py:115 .\sopds_web_backend\views.py:127 -#: .\sopds_web_backend\views.py:136 .\sopds_web_backend\views.py:139 -#: .\sopds_web_backend\views.py:148 .\sopds_web_backend\views.py:152 -#: .\sopds_web_backend\views.py:162 .\sopds_web_backend\views.py:174 -#: .\sopds_web_backend\views.py:409 +#: .\sopds_web_backend\views.py:115 .\sopds_web_backend\views.py:128 +#: .\sopds_web_backend\views.py:137 .\sopds_web_backend\views.py:140 +#: .\sopds_web_backend\views.py:149 .\sopds_web_backend\views.py:153 +#: .\sopds_web_backend\views.py:163 .\sopds_web_backend\views.py:175 +#: .\sopds_web_backend\views.py:410 msgid "Books" msgstr "Книги" #: .\sopds_web_backend\templates\sopds_menu.html:8 #: .\sopds_web_backend\templates\sopds_menu.html:24 -#: .\sopds_web_backend\views.py:315 .\sopds_web_backend\views.py:444 +#: .\sopds_web_backend\views.py:316 .\sopds_web_backend\views.py:445 msgid "Authors" msgstr "Авторы" #: .\sopds_web_backend\templates\sopds_menu.html:9 #: .\sopds_web_backend\templates\sopds_menu.html:31 -#: .\sopds_web_backend\views.py:495 .\sopds_web_backend\views.py:499 +#: .\sopds_web_backend\views.py:496 .\sopds_web_backend\views.py:500 msgid "Genres" msgstr "Жанры" @@ -306,7 +306,7 @@ msgid "Total: %(s_book_count)s books." msgstr "Всего: %(s_book_count)s книг." #: .\sopds_web_backend\templates\sopds_top.html:19 -#: .\sopds_web_backend\views.py:566 +#: .\sopds_web_backend\views.py:567 msgid "Logout" msgstr "Выход" @@ -315,7 +315,7 @@ msgid "Settings" msgstr "Настройки" #: .\sopds_web_backend\templates\sopds_top.html:24 -#: .\sopds_web_backend\views.py:534 +#: .\sopds_web_backend\views.py:535 msgid "Login" msgstr "Вход" @@ -327,40 +327,40 @@ msgstr "Поиск по наименованию" msgid "Search by author" msgstr "Поиск по автору" -#: .\sopds_web_backend\views.py:127 +#: .\sopds_web_backend\views.py:128 msgid "Search by series" msgstr "Поиск по серии" -#: .\sopds_web_backend\views.py:136 .\sopds_web_backend\views.py:139 +#: .\sopds_web_backend\views.py:137 .\sopds_web_backend\views.py:140 msgid "Search by genre" msgstr "Поиск по жанру" -#: .\sopds_web_backend\views.py:148 .\sopds_web_backend\views.py:152 +#: .\sopds_web_backend\views.py:149 .\sopds_web_backend\views.py:153 msgid "Bookshelf" msgstr "Книжная полка" -#: .\sopds_web_backend\views.py:162 +#: .\sopds_web_backend\views.py:163 msgid "Doubles for book" msgstr "Дубликаты книги" -#: .\sopds_web_backend\views.py:371 +#: .\sopds_web_backend\views.py:372 msgid "ROOT" msgstr "НАЧАЛО" -#: .\sopds_web_backend\views.py:409 .\sopds_web_backend\views.py:444 -#: .\sopds_web_backend\views.py:479 .\sopds_web_backend\views.py:495 -#: .\sopds_web_backend\views.py:499 +#: .\sopds_web_backend\views.py:410 .\sopds_web_backend\views.py:445 +#: .\sopds_web_backend\views.py:480 .\sopds_web_backend\views.py:496 +#: .\sopds_web_backend\views.py:500 msgid "Select" msgstr "Выбор" -#: .\sopds_web_backend\views.py:529 +#: .\sopds_web_backend\views.py:530 msgid "HOME" msgstr "ГЛАВНАЯ" -#: .\sopds_web_backend\views.py:550 +#: .\sopds_web_backend\views.py:551 msgid "This account is not active!" msgstr "Учетная запись не активна!" -#: .\sopds_web_backend\views.py:554 +#: .\sopds_web_backend\views.py:555 msgid "User does not exist or the password is incorrect!" msgstr "Пользователь не существует или введен неправильный пароль!"