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'
}