From e727561355eee19f74e44a5c3ae9b922bf320212 Mon Sep 17 00:00:00 2001 From: Felix Stupp Date: Wed, 17 Aug 2022 23:54:12 +0000 Subject: [PATCH] Add route for media thumbnails --- server/app.py | 22 ++++++++++++++++++++++ server/static/thumbnail_missing.webp | Bin 0 -> 540 bytes 2 files changed, 22 insertions(+) create mode 100644 server/static/thumbnail_missing.webp diff --git a/server/app.py b/server/app.py index 5055b0c..aa71226 100644 --- a/server/app.py +++ b/server/app.py @@ -6,6 +6,7 @@ from __future__ import annotations import datetime from functools import partial +import io import itertools import logging import os @@ -28,6 +29,7 @@ from flask import ( make_response, redirect, request, + send_file, ) from flask.templating import render_template from markupsafe import Markup @@ -352,6 +354,26 @@ def show_media(media_id): return render_template("media_element.htm", element=element) +@flask_app.route("/media//thumbnail") +def show_media_thumb(media_id: int): + element: MediaElement = MediaElement.get(id=media_id) + if element is None: + # TODO add default thumbnail if not found + return make_response(f"Not found", 404) + if element.thumbnail is None: + return redirect("/static/thumbnail_missing.webp") + thumb = element.thumbnail + # TODO do not load data from database until send_file requires that + return send_file( + io.BytesIO(thumb.receive_data()), + mimetype=thumb.mime_type, + etag=True, + as_attachment=False, + last_modified=thumb.last_downloaded, + cache_timeout=24 * 60 * 60, + ) + + @flask_app.route("/recommendations/simple/binge") @flask_app.route("/recommendations/simple/binge/") def recommend_binge(random_val: int = None): diff --git a/server/static/thumbnail_missing.webp b/server/static/thumbnail_missing.webp new file mode 100644 index 0000000000000000000000000000000000000000..14d84c406d8f82fb1a6bdbc7f31927e5620aa46f GIT binary patch literal 540 zcmV+%0^|KsNk&E#0ssJ4MM6+kP&gn60ssJT4FH`1DtG`x06sAghC?DD3(mL@0fJgU z0l!T$FH2fVug~30=F4cWwi_7XQZqt*TZaXzO!sx~OeGy~l)|cj(+@r=A$={h1ig+? zaI5N=k`F-}O%{rMP=TNKGnG-G%TEYz6d9?J28g>x$69JJIJy7;{`%t^tWoZ2B~4Ut zqNj?fHpnVO*;GAY>FRN$tPYIvlvSOcS)1dBv2V$aRyrgxC5@xcjq}v@#uz&8Rd{yO zfd5GsdtW^fav~>+$f{!MMdBHyy!@04w;=`fP@pBya0N3&r3%_+9Tsys*1C2xp+&Bu zita&Gb_o}U|5Hg6`$qHM=(-(ofmm6Mjz~PpZb#m8e`5E5M<(N+2W*8ye@y_tro!jx z_iTk#SH2fMXfYZMcjM&6q~|*cS+8LKE1;t9n1NB8yxIsJ%N)xg8(HP0z!@=Z#oNNZ zReM5pEiC=$ec@HP97x$DrTLm;Owt?9M~+&6mpxrJlfBmSk9SN#=P$;!c}zJ9gWjn7#l6VEQfINTz0002tBKExi literal 0 HcmV?d00001