From 3900075ab4c4486f82af9f0931db9808fb6a901c Mon Sep 17 00:00:00 2001 From: dave Date: Sat, 15 Sep 2018 16:48:47 -0700 Subject: [PATCH] support offsetting photo dates --- photoapp/daemon.py | 2 +- photoapp/image.py | 2 +- photoapp/ingest.py | 6 ++++-- photoapp/types.py | 13 ++++++++++++- setup.py | 3 ++- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/photoapp/daemon.py b/photoapp/daemon.py index e9612bd..32979bc 100644 --- a/photoapp/daemon.py +++ b/photoapp/daemon.py @@ -286,7 +286,7 @@ class TagView(object): s = self.master.session() tag = s.query(Tag).filter(Tag.uuid == uuid).first() numphotos = s.query(func.count(Tag.id)).join(TagItem).join(PhotoSet).filter(Tag.uuid == uuid).scalar() - photos = s.query(PhotoSet).join(TagItem).join(Tag).filter(Tag.uuid == uuid).offset(page * pgsize).limit(pgsize).all() + photos = s.query(PhotoSet).join(TagItem).join(Tag).filter(Tag.uuid == uuid).order_by(PhotoSet.date.desc()).offset(page * pgsize).limit(pgsize).all() yield self.master.render("album.html", tag=tag, images=photos, total_items=numphotos, pgsize=100, page=page) @cherrypy.expose diff --git a/photoapp/image.py b/photoapp/image.py index abe7c24..4b697d2 100644 --- a/photoapp/image.py +++ b/photoapp/image.py @@ -26,7 +26,7 @@ def get_jpg_info(fpath): photo = Photo(hash=get_hash(fpath), path=fpath, format=mime, size=size, width=dimensions[0], height=dimensions[1], orientation=orientation) - return PhotoSet(date=date, lat=lat, lon=lon, files=[photo]) + return PhotoSet(date=date, date_real=date, lat=lat, lon=lon, files=[photo]) def get_mtime(fpath): diff --git a/photoapp/ingest.py b/photoapp/ingest.py index 8b2fac7..df54ebe 100644 --- a/photoapp/ingest.py +++ b/photoapp/ingest.py @@ -80,7 +80,8 @@ def batch_ingest(library, files): if foundmatch: break if not foundmatch: - photos.append(PhotoSet(date=get_mtime(item), lat=0, lon=0, files=[itemmeta])) + mtime = get_mtime(item) + photos.append(PhotoSet(date=mtime, date_real=mtime, lat=0, lon=0, files=[itemmeta])) done += 1 pprogress(done, total) # TODO prune any xmp without an associated regular image or cr2 @@ -90,7 +91,8 @@ def batch_ingest(library, files): for item in chain(*[byext[ext] for ext in files_video]): itemmeta = Photo(hash=get_hash(item), path=item, size=os.path.getsize(item), format=special_magic(item)) - photos.append(PhotoSet(date=get_mtime(item), lat=0, lon=0, files=[itemmeta])) + mtime = get_mtime(item) + photos.append(PhotoSet(date=mtime, date_real=mtime, lat=0, lon=0, files=[itemmeta])) done += 1 pprogress(done, total) diff --git a/photoapp/types.py b/photoapp/types.py index a764a60..5b2e911 100644 --- a/photoapp/types.py +++ b/photoapp/types.py @@ -1,20 +1,29 @@ -from sqlalchemy import Column, Integer, String, DateTime, Unicode, DECIMAL, ForeignKey, Boolean +from sqlalchemy import Column, Integer, String, DateTime, Unicode, DECIMAL, ForeignKey, Boolean, Enum from sqlalchemy.orm import relationship from sqlalchemy.schema import UniqueConstraint from sqlalchemy.ext.declarative import declarative_base from datetime import datetime import uuid +import enum Base = declarative_base() +class PhotoStatus(enum.Enum): + private = 0 + public = 1 + hidden = 2 + + class PhotoSet(Base): __tablename__ = 'photos' id = Column(Integer, primary_key=True) uuid = Column(Unicode, unique=True, default=lambda: str(uuid.uuid4())) date = Column(DateTime) + date_real = Column(DateTime) + date_offset = Column(Integer, default=0) # minutes lat = Column(DECIMAL(precision=11)) lon = Column(DECIMAL(precision=11)) @@ -24,6 +33,8 @@ class PhotoSet(Base): title = Column(String) description = Column(String) + status = Column(Enum(PhotoStatus), default=PhotoStatus.private) + class Photo(Base): __tablename__ = 'files' diff --git a/setup.py b/setup.py index 6c65faa..af628f3 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,8 @@ setup(name='photoapp', "photoappd = photoapp.daemon:main", "photoimport = photoapp.ingest:main", "photovalidate = photoapp.validate:main", - "photoinfo = photoapp.image:main" + "photoinfo = photoapp.image:main", + "photooffset = photoapp.dateoffset:main", ] }, include_package_data=True,