Unified wording for recently added books, series, categories, etc in opds and web UI ( #1045)
Added file formats and languages to opds feed
This commit is contained in:
		
							parent
							
								
									2215bf3d7f
								
							
						
					
					
						commit
						c33623efee
					
				
							
								
								
									
										68
									
								
								cps/opds.py
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								cps/opds.py
									
									
									
									
									
								
							| 
						 | 
					@ -31,11 +31,13 @@ from flask_login import current_user
 | 
				
			||||||
from sqlalchemy.sql.expression import func, text, or_, and_
 | 
					from sqlalchemy.sql.expression import func, text, or_, and_
 | 
				
			||||||
from werkzeug.security import check_password_hash
 | 
					from werkzeug.security import check_password_hash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from . import constants, logger, config, db, ub, services
 | 
					from . import constants, logger, config, db, ub, services, get_locale, isoLanguages
 | 
				
			||||||
from .helper import fill_indexpage, get_download_link, get_book_cover
 | 
					from .helper import fill_indexpage, get_download_link, get_book_cover, speaking_language
 | 
				
			||||||
from .pagination import Pagination
 | 
					from .pagination import Pagination
 | 
				
			||||||
from .web import common_filters, get_search_results, render_read_books, download_required
 | 
					from .web import common_filters, get_search_results, render_read_books, download_required
 | 
				
			||||||
 | 
					from flask_babel import gettext as _
 | 
				
			||||||
 | 
					from babel import Locale as LC
 | 
				
			||||||
 | 
					from babel.core import UnknownLocaleError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
opds = Blueprint('opds', __name__)
 | 
					opds = Blueprint('opds', __name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -213,6 +215,66 @@ def feed_series(book_id):
 | 
				
			||||||
                    db.Books, db.Books.series.any(db.Series.id == book_id), [db.Books.series_index])
 | 
					                    db.Books, db.Books.series.any(db.Series.id == book_id), [db.Books.series_index])
 | 
				
			||||||
    return render_xml_template('feed.xml', entries=entries, pagination=pagination)
 | 
					    return render_xml_template('feed.xml', entries=entries, pagination=pagination)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@opds.route("/opds/formats")
 | 
				
			||||||
 | 
					@requires_basic_auth_if_no_ano
 | 
				
			||||||
 | 
					def feed_formatindex():
 | 
				
			||||||
 | 
					    off = request.args.get("offset") or 0
 | 
				
			||||||
 | 
					    entries = db.session.query(db.Data).join(db.Books).filter(common_filters()) \
 | 
				
			||||||
 | 
					        .group_by(db.Data.format).order_by(db.Data.format).all()
 | 
				
			||||||
 | 
					    pagination = Pagination((int(off) / (int(config.config_books_per_page)) + 1), config.config_books_per_page,
 | 
				
			||||||
 | 
					                            len(entries))
 | 
				
			||||||
 | 
					    for entry in entries:
 | 
				
			||||||
 | 
					        entry.name = entry.format
 | 
				
			||||||
 | 
					        entry.id = entry.format
 | 
				
			||||||
 | 
					    return render_xml_template('feed.xml', listelements=entries, folder='opds.feed_format', pagination=pagination)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@opds.route("/opds/formats/<book_id>")
 | 
				
			||||||
 | 
					@requires_basic_auth_if_no_ano
 | 
				
			||||||
 | 
					def feed_format(book_id):
 | 
				
			||||||
 | 
					    off = request.args.get("offset") or 0
 | 
				
			||||||
 | 
					    entries, __, pagination = fill_indexpage((int(off) / (int(config.config_books_per_page)) + 1),
 | 
				
			||||||
 | 
					                    db.Books, db.Books.data.any(db.Data.format == book_id.upper()), [db.Books.timestamp.desc()])
 | 
				
			||||||
 | 
					    return render_xml_template('feed.xml', entries=entries, pagination=pagination)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@opds.route("/opds/language")
 | 
				
			||||||
 | 
					@opds.route("/opds/language/")
 | 
				
			||||||
 | 
					@requires_basic_auth_if_no_ano
 | 
				
			||||||
 | 
					def feed_languagesindex():
 | 
				
			||||||
 | 
					    off = request.args.get("offset") or 0
 | 
				
			||||||
 | 
					    if current_user.filter_language() == u"all":
 | 
				
			||||||
 | 
					        languages = speaking_language()
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            cur_l = LC.parse(current_user.filter_language())
 | 
				
			||||||
 | 
					        except UnknownLocaleError:
 | 
				
			||||||
 | 
					            cur_l = None
 | 
				
			||||||
 | 
					        languages = db.session.query(db.Languages).filter(
 | 
				
			||||||
 | 
					            db.Languages.lang_code == current_user.filter_language()).all()
 | 
				
			||||||
 | 
					        if cur_l:
 | 
				
			||||||
 | 
					            languages[0].name = cur_l.get_language_name(get_locale())
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            languages[0].name = _(isoLanguages.get(part3=languages[0].lang_code).name)
 | 
				
			||||||
 | 
					    pagination = Pagination((int(off) / (int(config.config_books_per_page)) + 1), config.config_books_per_page,
 | 
				
			||||||
 | 
					                            len(languages))
 | 
				
			||||||
 | 
					    return render_xml_template('feed.xml', listelements=languages, folder='opds.feed_languages', pagination=pagination)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@opds.route("/opds/language/<int:book_id>")
 | 
				
			||||||
 | 
					@requires_basic_auth_if_no_ano
 | 
				
			||||||
 | 
					def feed_languages(book_id):
 | 
				
			||||||
 | 
					    off = request.args.get("offset") or 0
 | 
				
			||||||
 | 
					    entries, __, pagination = fill_indexpage((int(off) / (int(config.config_books_per_page)) + 1),
 | 
				
			||||||
 | 
					                    db.Books, db.Books.languages.any(db.Languages.id == book_id), [db.Books.timestamp.desc()])
 | 
				
			||||||
 | 
					    '''for entry in entries:
 | 
				
			||||||
 | 
					        for index in range(0, len(entry.languages)):
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                entry.languages[index].language_name = LC.parse(entry.languages[index].lang_code).get_language_name(
 | 
				
			||||||
 | 
					                    get_locale())
 | 
				
			||||||
 | 
					            except UnknownLocaleError:
 | 
				
			||||||
 | 
					                entry.languages[index].language_name = _(
 | 
				
			||||||
 | 
					                    isoLanguages.get(part3=entry.languages[index].lang_code).name)'''
 | 
				
			||||||
 | 
					    return render_xml_template('feed.xml', entries=entries, pagination=pagination)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@opds.route("/opds/shelfindex/", defaults={'public': 0})
 | 
					@opds.route("/opds/shelfindex/", defaults={'public': 0})
 | 
				
			||||||
