This repository has been archived on 2020-11-22. You can view files and clone it, but cannot push or open issues/pull-requests.
mangareader/mangareader.py

103 lines
2.5 KiB
Python
Raw Permalink Normal View History

2019-07-04 18:06:44 +02:00
#!/usr/bin/env python3
from backend import CalibreDB
2020-02-15 15:41:11 +01:00
from flask import (
Flask,
jsonify,
send_from_directory,
send_file,
render_template,
request,
)
2019-07-04 18:06:44 +02:00
from flask_cors import CORS
from werkzeug.routing import BaseConverter
import os
def send_from_cwd(filename):
return send_from_directory(os.getcwd(), filename)
def send_file_with_etag(fp, etag, **kwargs):
if request.if_none_match and etag in request.if_none_match:
2020-02-15 15:41:11 +01:00
return "", 304
response = send_file(fp, **kwargs)
response.set_etag(etag)
fp.seek(0)
return response
def send_image(image):
2020-02-15 15:41:11 +01:00
return send_file_with_etag(
image["buffer"], image["etag"], mimetype=image["mimetype"]
)
2020-02-15 15:41:11 +01:00
app = Flask(
__name__, static_folder="frontend/dist/static", template_folder="frontend/dist"
)
app.config["SEND_FILE_MAX_AGE_DEFAULT"] = 604800 # 1 week
2019-07-04 18:06:44 +02:00
CORS(app)
db = CalibreDB()
# kind of redundant, but avoids returning 200 if page does not exist
2020-02-15 15:41:11 +01:00
@app.route("/")
@app.route("/series/<id>")
@app.route("/volume/<id>")
2019-07-04 18:06:44 +02:00
def serve_app(**kwargs):
2020-02-15 15:41:11 +01:00
return render_template("index.html")
2019-07-04 18:06:44 +02:00
2020-02-15 15:41:11 +01:00
@app.route("/api/series")
2019-07-04 18:06:44 +02:00
def get_series_list():
return jsonify(list(db.get_series_list()))
2020-02-15 15:41:11 +01:00
@app.route("/api/series/<int:series_id>/cover")
2019-07-04 18:06:44 +02:00
def get_series_cover(series_id):
return send_from_cwd(db.get_series_cover(series_id))
2020-02-15 15:41:11 +01:00
@app.route("/api/series/<int:series_id>/cover/thumbnail")
2019-07-04 18:06:44 +02:00
def get_series_cover_thumbnail(series_id):
thumbnail = db.get_series_cover_thumbnail(series_id)
return send_image(thumbnail)
2019-07-04 18:06:44 +02:00
2020-02-15 15:41:11 +01:00
@app.route("/api/series/<int:series_id>")
2019-07-04 18:06:44 +02:00
def get_series_info(series_id):
return jsonify(db.get_series_volumes(series_id))
2020-02-15 15:41:11 +01:00
@app.route("/api/volume/<int:volume_id>/cover")
2019-07-04 18:06:44 +02:00
def get_volume_cover(volume_id):
return send_from_cwd(db.get_volume_cover(volume_id))
2020-02-15 15:41:11 +01:00
@app.route("/api/volume/<int:volume_id>/cover/thumbnail")
2019-07-04 18:06:44 +02:00
def get_volume_cover_thumbnail(volume_id):
thumbnail = db.get_volume_cover_thumbnail(volume_id)
return send_image(thumbnail)
2019-07-04 18:06:44 +02:00
2020-02-15 15:41:11 +01:00
@app.route("/api/volume/<int:volume_id>")
2019-07-04 18:06:44 +02:00
def get_volume_info(volume_id):
return jsonify(db.get_volume_info(volume_id))
2020-02-15 15:41:11 +01:00
@app.route("/api/volume/<int:volume_id>/page/<int:page_number>")
2019-07-04 18:06:44 +02:00
def get_volume_page(volume_id, page_number):
page = db.get_volume_page(volume_id, page_number)
return send_image(page)
2019-07-04 18:06:44 +02:00
2020-02-15 15:41:11 +01:00
@app.route("/api/volume/<int:volume_id>/page/<int:page_number>/original")
2019-12-22 17:29:00 +01:00
def get_volume_page_original(volume_id, page_number):
page = db.get_volume_page(volume_id, page_number, original=True)
return send_image(page)
2019-07-04 18:06:44 +02:00
2020-02-15 15:41:11 +01:00
if __name__ == "__main__":
app.run(host="0.0.0.0")