81 lines
2.9 KiB
Python
81 lines
2.9 KiB
Python
from wtforms import SubmitField, StringField, HiddenField, validators, Form
|
|
from flask_wtf import FlaskForm
|
|
from flask import request, render_template, redirect
|
|
from main import db, app, ma
|
|
from sqlalchemy import Sequence
|
|
from sqlalchemy.exc import SQLAlchemyError
|
|
from status import st, Status
|
|
import os
|
|
from os import path
|
|
import glob
|
|
from PIL import Image
|
|
from pymediainfo import MediaInfo
|
|
|
|
from settings import Settings
|
|
|
|
|
|
################################################################################
|
|
# Class describing Author in the database, and via sqlalchemy, connected to the DB as well
|
|
################################################################################
|
|
|
|
# photos might not be the best name... more than just photos live in this class currently
|
|
class Photos(db.Model):
|
|
id = db.Column(db.Integer, db.Sequence('photos_id_seq'), primary_key=True )
|
|
name = db.Column(db.String, unique=True, nullable=False )
|
|
type = db.Column(db.String, unique=False, nullable=False)
|
|
size = db.Column(db.Integer, unique=False, nullable=False)
|
|
# hash might not be unique, this could be the source of dupe problems
|
|
hash = db.Column(db.Integer, unique=True, nullable=False)
|
|
|
|
def __repr__(self):
|
|
return "<id: {}, name: {}>".format(self.id, self.name )
|
|
|
|
################################################################################
|
|
# /photos -> show photos from import_path(s)
|
|
################################################################################
|
|
@app.route("/photos", methods=["GET"])
|
|
def photos():
|
|
sets = Settings.query.filter(Settings.name=="import_path").all()
|
|
paths= sets[0].value.split("#")
|
|
file_list=[]
|
|
file_types = {}
|
|
view_path=""
|
|
for p in paths:
|
|
if p.startswith('c:'):
|
|
p = p.replace('/', '\\')
|
|
if( path.exists( p ) ):
|
|
view_path = p
|
|
file_list.append(glob.glob(view_path + '**', recursive=True))
|
|
for file in file_list[0]:
|
|
if os.path.isdir(file):
|
|
file_types[file] = 'Directory'
|
|
elif isImage(file):
|
|
file_types[file] = 'Image'
|
|
elif isVideo(file):
|
|
file_types[file] = 'Video'
|
|
else:
|
|
file_types[file] = 'File'
|
|
print(file_types)
|
|
|
|
return render_template("photos.html", page_title='View Photos', view_path=view_path, alert=st.GetAlert(), message=st.GetMessage() )
|
|
return render_template("photos.html", page_title='View Photos', view_path=view_path, file_list=file_list, alert=st.GetAlert(), message=st.GetMessage() )
|
|
|
|
|
|
def isImage(file):
|
|
try:
|
|
img = Image.open(file)
|
|
return True
|
|
except:
|
|
print('not an image')
|
|
return False
|
|
|
|
def isVideo(file):
|
|
try:
|
|
fileInfo = MediaInfo.parse(file)
|
|
for track in fileInfo.tracks:
|
|
if track.track_type == "Video":
|
|
return True
|
|
return False
|
|
except:
|
|
return False
|