You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
5.1 KiB
184 lines
5.1 KiB
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""-------------------------------------------------------------------------------------------
|
|
-- IMPORTS
|
|
-------------------------------------------------------------------------------------------"""
|
|
|
|
""" --- PYTHON IMPORTS --- """
|
|
import os, pathlib
|
|
from os.path import dirname, abspath
|
|
|
|
""" --- STASHR CORE IMPORTS --- """
|
|
from stashr import database as stashr_database
|
|
from stashr.stashr import stashr_image_downloaded
|
|
from stashr.api import create_json_return, api
|
|
|
|
""" --- STASHR PLUGIN IMPORTS --- """
|
|
from . import thumbnailer, tasks, forms
|
|
from .config import thumbconfig
|
|
|
|
""" --- FLASK EXTENSION IMPORTS --- """
|
|
from flask_login import current_user
|
|
|
|
""" --- STASHR DEPENDENCY IMPORTS --- """
|
|
from flask import Blueprint, render_template, request, flash, redirect, url_for
|
|
from flask_login import login_required, current_user
|
|
|
|
"""-------------------------------------------------------------------------------------------
|
|
-- PLUGIN
|
|
-------------------------------------------------------------------------------------------"""
|
|
|
|
# PLUGIN DETAILS
|
|
__plugin_name__ = "Image Thumbnailer"
|
|
__version__ = "0.1.0"
|
|
__author__ = "Stashr"
|
|
__description__ = "Shrink image filesize"
|
|
|
|
"""------------------------------
|
|
- PLUGIN ROUTES
|
|
------------------------------"""
|
|
|
|
""" --- DEFINE BLUEPRINT --- """
|
|
bp = Blueprint('thumbnailer', __name__, root_path=dirname(abspath(__file__)), template_folder='templates', static_folder='static')
|
|
|
|
""" --- PAGES --- """
|
|
|
|
@bp.route('/settings', methods=['GET', 'POST'])
|
|
@login_required
|
|
def thumbnailer_settings_page():
|
|
|
|
if current_user.role != 'admin':
|
|
flash('Permission Denied', 'error')
|
|
return redirect(url_for('index_page'))
|
|
|
|
settings_form = forms.settings_form()
|
|
|
|
if request.method == 'POST':
|
|
if settings_form.validate():
|
|
thumbconfig['THUMBNAILER']['max_width'] = settings_form.max_width.data
|
|
thumbconfig['THUMBNAILER']['quality'] = settings_form.quality.data
|
|
thumbconfig['THUMBNAILER']['save_original_file'] = settings_form.save_original_file.data
|
|
thumbconfig.write()
|
|
flash('Thumbnailer Settings Updated', 'success')
|
|
else:
|
|
for error in settings_form.errors.items():
|
|
flash(f'{error[0]}: {error[1]}', 'error')
|
|
|
|
return render_template(
|
|
'thumbnailer_settings.html',
|
|
settings_form=settings_form,
|
|
title='Thumbnailer Settings'
|
|
)
|
|
|
|
|
|
""" --- API --- """
|
|
|
|
# SCAN IMAGES
|
|
@bp.route('/api/scan', methods=['POST'])
|
|
def api_post_scan_images():
|
|
|
|
user = current_user
|
|
|
|
if not user.is_authenticated:
|
|
if not request.json:
|
|
return create_json_return('400')
|
|
if "api_key" not in request.json:
|
|
return create_json_return('400')
|
|
if request.json['api_key'] == "":
|
|
return create_json_return('100')
|
|
|
|
user = stashr_database.session \
|
|
.query(stashr_database.Users) \
|
|
.filter(stashr_database.Users.api_key == request.json['api_key']) \
|
|
.first()
|
|
|
|
if user is None:
|
|
return create_json_return('100')
|
|
|
|
if user.role.lower() != 'admin':
|
|
return create_json_return('401')
|
|
|
|
tasks.scan_images_task()
|
|
|
|
return create_json_return('200')
|
|
|
|
|
|
# PROCESS IMAGES
|
|
@bp.route('/api/process/images', methods=['POST'])
|
|
def api_post_process_images():
|
|
|
|
user = current_user
|
|
|
|
if not user.is_authenticated:
|
|
if not request.json:
|
|
return create_json_return('400')
|
|
if "api_key" not in request.json:
|
|
return create_json_return('400')
|
|
if request.json['api_key'] == "":
|
|
return create_json_return('100')
|
|
|
|
user = stashr_database.session \
|
|
.query(stashr_database.Users) \
|
|
.filter(stashr_database.Users.api_key == request.json['api_key']) \
|
|
.first()
|
|
|
|
if user is None:
|
|
return create_json_return('100')
|
|
|
|
if user.role.lower() != 'admin':
|
|
return create_json_return('401')
|
|
|
|
tasks.process_images_task()
|
|
|
|
return create_json_return('200')
|
|
|
|
|
|
@bp.route('/api/settings', methods=['GET'])
|
|
def api_get_settings():
|
|
|
|
user = current_user
|
|
|
|
if not user.is_authenticated:
|
|
api_key = request.args.get('api_key')
|
|
if api_key == "":
|
|
return create_json_return('100')
|
|
user = stashr_database.session \
|
|
.query(stashr_database.Users) \
|
|
.filter(stashr_database.Users.api_key == api_key) \
|
|
.first()
|
|
|
|
if user is None:
|
|
return create_json_return('100')
|
|
|
|
if user.role.lower() != 'admin':
|
|
return create_json_return('401')
|
|
|
|
settings = thumbconfig
|
|
|
|
return create_json_return('200', results=settings)
|
|
|
|
|
|
"""------------------------------
|
|
- PLUGIN FUNCTIONS
|
|
------------------------------"""
|
|
|
|
@stashr_image_downloaded.connect
|
|
def do_something(*args, **kwargs):
|
|
pass
|
|
|
|
|
|
"""------------------------------
|
|
- REGISTER PLUGIN
|
|
------------------------------"""
|
|
|
|
def register():
|
|
return dict(
|
|
bep=dict(
|
|
blueprint=bp,
|
|
prefix='/thumbnailer'
|
|
),
|
|
tep = dict(
|
|
settings_menu='thumbnailer_tep_settings_menu.html',
|
|
)
|
|
) |