from pathlib import Path from flask import Blueprint, send_from_directory from app.settings import APP_DIR api = Blueprint("imgserver", __name__, url_prefix="/img") SUPPORTED_IMAGES = (".jpg", ".png", ".webp", ".jpeg") APP_DIR = Path(APP_DIR) IMG_PATH = APP_DIR / "images" ASSETS_PATH = APP_DIR / "assets" THUMB_PATH = IMG_PATH / "thumbnails" LG_THUMB_PATH = THUMB_PATH / "large" SM_THUMB_PATH = THUMB_PATH / "small" ARTIST_PATH = IMG_PATH / "artists" ARTIST_LG_PATH = ARTIST_PATH / "large" ARTIST_SM_PATH = ARTIST_PATH / "small" PLAYLIST_PATH = IMG_PATH / "playlists" @api.route("/") def hello(): return "

Image Server

" def send_fallback_img(filename: str = "default.webp"): img = ASSETS_PATH / filename if not img.exists(): return "", 404 return send_from_directory(ASSETS_PATH, filename) @api.route("/t/") def send_lg_thumbnail(imgpath: str): fpath = LG_THUMB_PATH / imgpath if fpath.exists(): return send_from_directory(LG_THUMB_PATH, imgpath) return send_fallback_img() @api.route("/t/s/") def send_sm_thumbnail(imgpath: str): fpath = SM_THUMB_PATH / imgpath if fpath.exists(): return send_from_directory(SM_THUMB_PATH, imgpath) return send_fallback_img() @api.route("/a/") def send_lg_artist_image(imgpath: str): fpath = ARTIST_LG_PATH / imgpath if fpath.exists(): return send_from_directory(ARTIST_LG_PATH, imgpath) return send_fallback_img("artist.webp") @api.route("/a/s/") def send_sm_artist_image(imgpath: str): fpath = ARTIST_SM_PATH / imgpath if fpath.exists(): return send_from_directory(ARTIST_SM_PATH, imgpath) return send_fallback_img("artist.webp") @api.route("/p/") def send_playlist_image(imgpath: str): fpath = PLAYLIST_PATH / imgpath if fpath.exists(): return send_from_directory(PLAYLIST_PATH, imgpath) return send_fallback_img("playlist.svg") # @app.route("/raw") # @app.route("/raw/") # def send_from_filepath(imgpath: str = ""): # imgpath = "/" + imgpath # filename = path.basename(imgpath) # def verify_is_image(): # _, ext = path.splitext(filename) # return ext in SUPPORTED_IMAGES # verified = verify_is_image() # if not verified: # return imgpath, 404 # exists = path.exists(imgpath) # if verified and exists: # return send_from_directory(path.dirname(imgpath), filename) # return imgpath, 404 # def serve_imgs(): # app.run(threaded=True, port=1971, host="0.0.0.0", debug=True)