mirror of
https://github.com/janeczku/calibre-web
synced 2025-11-15 14:37:37 +00:00
Merge branch 'master' of https://github.com/wuqi/calibre-web
# Conflicts: # .gitignore # cps/static/css/colors.css # cps/static/css/style.css # cps/web.py
This commit is contained in:
80
cps/web.py
80
cps/web.py
@@ -23,9 +23,20 @@ from functools import wraps
|
||||
import base64
|
||||
from sqlalchemy.sql import *
|
||||
import json
|
||||
import urllib
|
||||
import datetime
|
||||
from uuid import uuid4
|
||||
import os.path
|
||||
import shutil
|
||||
import re
|
||||
try:
|
||||
from wand.image import Image
|
||||
use_generic_pdf_cover = False
|
||||
except ImportError, e:
|
||||
use_generic_pdf_cover = True
|
||||
|
||||
from shutil import copyfile
|
||||
from cgi import escape
|
||||
|
||||
class ReverseProxied(object):
|
||||
'''Wrap the application in this middleware and configure the
|
||||
@@ -529,37 +540,52 @@ def author(name):
|
||||
def get_cover(cover_path):
|
||||
return send_from_directory(os.path.join(config.DB_ROOT, cover_path), "cover.jpg")
|
||||
|
||||
@app.route("/read/<int:book_id>")
|
||||
@app.route("/read/<int:book_id>/<format>")
|
||||
@login_required
|
||||
def read_book(book_id):
|
||||
def read_book(book_id,format):
|
||||
book = db.session.query(db.Books).filter(db.Books.id == book_id).first()
|
||||
book_dir = os.path.join(config.MAIN_DIR, "cps","static", str(book_id))
|
||||
if not os.path.exists(book_dir):
|
||||
os.mkdir(book_dir)
|
||||
for data in book.data:
|
||||
if data.format.lower() == "epub":
|
||||
epub_file = os.path.join(config.DB_ROOT, book.path, data.name) + ".epub"
|
||||
if not os.path.isfile(epub_file):
|
||||
raise ValueError('Error opening eBook. File does not exist: ', epub_file)
|
||||
zfile = zipfile.ZipFile(epub_file)
|
||||
for name in zfile.namelist():
|
||||
(dirName, fileName) = os.path.split(name)
|
||||
newDir = os.path.join(book_dir, dirName)
|
||||
if not os.path.exists(newDir):
|
||||
try:
|
||||
os.makedirs(newDir)
|
||||
except OSError as exception:
|
||||
if exception.errno == errno.EEXIST:
|
||||
pass
|
||||
else:
|
||||
raise
|
||||
if fileName:
|
||||
fd = open(os.path.join(newDir, fileName), "wb")
|
||||
fd.write(zfile.read(name))
|
||||
fd.close()
|
||||
zfile.close()
|
||||
break
|
||||
return render_template('read.html', bookid=book_id, title="Read a Book")
|
||||
if format.lower() == "epub":
|
||||
#check if mimetype file is exists
|
||||
mime_file = str(book_id) +"/mimetype"
|
||||
if os.path.exists(mime_file) == False:
|
||||
epub_file = os.path.join(config.DB_ROOT, book.path, book.data[0].name) + ".epub"
|
||||
if not os.path.isfile(epub_file):
|
||||
raise ValueError('Error opening eBook. File does not exist: ', epub_file)
|
||||
zfile = zipfile.ZipFile(epub_file)
|
||||
for name in zfile.namelist():
|
||||
(dirName, fileName) = os.path.split(name)
|
||||
newDir = os.path.join(book_dir, dirName)
|
||||
if not os.path.exists(newDir):
|
||||
try:
|
||||
os.makedirs(newDir)
|
||||
except OSError as exception:
|
||||
if exception.errno == errno.EEXIST:
|
||||
pass
|
||||
else:
|
||||
raise
|
||||
if fileName:
|
||||
fd = open(os.path.join(newDir, fileName), "wb")
|
||||
fd.write(zfile.read(name))
|
||||
fd.close()
|
||||
zfile.close()
|
||||
return render_template('read.html', bookid=book_id, title="Read a Book")
|
||||
elif format.lower() == "pdf":
|
||||
all_name = str(book_id) +"/"+ urllib.quote(book.data[0].name) +".pdf"
|
||||
tmp_file = os.path.join(book_dir,urllib.quote(book.data[0].name)) + ".pdf"
|
||||
if os.path.exists(tmp_file) == False:
|
||||
pdf_file = os.path.join(config.DB_ROOT, book.path, book.data[0].name) + ".pdf"
|
||||
copyfile(pdf_file,tmp_file)
|
||||
return render_template('readpdf.html', pdffile=all_name, title="Read a Book")
|
||||
elif format.lower() == "txt":
|
||||
all_name = str(book_id) +"/"+ urllib.quote(book.data[0].name) +".txt"
|
||||
tmp_file = os.path.join(book_dir,urllib.quote(book.data[0].name)) + ".txt"
|
||||
if os.path.exists(all_name) == False:
|
||||
txt_file = os.path.join(config.DB_ROOT, book.path, book.data[0].name) + ".txt"
|
||||
copyfile(txt_file,tmp_file)
|
||||
return render_template('readtxt.html', txtfile=all_name, title="Read a Book")
|
||||
|
||||
@app.route("/download/<int:book_id>/<format>")
|
||||
@login_required
|
||||
@@ -1191,4 +1217,4 @@ def upload():
|
||||
if current_user.role_edit() or current_user.role_admin():
|
||||
return render_template('edit_book.html', book=db_book, authors=author_names, cc=cc)
|
||||
book_in_shelfs = []
|
||||
return render_template('detail.html', entry=db_book, cc=cc, title=db_book.title, books_shelfs=book_in_shelfs)
|
||||
return render_template('detail.html', entry=db_book, cc=cc, title=db_book.title, books_shelfs=book_in_shelfs)
|
||||
Reference in New Issue
Block a user