forked from rDrama/rDrama
dedup process_image code in comments.py
parent
89d11fdb2d
commit
c539a8280e
|
@ -1,9 +1,10 @@
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
import requests
|
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
|
import json
|
||||||
|
|
||||||
|
import requests
|
||||||
import ffmpeg
|
import ffmpeg
|
||||||
import gevent
|
import gevent
|
||||||
import imagehash
|
import imagehash
|
||||||
|
@ -14,10 +15,12 @@ from PIL import UnidentifiedImageError
|
||||||
from PIL.ImageSequence import Iterator
|
from PIL.ImageSequence import Iterator
|
||||||
|
|
||||||
from files.classes.media import *
|
from files.classes.media import *
|
||||||
|
from files.classes.badges import BadgeDef
|
||||||
from files.helpers.cloudflare import purge_files_in_cloudflare_cache
|
from files.helpers.cloudflare import purge_files_in_cloudflare_cache
|
||||||
from files.helpers.settings import get_setting
|
from files.helpers.settings import get_setting
|
||||||
|
|
||||||
from .config.const import *
|
from .config.const import *
|
||||||
|
from .regex import badge_name_regex
|
||||||
|
|
||||||
if SITE == 'watchpeopledie.tv':
|
if SITE == 'watchpeopledie.tv':
|
||||||
from rclone_python import rclone
|
from rclone_python import rclone
|
||||||
|
@ -44,7 +47,7 @@ def media_ratelimit(v):
|
||||||
print(STARS, flush=True)
|
print(STARS, flush=True)
|
||||||
abort(500)
|
abort(500)
|
||||||
|
|
||||||
def process_files(files, v, body, is_dm=False, dm_user=None):
|
def process_files(files, v, body, is_dm=False, dm_user=None, admigger_thread=None, comment_body=None):
|
||||||
if g.is_tor or not files.get("file"): return body
|
if g.is_tor or not files.get("file"): return body
|
||||||
files = files.getlist('file')[:20]
|
files = files.getlist('file')[:20]
|
||||||
|
|
||||||
|
@ -60,6 +63,8 @@ def process_files(files, v, body, is_dm=False, dm_user=None):
|
||||||
name = f'/images/{time.time()}'.replace('.','') + '.webp'
|
name = f'/images/{time.time()}'.replace('.','') + '.webp'
|
||||||
file.save(name)
|
file.save(name)
|
||||||
url = process_image(name, v)
|
url = process_image(name, v)
|
||||||
|
if admigger_thread:
|
||||||
|
process_admigger_entry(name, v, admigger_thread, comment_body)
|
||||||
elif file.content_type.startswith('video/'):
|
elif file.content_type.startswith('video/'):
|
||||||
url = process_video(file, v)
|
url = process_video(file, v)
|
||||||
elif file.content_type.startswith('audio/'):
|
elif file.content_type.startswith('audio/'):
|
||||||
|
@ -299,3 +304,43 @@ def delete_file(filename, url):
|
||||||
|
|
||||||
def send_file(filename):
|
def send_file(filename):
|
||||||
rclone.copy(filename, 'no:/videos', ignore_existing=True)
|
rclone.copy(filename, 'no:/videos', ignore_existing=True)
|
||||||
|
|
||||||
|
|
||||||
|
def process_sidebar_or_banner(oldname, v, type, resize):
|
||||||
|
li = sorted(os.listdir(f'files/assets/images/{SITE_NAME}/{type}'),
|
||||||
|
key=lambda e: int(e.split('.webp')[0]))[-1]
|
||||||
|
num = int(li.split('.webp')[0]) + 1
|
||||||
|
filename = f'files/assets/images/{SITE_NAME}/{type}/{num}.webp'
|
||||||
|
copyfile(oldname, filename)
|
||||||
|
process_image(filename, v, resize=resize)
|
||||||
|
|
||||||
|
def process_admigger_entry(oldname, v, admigger_thread, comment_body):
|
||||||
|
if admigger_thread == SIDEBAR_THREAD:
|
||||||
|
process_sidebar_or_banner(oldname, v, 'sidebar', 600)
|
||||||
|
elif admigger_thread == BANNER_THREAD:
|
||||||
|
banner_width = 1600
|
||||||
|
process_sidebar_or_banner(oldname, v, 'banners', banner_width)
|
||||||
|
elif admigger_thread == BADGE_THREAD:
|
||||||
|
try:
|
||||||
|
json_body = '{' + comment_body.split('{')[1].split('}')[0] + '}'
|
||||||
|
badge_def = json.loads(json_body)
|
||||||
|
name = badge_def["name"]
|
||||||
|
|
||||||
|
if len(name) > 50:
|
||||||
|
abort(400, "Badge name is too long (max 50 characters)")
|
||||||
|
|
||||||
|
if not badge_name_regex.fullmatch(name):
|
||||||
|
abort(400, "Invalid badge name!")
|
||||||
|
|
||||||
|
existing = g.db.query(BadgeDef).filter_by(name=name).one_or_none()
|
||||||
|
if existing: abort(409, "A badge with this name already exists!")
|
||||||
|
|
||||||
|
badge = BadgeDef(name=name, description=badge_def["description"])
|
||||||
|
g.db.add(badge)
|
||||||
|
g.db.flush()
|
||||||
|
filename = f'files/assets/images/{SITE_NAME}/badges/{badge.id}.webp'
|
||||||
|
copyfile(oldname, filename)
|
||||||
|
process_image(filename, v, resize=300, trim=True)
|
||||||
|
purge_files_in_cloudflare_cache(f"{SITE_FULL_IMAGES}/i/{SITE_NAME}/badges/{badge.id}.webp")
|
||||||
|
except Exception as e:
|
||||||
|
abort(400, str(e))
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import os
|
import os
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from json import loads
|
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
import random
|
import random
|
||||||
|
|
||||||
|
@ -182,69 +181,14 @@ def comment(v):
|
||||||
if parent_user.has_blocked(v) or parent_user.has_muted(v):
|
if parent_user.has_blocked(v) or parent_user.has_muted(v):
|
||||||
notify_op = False
|
notify_op = False
|
||||||
|
|
||||||
if request.files.get("file") and not g.is_tor:
|
if posting_to_post and v.admin_level >= PERMS['USE_ADMIGGER_THREADS'] and post_target.id in {SIDEBAR_THREAD, BANNER_THREAD, BADGE_THREAD}:
|
||||||
files = request.files.getlist('file')[:20]
|
admigger_thread = post_target.id
|
||||||
|
comment_body = body
|
||||||
|
else:
|
||||||
|
admigger_thread = None
|
||||||
|
comment_body = None
|
||||||
|
|
||||||
if files:
|
body = process_files(request.files, v, body, admigger_thread=admigger_thread, comment_body=comment_body)
|
||||||
media_ratelimit(v)
|
|
||||||
|
|
||||||
for file in files:
|
|
||||||
if f'[{file.filename}]' not in body:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if file.content_type.startswith('image/'):
|
|
||||||
oldname = f'/images/{time.time()}'.replace('.','') + '.webp'
|
|
||||||
file.save(oldname)
|
|
||||||
image = process_image(oldname, v)
|
|
||||||
if image == "": abort(400, "Image upload failed")
|
|
||||||
if posting_to_post and v.admin_level >= PERMS['USE_ADMIGGER_THREADS']:
|
|
||||||
def process_sidebar_or_banner(type, resize=0):
|
|
||||||
li = sorted(os.listdir(f'files/assets/images/{SITE_NAME}/{type}'),
|
|
||||||
key=lambda e: int(e.split('.webp')[0]))[-1]
|
|
||||||
num = int(li.split('.webp')[0]) + 1
|
|
||||||
filename = f'files/assets/images/{SITE_NAME}/{type}/{num}.webp'
|
|
||||||
copyfile(oldname, filename)
|
|
||||||
process_image(filename, v, resize=resize)
|
|
||||||
|
|
||||||
if post_target.id == SIDEBAR_THREAD:
|
|
||||||
process_sidebar_or_banner('sidebar', 600)
|
|
||||||
elif post_target.id == BANNER_THREAD:
|
|
||||||
banner_width = 1600
|
|
||||||
process_sidebar_or_banner('banners', banner_width)
|
|
||||||
elif post_target.id == BADGE_THREAD:
|
|
||||||
try:
|
|
||||||
json_body = '{' + body.split('{')[1].split('}')[0] + '}'
|
|
||||||
badge_def = loads(json_body)
|
|
||||||
name = badge_def["name"]
|
|
||||||
|
|
||||||
if len(name) > 50:
|
|
||||||
abort(400, "Badge name is too long (max 50 characters)")
|
|
||||||
|
|
||||||
if not badge_name_regex.fullmatch(name):
|
|
||||||
abort(400, "Invalid badge name!")
|
|
||||||
|
|
||||||
existing = g.db.query(BadgeDef).filter_by(name=name).one_or_none()
|
|
||||||
if existing: abort(409, "A badge with this name already exists!")
|
|
||||||
|
|
||||||
badge = BadgeDef(name=name, description=badge_def["description"])
|
|
||||||
g.db.add(badge)
|
|
||||||
g.db.flush()
|
|
||||||
filename = f'files/assets/images/{SITE_NAME}/badges/{badge.id}.webp'
|
|
||||||
copyfile(oldname, filename)
|
|
||||||
process_image(filename, v, resize=300, trim=True)
|
|
||||||
purge_files_in_cloudflare_cache(f"{SITE_FULL_IMAGES}/i/{SITE_NAME}/badges/{badge.id}.webp")
|
|
||||||
cache.delete_memoized(badge_list)
|
|
||||||
except Exception as e:
|
|
||||||
abort(400, str(e))
|
|
||||||
body = body.replace(f'[{file.filename}]', f' {image} ', 1)
|
|
||||||
elif file.content_type.startswith('video/'):
|
|
||||||
body = body.replace(f'[{file.filename}]', f' {process_video(file, v)} ', 1)
|
|
||||||
elif file.content_type.startswith('audio/'):
|
|
||||||
body = body.replace(f'[{file.filename}]', f' {SITE_FULL}{process_audio(file, v)} ', 1)
|
|
||||||
else:
|
|
||||||
abort(415)
|
|
||||||
|
|
||||||
body = body.strip()
|
|
||||||
if len(body) > COMMENT_BODY_LENGTH_LIMIT:
|
if len(body) > COMMENT_BODY_LENGTH_LIMIT:
|
||||||
abort(400, f'Comment body is too long (max {COMMENT_BODY_LENGTH_LIMIT} characters)')
|
abort(400, f'Comment body is too long (max {COMMENT_BODY_LENGTH_LIMIT} characters)')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue