From d695d3a0a5cbc094f8acd40b565dd0658c33522b Mon Sep 17 00:00:00 2001 From: dave Date: Mon, 1 Aug 2022 22:07:44 -0700 Subject: [PATCH] add recent/nearby photos --- photoapp/daemon.py | 27 +++++++++++++++++++++++++-- photoapp/image.py | 4 ++-- styles/less/main.less | 4 ++-- templates/photo.html | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 6 deletions(-) diff --git a/photoapp/daemon.py b/photoapp/daemon.py index a2a3196..93ea69b 100644 --- a/photoapp/daemon.py +++ b/photoapp/daemon.py @@ -17,7 +17,7 @@ from photoapp.utils import auth, require_auth, photoset_auth_filter, slugify, ch from photoapp.storage import uri_to_storage from photoapp.webutils import validate_password, serve_thumbnail_placeholder from jinja2 import Environment, FileSystemLoader, select_autoescape -from sqlalchemy import desc, func, and_, or_ +from sqlalchemy import desc, asc, func, and_, or_ class PhotosWeb(object): @@ -322,7 +322,30 @@ class PhotoView(object): PhotoSet.slug == uuid)).first() if not photo: raise cherrypy.HTTPError(404) - yield self.master.render("photo.html", image=photo) + + if photo.lat: + nearby_photos = photoset_auth_filter(db.query(PhotoSet)) \ + .filter(PhotoSet.lat.isnot(None)) \ + .filter(PhotoSet.lon.isnot(None)) \ + .filter(PhotoSet.id != photo.id) \ + .order_by(func.sqrt(func.pow(PhotoSet.lat - photo.lat, 2) + + func.pow(PhotoSet.lon - photo.lon, 2))) \ + .limit(25).all() + else: + nearby_photos = [] + + before = photoset_auth_filter(db.query(PhotoSet)) \ + .filter(PhotoSet.date > photo.date) \ + .order_by(PhotoSet.date.asc()) \ + .limit(13).all() + before.reverse() + recent_photos = before + \ + photoset_auth_filter(db.query(PhotoSet)) \ + .filter(PhotoSet.date <= photo.date) \ + .order_by(PhotoSet.date.desc()) \ + .limit(12).all() + + yield self.master.render("photo.html", image=photo, nearby=nearby_photos, recent=recent_photos) @cherrypy.expose @require_auth diff --git a/photoapp/image.py b/photoapp/image.py index fbc2d53..bf3dad5 100644 --- a/photoapp/image.py +++ b/photoapp/image.py @@ -16,8 +16,8 @@ def get_jpg_info(fpath): if date is None: raise Exception("No date found, panicing for unknown reasons!") - # gps is set to 0,0 if unavailable - lat, lon = gps or [None, None] + # gps is set to None, None if unavailable + lat, lon = gps if gps and 0 not in gps else [None, None] dimensions = dimensions or (None, None) mime = magic.from_file(fpath, mime=True) size = os.path.getsize(fpath) diff --git a/styles/less/main.less b/styles/less/main.less index c723c2f..510ad2b 100644 --- a/styles/less/main.less +++ b/styles/less/main.less @@ -203,7 +203,7 @@ a { display: block; } - &:hover { + &:hover, &.current-photo { border: 3px solid #252a3a; width: 256px; height: 256px; @@ -330,7 +330,7 @@ ul.form-pager { font-size: 12px; } } - &:hover { + &:hover, &.current-photo { border: 3px solid #252a3a; width: 106px; height: 106px; diff --git a/templates/photo.html b/templates/photo.html index f2a9f74..bd2fca1 100644 --- a/templates/photo.html +++ b/templates/photo.html @@ -139,4 +139,36 @@ +{% if nearby %} +
+
+

Nearby

+
+ {% for i in nearby %} +
+ + + +
+ {% endfor %} +
+
+
+{% endif %} +{% if recent %} +
+
+

Recent

+
+ {% for i in recent %} +
+ + + +
+ {% endfor %} +
+
+
+{% endif %} {% endblock %}