@opds.route("/opds/shelfindex/<string:public>")
 | 
					@opds.route("/opds/shelfindex/<string:public>")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,7 +53,9 @@
 | 
				
			||||||
        <name>{{entry.publishers[0].name}}</name>
 | 
					        <name>{{entry.publishers[0].name}}</name>
 | 
				
			||||||
      </publisher>
 | 
					      </publisher>
 | 
				
			||||||
    {% endif %}
 | 
					    {% endif %}
 | 
				
			||||||
    <dcterms:language>{{entry.language}}</dcterms:language>
 | 
					    {% for lang in entry.languages %}
 | 
				
			||||||
 | 
					      <dcterms:language>{{lang.lang_code}}</dcterms:language>
 | 
				
			||||||
 | 
					    {% endfor %}
 | 
				
			||||||
    {% for tag in entry.tags %}
 | 
					    {% for tag in entry.tags %}
 | 
				
			||||||
    <category scheme="http://www.bisg.org/standards/bisac_subject/index.html"
 | 
					    <category scheme="http://www.bisg.org/standards/bisac_subject/index.html"
 | 
				
			||||||
              term="{{tag.name}}"
 | 
					              term="{{tag.name}}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@
 | 
				
			||||||
    <content type="text">{{_('Popular publications from this catalog based on Rating.')}}</content>
 | 
					    <content type="text">{{_('Popular publications from this catalog based on Rating.')}}</content>
 | 
				
			||||||
  </entry>
 | 
					  </entry>
 | 
				
			||||||
  <entry>
 | 
					  <entry>
 | 
				
			||||||
    <title>{{_('New Books')}}</title>
 | 
					    <title>{{_('Recently added Books')}}</title>
 | 
				
			||||||
    <link href="{{url_for('opds.feed_new')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
					    <link href="{{url_for('opds.feed_new')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
				
			||||||
    <id>{{url_for('opds.feed_new')}}</id>
 | 
					    <id>{{url_for('opds.feed_new')}}</id>
 | 
				
			||||||
    <updated>{{ current_time }}</updated>
 | 
					    <updated>{{ current_time }}</updated>
 | 
				
			||||||
