summaryrefslogtreecommitdiff
path: root/fbin/fbin.py
diff options
context:
space:
mode:
Diffstat (limited to 'fbin/fbin.py')
-rwxr-xr-xfbin/fbin.py52
1 files changed, 28 insertions, 24 deletions
diff --git a/fbin/fbin.py b/fbin/fbin.py
index 983c1aa..d1dff76 100755
--- a/fbin/fbin.py
+++ b/fbin/fbin.py
@@ -359,33 +359,37 @@ def videos():
@app.route('/t/<hash:hash>')
@app.route('/thumb/<hash:hash>')
def thumb(hash):
- thumbfile = os.path.join(current_app.config['THUMB_DIRECTORY'], hash + '.jpg')
- if not os.access(thumbfile, os.F_OK):
- f = get_file(hash, update_accessed = False)
- if f.is_image():
- try:
- #im = Image.open(f.get_path())
+ f = get_file(hash, update_accessed=False)
+ response = storage.get_thumbnail(f)
+ if not response:
+ with tempfile.NamedTemporaryFile(suffix='.jpg') as ttf: # temporary thumb file
+ if f.is_image():
+ try:
+ with storage.temp_file(f) as tf:
+ im = Image.open(tf)
+ # Check for valid JPEG modes.
+ if im.mode not in ('1', 'L', 'RGB', 'RGBX', 'CMYK', 'YCbCr'):
+ im = im.convert('RGB')
+ im.thumbnail(current_app.config.get('THUMB_SIZE', (128, 128)), Image.ANTIALIAS)
+ im.save(ttf)
+ except IOError:
+ # We can't generate a thumbnail for this file, just say it doesn't exist.
+ abort(404)
+ elif f.is_video():
with storage.temp_file(f) as tf:
- im = Image.open(tf)
- # Check for valid JPEG modes.
- if im.mode not in ('1', 'L', 'RGB', 'RGBX', 'CMYK', 'YCbCr'):
- im = im.convert('RGB')
- im.thumbnail(current_app.config.get('THUMB_SIZE', (128, 128)), Image.ANTIALIAS)
- im.save(thumbfile)
- except IOError:
- # We can't generate a thumbnail for this file, just say it doesn't exist.
+ p = subprocess.run(['ffmpegthumbnailer', '-i', '-', '-o', ttf.name], stdin=tf)
+ if p.returncode != 0:
+ abort(404)
+ else:
abort(404)
- elif f.is_video():
- #p = subprocess.run(['ffmpegthumbnailer', '-i', f.get_path(), '-o', thumbfile])
- with storage.temp_file(f) as tf:
- p = subprocess.run(['ffmpegthumbnailer', '-i', '-', '-o', thumbfile], stdin=tf)
- if p.returncode != 0:
- if os.path.exists(thumbfile):
- os.unlink(thumbfile)
+ ttf.seek(0)
+ if not os.path.getsize(ttf.name):
abort(404)
- else:
- abort(404)
- return send_file(thumbfile)
+ storage.store_thumbnail(f, ttf)
+ response = storage.get_thumbnail(f)
+ if isinstance(response, Response):
+ return response
+ return send_file(response, attachment_filename='thumb.jpg')
@app.route('/h')
@app.route('/help')