diff --git a/gedgo/storages.py b/gedgo/storages.py index d9b2124..132f1a4 100644 --- a/gedgo/storages.py +++ b/gedgo/storages.py @@ -49,7 +49,7 @@ def search(self, query): return self._list_from_contents(contents) def preview(self, name): - return self.client.preview(self.path(name)) + return self.client.thumbnail(self.path(name), 's') class ResearchFileSystemStorage(FileSystemStorage): diff --git a/gedgo/templates/default/base.html b/gedgo/templates/default/base.html index 3727cd5..61ccaab 100644 --- a/gedgo/templates/default/base.html +++ b/gedgo/templates/default/base.html @@ -4,6 +4,7 @@ {{ site_title }}{% if person %} : {{ person.full_name }}{% endif %} + diff --git a/gedgo/templates/default/research.html b/gedgo/templates/default/research.html index 181aba4..4566582 100644 --- a/gedgo/templates/default/research.html +++ b/gedgo/templates/default/research.html @@ -22,24 +22,46 @@ Up a level {% endif %}

{{ current_level }}

+{% if directories %} +{% endif %} +{% if directories and files %}
+{% endif %} +{% if files %} +{% endif %} {% endblock %} diff --git a/gedgo/urls.py b/gedgo/urls.py index 16a802e..7dd3122 100644 --- a/gedgo/urls.py +++ b/gedgo/urls.py @@ -23,6 +23,7 @@ url(r'^blog/post/(?P\d+)/$', views.blogpost), url(r'^documentaries/$', views.documentaries), url(r'^research/(?P.*)$', views.research), + url(r'^research-preview/(?P.*)$', views.research_preview), url(r'^search/$', views.search), url(r'^dashboard/$', views.dashboard), url(r'^dashboard/user/(?P\d+)/$', views.user_tracking), diff --git a/gedgo/views/__init__.py b/gedgo/views/__init__.py index f33fe03..493f463 100644 --- a/gedgo/views/__init__.py +++ b/gedgo/views/__init__.py @@ -2,13 +2,13 @@ from model_views import person, gedcom, documentaries from dashboard import dashboard, user_tracking, worker_status from blog import blog, blog_list, blogpost -from research import research +from research import research, research_preview from visualizations import pedigree, timeline from util import media, logout_view __all__ = [ 'person', 'gedcom', 'dashboard', 'search', - 'documentaries', 'blogpost', + 'documentaries', 'blogpost', 'research_preview', 'blog', 'blog_list', 'media', 'research', 'logout_view', 'pedigree', 'timeline', 'user_tracking', 'worker_status' ] diff --git a/gedgo/views/research.py b/gedgo/views/research.py index 4d63e96..d37236f 100644 --- a/gedgo/views/research.py +++ b/gedgo/views/research.py @@ -1,5 +1,6 @@ from django.http import Http404 from django.contrib.auth.decorators import login_required +from django.core.files.storage import default_storage from os import path import mimetypes @@ -8,6 +9,27 @@ from gedgo.storages import research_storage as storage +@login_required +def research_preview(request, pathname): + """ + Cached preview thumbnails for jpegs (supported by Dropbox) + """ + name = pathname.strip('/') + if not can_preview(name): + raise Http404 + + cache_name = path.join('research', 'preview-cache', name) + if default_storage.exists(cache_name): + return serve_content(default_storage, cache_name) + try: + content = storage.preview(name) + assert content + default_storage.save(cache_name, content) + return serve_content(default_storage, cache_name) + except: + raise Http404 + + @login_required def research(request, pathname): if storage is None: @@ -47,20 +69,27 @@ def research(request, pathname): raise Http404 +def can_preview(name): + return ( + hasattr(storage, 'preview') and + (name.lower().endswith('.jpeg') or name.lower().endswith('.jpg')) + ) + + def process_file(name, p, is_dir=False): type_ = 'folder_open' if is_dir else _get_type(p) return { 'type': type_, 'path': path.join(name, p), 'name': p, - 'preview': type_ == 'image' + 'preview': can_preview(p) } # glyphicon name mappings MIMETYPE_MAPPING = { - 'video': 'facetime-video', + 'video': 'video-camera', 'audio': 'volume-up', - 'image': 'picture' + 'image': 'image' }