| 
						 | 
					@ -72,19 +72,33 @@
 | 
				
			||||||
    <content type="text">{{_('Books ordered by publisher')}}</content>
 | 
					    <content type="text">{{_('Books ordered by publisher')}}</content>
 | 
				
			||||||
  </entry>
 | 
					  </entry>
 | 
				
			||||||
  <entry>
 | 
					  <entry>
 | 
				
			||||||
    <title>{{_('Category list')}}</title>
 | 
					    <title>{{_('Categories')}}</title>
 | 
				
			||||||
    <link href="{{url_for('opds.feed_categoryindex')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
					    <link href="{{url_for('opds.feed_categoryindex')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
				
			||||||
    <id>{{url_for('opds.feed_categoryindex')}}</id>
 | 
					    <id>{{url_for('opds.feed_categoryindex')}}</id>
 | 
				
			||||||
    <updated>{{ current_time }}</updated>
 | 
					    <updated>{{ current_time }}</updated>
 | 
				
			||||||
    <content type="text">{{_('Books ordered by category')}}</content>
 | 
					    <content type="text">{{_('Books ordered by category')}}</content>
 | 
				
			||||||
  </entry>
 | 
					  </entry>
 | 
				
			||||||
  <entry>
 | 
					  <entry>
 | 
				
			||||||
    <title>{{_('Series list')}}</title>
 | 
					    <title>{{_('Series')}}</title>
 | 
				
			||||||
    <link href="{{url_for('opds.feed_seriesindex')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
					    <link href="{{url_for('opds.feed_seriesindex')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
				
			||||||
    <id>{{url_for('opds.feed_seriesindex')}}</id>
 | 
					    <id>{{url_for('opds.feed_seriesindex')}}</id>
 | 
				
			||||||
    <updated>{{ current_time }}</updated>
 | 
					    <updated>{{ current_time }}</updated>
 | 
				
			||||||
    <content type="text">{{_('Books ordered by series')}}</content>
 | 
					    <content type="text">{{_('Books ordered by series')}}</content>
 | 
				
			||||||
  </entry>
 | 
					  </entry>
 | 
				
			||||||
 | 
					  <entry>
 | 
				
			||||||
 | 
					    <title>{{_('Languages')}}</title>
 | 
				
			||||||
 | 
					    <link href="{{url_for('opds.feed_languagesindex')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
				
			||||||
 | 
					    <id>{{url_for('opds.feed_languagesindex')}}</id>
 | 
				
			||||||
 | 
					    <updated>{{ current_time }}</updated>
 | 
				
			||||||
 | 
					    <content type="text">{{_('Books ordered by Languages')}}</content>
 | 
				
			||||||
 | 
					  </entry>
 | 
				
			||||||
 | 
					  <entry>
 | 
				
			||||||
 | 
					    <title>{{_('File formats')}}</title>
 | 
				
			||||||
 | 
					    <link href="{{url_for('opds.feed_formatindex')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
				
			||||||
 | 
					    <id>{{url_for('opds.feed_formatindex')}}</id>
 | 
				
			||||||
 | 
					    <updated>{{ current_time }}</updated>
 | 
				
			||||||
 | 
					    <content type="text">{{_('Books ordered by file formats')}}</content>
 | 
				
			||||||
 | 
					  </entry>
 | 
				
			||||||
  <entry>
 | 
					  <entry>
 | 
				
			||||||
    <title>{{_('Public Shelves')}}</title>
 | 
					    <title>{{_('Public Shelves')}}</title>
 | 
				
			||||||
    <link  href="{{url_for('opds.feed_shelfindex', public='public')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
					    <link  href="{{url_for('opds.feed_shelfindex', public='public')}}" type="application/atom+xml;profile=opds-catalog"/>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user