diff --git a/filebrowser/admin.py b/filebrowser/admin.py new file mode 100644 index 000000000..79712b5e4 --- /dev/null +++ b/filebrowser/admin.py @@ -0,0 +1,8 @@ +from django.contrib import admin +from django.db import models + +class browse(models.Model): + class Meta: + verbose_name_plural = "browse" + +admin.site.register(browse) diff --git a/filebrowser/base.py b/filebrowser/base.py index 1cda6148f..bd9cc200c 100644 --- a/filebrowser/base.py +++ b/filebrowser/base.py @@ -15,8 +15,8 @@ from filebrowser.settings import (ADMIN_VERSIONS, DEFAULT_PERMISSIONS, EXTENSIONS, IMAGE_MAXBLOCK, SELECT_FORMATS, STRICT_PIL, VERSION_QUALITY, VERSIONS, - VERSIONS_BASEDIR) -from filebrowser.utils import get_modified_time, path_strip, process_image + VERSIONS_BASEDIR, VIDEO_THUMBNAIL) +from filebrowser.utils import get_modified_time, path_strip, process_image, get_video_image from .namers import get_namer @@ -31,7 +31,6 @@ import Image import ImageFile - ImageFile.MAXBLOCK = IMAGE_MAXBLOCK # default is 64k @@ -342,10 +341,13 @@ def url(self): @cached_property def dimensions(self): "Image dimensions as a tuple" - if self.filetype != 'Image': + if self.filetype != 'Image' and self.filetype != 'Video': return None try: - im = Image.open(self.site.storage.open(self.path)) + if VIDEO_THUMBNAIL and self.filetype == 'Video': + im = Image.open(get_video_image(self.path_full)) + elif self.filetype == 'Image': + im = Image.open(self.site.storage.open(self.path)) return im.size except: pass @@ -514,7 +516,17 @@ def _generate_version(self, version_path, version_suffix, options): f = self.site.storage.open(self.path) except IOError: return "" - im = Image.open(f) + + im = None + + if VIDEO_THUMBNAIL and self.filetype == 'Video': + im = Image.open(get_video_image(self.path_full)) + elif self.filetype == 'Image': + im = Image.open(f) + + if not im: + return None + version_dir, version_basename = os.path.split(version_path) root, ext = os.path.splitext(version_basename) version = process_image(im, options) @@ -526,9 +538,9 @@ def _generate_version(self, version_path, version_suffix, options): version = m(version) # IF need Convert RGB - if ext in [".jpg", ".jpeg"] and version.mode not in ("L", "RGB"): + if ext.lower() in [".jpg", ".jpeg"] and version.mode not in ("L", "RGB"): version = version.convert("RGB") - + # save version quality = VERSIONS.get(version_suffix, {}).get("quality", VERSION_QUALITY) try: diff --git a/filebrowser/namers.py b/filebrowser/namers.py index d0342420d..17fba2857 100644 --- a/filebrowser/namers.py +++ b/filebrowser/namers.py @@ -24,6 +24,8 @@ def __init__(self, **kwargs): setattr(self, k, v) def get_version_name(self): + if self.file_object.filetype == 'Video': + return self.file_object.filename_root + "_" + self.version_suffix + '.jpg' return self.file_object.filename_root + "_" + self.version_suffix + self.extension def get_original_name(self): diff --git a/filebrowser/settings.py b/filebrowser/settings.py index 8430af2a8..9bd1c6af8 100644 --- a/filebrowser/settings.py +++ b/filebrowser/settings.py @@ -11,7 +11,7 @@ # EXTENSIONS AND FORMATS # Allowed Extensions for File Upload. Lower case is important. EXTENSIONS = getattr(settings, "FILEBROWSER_EXTENSIONS", { - 'Image': ['.jpg', '.jpeg', '.gif', '.png', '.tif', '.tiff'], + 'Image': ['.jpg', '.jpeg', '.gif', '.png', '.tif', '.tiff', '.heic'], 'Document': ['.pdf', '.doc', '.rtf', '.txt', '.xls', '.csv', '.docx'], 'Video': ['.mov', '.mp4', '.m4v', '.webm', '.wmv', '.mpeg', '.mpg', '.avi', '.rm'], 'Audio': ['.mp3', '.wav', '.aiff', '.midi', '.m4p'] @@ -48,6 +48,9 @@ # Which Version should be used as Admin-thumbnail. ADMIN_THUMBNAIL = getattr(settings, 'FILEBROWSER_ADMIN_THUMBNAIL', 'admin_thumbnail') +VIDEO_THUMBNAIL = getattr(settings, 'FILEBROWSER_VIDEO_THUMBNAIL', True) +VIDEO_THUMBNAIL_FRAME = getattr(settings, 'FILEBROWSER_ADMIN_VIDEO_THUMBNAIL_FRAME', 10) + VERSION_PROCESSORS = getattr(settings, 'FILEBROWSER_VERSION_PROCESSORS', [ 'filebrowser.utils.scale_and_crop', ]) diff --git a/filebrowser/templates/filebrowser/custom_field.html b/filebrowser/templates/filebrowser/custom_field.html index cf8f0da3e..dfaa905cb 100644 --- a/filebrowser/templates/filebrowser/custom_field.html +++ b/filebrowser/templates/filebrowser/custom_field.html @@ -1,6 +1,6 @@ {% load i18n fb_versions %} -{% if value.filetype == "Image" and value.exists %} +{% if value.filetype == "Image" or fileobject.filetype == "Video" and value.exists %} {% version value.path final_attrs.ADMIN_THUMBNAIL as thumbnail_version %} {% if thumbnail_version %}
diff --git a/filebrowser/templates/filebrowser/custom_upload_field.html b/filebrowser/templates/filebrowser/custom_upload_field.html index d5959be36..ca45641d8 100644 --- a/filebrowser/templates/filebrowser/custom_upload_field.html +++ b/filebrowser/templates/filebrowser/custom_upload_field.html @@ -6,7 +6,7 @@
diff --git a/filebrowser/templates/filebrowser/detail.html b/filebrowser/templates/filebrowser/detail.html index 80ab89dba..2f0378db1 100644 --- a/filebrowser/templates/filebrowser/detail.html +++ b/filebrowser/templates/filebrowser/detail.html @@ -122,7 +122,7 @@