auto select format if only one
This commit is contained in:
parent
e66068d699
commit
28dac34119
|
@ -43,19 +43,32 @@
|
||||||
<a href="{{url_for('send_to_kindle', book_id=entry.id)}}" id="sendbtn" class="btn btn-primary" role="button"><span class="glyphicon glyphicon-send"></span> {{_('Send to Kindle')}}</a>
|
<a href="{{url_for('send_to_kindle', book_id=entry.id)}}" id="sendbtn" class="btn btn-primary" role="button"><span class="glyphicon glyphicon-send"></span> {{_('Send to Kindle')}}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if (g.user.role_download() and g.user.is_anonymous) or g.user.is_authenticated %}
|
{% if (g.user.role_download() and g.user.is_anonymous) or g.user.is_authenticated %}
|
||||||
|
{% with formats = entry.data|select('canread')|list %}
|
||||||
|
{% if formats|length == 1 %}
|
||||||
|
{% set format = formats|first %}
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<a target="_blank" class="btn btn-primary" href="{{ url_for('read_book', book_id=entry.id, book_format=format.format|lower) }}">{{format.format}}
|
||||||
|
<span class="glyphicon glyphicon-eye-open"></span> {{_('Read in browser')}}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% elif formats|length > 1 %}
|
||||||
<div class="btn-group" role="group">
|
<div class="btn-group" role="group">
|
||||||
<button id="read-in-browser" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button id="read-in-browser" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<span class="glyphicon glyphicon-eye-open"></span> {{_('Read in browser')}}
|
<span class="glyphicon glyphicon-eye-open"></span> {{_('Read in browser')}}
|
||||||
<span class="caret"></span>
|
<span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu" aria-labelledby="read-in-browser">
|
<ul class="dropdown-menu" aria-labelledby="read-in-browser">
|
||||||
{% for format in entry.data %}
|
{% for format in formats %}
|
||||||
{%if format.format|lower == 'epub' or format.format|lower == 'txt' or format.format|lower == 'pdf' or ( format.format|lower == 'cbr' and rarsupport ) or format.format|lower == 'cbt' or format.format|lower == 'cbz' %}
|
{%if format.format|lower|canread %}
|
||||||
<li><a target="_blank" href="{{ url_for('read_book', book_id=entry.id, book_format=format.format|lower) }}">{{format.format}}</a></li>
|
<li><a target="_blank" href="{{ url_for('read_book', book_id=entry.id, book_format=format.format|lower) }}">{{format.format}}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{%endfor%}
|
{%endfor%}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
{%else%}
|
||||||
|
{{formats|length}}
|
||||||
|
{%endif%}
|
||||||
|
{%endwith%}
|
||||||
{%endif%}
|
{%endif%}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
50
cps/web.py
50
cps/web.py
|
@ -116,6 +116,7 @@ gdrive_watch_callback_token = 'target=calibreweb-watch_files'
|
||||||
global_task = None
|
global_task = None
|
||||||
|
|
||||||
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', 'fb2'])
|
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', 'fb2'])
|
||||||
|
READER_EXTENSIONS = set(['txt', 'pdf', 'epub', 'zip', 'cbz', 'tar', 'cbt'] + (['rar','cbr'] if rar_support else []))
|
||||||
|
|
||||||
def md5(fname):
|
def md5(fname):
|
||||||
hash_md5 = hashlib.md5()
|
hash_md5 = hashlib.md5()
|
||||||
|
@ -473,6 +474,14 @@ def yesno(value, yes, no):
|
||||||
return yes if value else no
|
return yes if value else no
|
||||||
|
|
||||||
|
|
||||||
|
@app.template_filter('canread')
|
||||||
|
@app.template_test('canread')
|
||||||
|
def canread(ext):
|
||||||
|
if type(ext) == db.Data:
|
||||||
|
ext = ext.format
|
||||||
|
return ext.lower() in READER_EXTENSIONS
|
||||||
|
|
||||||
|
|
||||||
def admin_required(f):
|
def admin_required(f):
|
||||||
"""
|
"""
|
||||||
Checks if current_user.role == 1
|
Checks if current_user.role == 1
|
||||||
|
@ -937,10 +946,8 @@ def get_comic_book(book_id, book_format, page):
|
||||||
rarfile.UNRAR_TOOL = config.config_rarfile_location
|
rarfile.UNRAR_TOOL = config.config_rarfile_location
|
||||||
try:
|
try:
|
||||||
rf = rarfile.RarFile(cbr_file)
|
rf = rarfile.RarFile(cbr_file)
|
||||||
rarNames = sort(rf.namelist())
|
names = sort(rf.namelist())
|
||||||
b64 = codecs.encode(rf.read(rarNames[page]), 'base64').decode()
|
extract = lambda page: rf.read(names[page])
|
||||||
extractedfile="data:image/png;base64," + b64
|
|
||||||
fileData={"name": rarNames[page],"page":page, "last":rarNames.__len__()-1, "content": extractedfile}
|
|
||||||
except:
|
except:
|
||||||
# rarfile not valid
|
# rarfile not valid
|
||||||
app.logger.error('Unrar binary not found, or unable to decompress file ' + cbr_file)
|
app.logger.error('Unrar binary not found, or unable to decompress file ' + cbr_file)
|
||||||
|
@ -949,25 +956,27 @@ def get_comic_book(book_id, book_format, page):
|
||||||
app.logger.info('Unrar is not supported please install python rarfile extension')
|
app.logger.info('Unrar is not supported please install python rarfile extension')
|
||||||
# no support means return nothing
|
# no support means return nothing
|
||||||
return "", 204
|
return "", 204
|
||||||
if book_format in ("cbz", "zip"):
|
elif book_format in ("cbz", "zip"):
|
||||||
zf = zipfile.ZipFile(cbr_file)
|
zf = zipfile.ZipFile(cbr_file)
|
||||||
zipNames=sort(zf.namelist())
|
names=sort(zf.namelist())
|
||||||
if sys.version_info.major >= 3:
|
extract = lambda page: zf.read(names[page])
|
||||||
b64 = codecs.encode(zf.read(zipNames[page]), 'base64').decode()
|
elif book_format in ("cbt", "tar"):
|
||||||
else:
|
|
||||||
b64 = zf.read(zipNames[page]).encode('base64')
|
|
||||||
extractedfile="data:image/png;base64," + b64
|
|
||||||
fileData={"name": zipNames[page],"page":page, "last":zipNames.__len__()-1, "content": extractedfile}
|
|
||||||
|
|
||||||
if book_format in ("cbt", "tar"):
|
|
||||||
tf = tarfile.TarFile(cbr_file)
|
tf = tarfile.TarFile(cbr_file)
|
||||||
tarNames=sort(tf.getnames())
|
names=sort(tf.getnames())
|
||||||
if sys.version_info.major >= 3:
|
extract = lambda page: tf.extractfile(names[page]).read()
|
||||||
b64 = codecs.encode(tf.extractfile(tarNames[page]).read(), 'base64').decode()
|
|
||||||
else:
|
else:
|
||||||
b64 = (tf.extractfile(tarNames[page]).read()).encode('base64')
|
app.logger.error('unsupported comic format')
|
||||||
extractedfile="data:image/png;base64," + bs
|
return "", 204
|
||||||
fileData={"name": tarNames[page],"page":page, "last":tarNames.__len__()-1, "content": extractedfile}
|
|
||||||
|
if sys.version_info.major >= 3:
|
||||||
|
b64 = codecs.encode(extract(page), 'base64').decode()
|
||||||
|
else:
|
||||||
|
b64 = extract(page).encode('base64')
|
||||||
|
ext = names[page].rpartition('.')[-1]
|
||||||
|
if ext not in ('png', 'gif', 'jpg', 'jpeg'):
|
||||||
|
ext = 'png'
|
||||||
|
extractedfile="data:image/" + ext + ";base64," + b64
|
||||||
|
fileData={"name": names[page], "page":page, "last":len(names)-1, "content": extractedfile}
|
||||||
return make_response(json.dumps(fileData))
|
return make_response(json.dumps(fileData))
|
||||||
return "", 204
|
return "", 204
|
||||||
|
|
||||||
|
@ -3264,4 +3273,3 @@ def start_gevent():
|
||||||
app.logger.info('Unable to listen on \'\', trying on IPv4 only...')
|
app.logger.info('Unable to listen on \'\', trying on IPv4 only...')
|
||||||
gevent_server = WSGIServer(('0.0.0.0', ub.config.config_port), app)
|
gevent_server = WSGIServer(('0.0.0.0', ub.config.config_port), app)
|
||||||
gevent_server.serve_forever()
|
gevent_server.serve_forever()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user