|
|
|
@ -7,21 +7,19 @@ from collections import defaultdict
|
|
|
|
|
from urllib.parse import urlparse
|
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
from photoapp.thumbtool import ThumbGenerator
|
|
|
|
|
from photoapp.types import Photo, PhotoSet, Tag, TagItem, PhotoStatus, User, mime2ext, regular_mimes, video_mimes
|
|
|
|
|
from photoapp.types import APPROOT, Photo, PhotoSet, Tag, TagItem, PhotoStatus, User, mime2ext, \
|
|
|
|
|
regular_mimes, video_mimes
|
|
|
|
|
from photoapp.dbsession import DatabaseSession
|
|
|
|
|
from photoapp.common import pwhash
|
|
|
|
|
from photoapp.api import PhotosApi, LibraryManager
|
|
|
|
|
from photoapp.dbutils import SAEnginePlugin, SATool, db, get_db_engine, date_format
|
|
|
|
|
from photoapp.utils import auth, require_auth, photoset_auth_filter, slugify, cherryparam, number_format
|
|
|
|
|
from photoapp.storage import uri_to_storage
|
|
|
|
|
from photoapp.webutils import validate_password
|
|
|
|
|
from photoapp.webutils import validate_password, serve_thumbnail_placeholder
|
|
|
|
|
from jinja2 import Environment, FileSystemLoader, select_autoescape
|
|
|
|
|
from sqlalchemy import desc, func, and_, or_
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
APPROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PhotosWeb(object):
|
|
|
|
|
"""
|
|
|
|
|
Http root of the UI webserver
|
|
|
|
@ -272,14 +270,15 @@ class ThumbnailView(object):
|
|
|
|
|
t = vtypes.pop() # TODO arbitrary
|
|
|
|
|
thumb_from = formats[t][0] # TODO arbitrary
|
|
|
|
|
|
|
|
|
|
if not thumb_from: # no format we know how to make a thumbnail from was found
|
|
|
|
|
return serve_thumbnail_placeholder()
|
|
|
|
|
|
|
|
|
|
thumb_fobj = self.master.thumbtool.make_thumb(thumb_from, thumb_size)
|
|
|
|
|
|
|
|
|
|
if thumb_fobj:
|
|
|
|
|
return cherrypy.lib.static.serve_fileobj(thumb_fobj, "image/jpeg")
|
|
|
|
|
else:
|
|
|
|
|
cherrypy.response.headers["Cache-Control"] = "no-store, must-revalidate, max-age=0"
|
|
|
|
|
cherrypy.response.headers["Age"] = "0"
|
|
|
|
|
return cherrypy.lib.static.serve_file(os.path.join(APPROOT, "assets/img/unknown.svg"), "image/svg+xml")
|
|
|
|
|
else: # thumb creation failed or in progress
|
|
|
|
|
return serve_thumbnail_placeholder(True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@cherrypy.popargs('item_type', 'uuid')
|
|
|
|
|