mirror of
https://github.com/9001/copyparty.git
synced 2025-08-18 09:22:31 -06:00
85 lines
2.3 KiB
Python
85 lines
2.3 KiB
Python
# coding: utf-8
|
|
from __future__ import print_function, unicode_literals
|
|
|
|
import os
|
|
|
|
from .util import Cooldown
|
|
from .th_srv import thumb_path, THUMBABLE, FMT_FFV, FMT_FFA
|
|
from .bos import bos
|
|
|
|
|
|
class ThumbCli(object):
|
|
def __init__(self, hsrv):
|
|
self.broker = hsrv.broker
|
|
self.log_func = hsrv.log
|
|
self.args = hsrv.args
|
|
self.asrv = hsrv.asrv
|
|
|
|
# cache on both sides for less broker spam
|
|
self.cooldown = Cooldown(self.args.th_poke)
|
|
|
|
def log(self, msg, c=0):
|
|
self.log_func("thumbcli", msg, c)
|
|
|
|
def get(self, ptop, rem, mtime, fmt):
|
|
ext = rem.rsplit(".")[-1].lower()
|
|
if ext not in THUMBABLE:
|
|
return None
|
|
|
|
is_vid = ext in FMT_FFV
|
|
if is_vid and self.args.no_vthumb:
|
|
return None
|
|
|
|
want_opus = fmt in ("opus", "caf")
|
|
is_au = ext in FMT_FFA
|
|
if is_au:
|
|
if want_opus:
|
|
if self.args.no_acode:
|
|
return None
|
|
else:
|
|
if self.args.no_athumb:
|
|
return None
|
|
elif want_opus:
|
|
return None
|
|
|
|
if rem.startswith(".hist/th/") and rem.split(".")[-1] in ["webp", "jpg"]:
|
|
return os.path.join(ptop, rem)
|
|
|
|
if fmt == "j" and self.args.th_no_jpg:
|
|
fmt = "w"
|
|
|
|
if fmt == "w":
|
|
if self.args.th_no_webp or ((is_vid or is_au) and self.args.th_ff_jpg):
|
|
fmt = "j"
|
|
|
|
histpath = self.asrv.vfs.histtab.get(ptop)
|
|
if not histpath:
|
|
self.log("no histpath for [{}]".format(ptop))
|
|
return None
|
|
|
|
tpath = thumb_path(histpath, rem, mtime, fmt)
|
|
ret = None
|
|
try:
|
|
st = bos.stat(tpath)
|
|
if st.st_size:
|
|
ret = tpath
|
|
else:
|
|
return None
|
|
except:
|
|
pass
|
|
|
|
if ret:
|
|
tdir = os.path.dirname(tpath)
|
|
if self.cooldown.poke(tdir):
|
|
self.broker.put(False, "thumbsrv.poke", tdir)
|
|
|
|
if want_opus:
|
|
# audio files expire individually
|
|
if self.cooldown.poke(tpath):
|
|
self.broker.put(False, "thumbsrv.poke", tpath)
|
|
|
|
return ret
|
|
|
|
x = self.broker.put(True, "thumbsrv.get", ptop, rem, mtime, fmt)
|
|
return x.get()
|