diff --git a/README.md b/README.md index 2d99b3bfff..67947b0bd9 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ Requirements * Django - A high-level Python Web framework that encourages rapid development and clean, pragmatic design. * django-pagination +* ImageMagick - Convert, Edit, Or Compose Bitmap Images Or execute pip install -r requirements/production.txt to install the dependencies automatically. diff --git a/apps/documents/conf/settings.py b/apps/documents/conf/settings.py index 194412bafb..8381a95809 100644 --- a/apps/documents/conf/settings.py +++ b/apps/documents/conf/settings.py @@ -32,6 +32,7 @@ STORAGE_BACKEND = getattr(settings, 'DOCUMENTS_STORAGE_BACKEND', DocumentStorage STORAGE_DIRECTORY_NAME = getattr(settings, 'DOCUMENTS_STORAGE_DIRECTORY_NAME', 'documents') # Usage PREVIEW_SIZE = getattr(settings, 'DOCUMENTS_PREVIEW_SIZE', '640x480') +THUMBNAIL_SIZE = getattr(settings, 'DOCUMENTS_THUMBNAIL_SIZE', '50x50') # Serving FILESYSTEM_FILESERVING_ENABLE = getattr(settings, 'DOCUMENTS_FILESYSTEM_FILESERVING_ENABLE', True) FILESYSTEM_FILESERVING_PATH = getattr(settings, 'DOCUMENTS_FILESERVING_PATH', u'/tmp/mayan/documents') diff --git a/apps/documents/urls.py b/apps/documents/urls.py index 6cd82d8b27..9b21f175fa 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -13,6 +13,7 @@ urlpatterns = patterns('documents.views', url(r'^document/(?P\d+)/delete/$', 'document_delete', (), 'document_delete'), url(r'^document/(?P\d+)/edit/$', 'document_edit', (), 'document_edit'), url(r'^document/(?P\d+)/preview/$', 'document_preview', (), 'document_preview'), + url(r'^document/(?P\d+)/thumbnail/$', 'document_thumbnail', (), 'document_thumbnail'), url(r'^document/(?P\d+)/download/$', 'document_download', (), 'document_download'), url(r'^staging_file/(?P\w+)/preview/$', 'staging_file_preview', (), 'staging_file_preview'), diff --git a/apps/documents/views.py b/apps/documents/views.py index d336871de8..e9b19a7ed6 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -10,6 +10,8 @@ from django.core.urlresolvers import reverse from django.views.generic.create_update import create_object, delete_object, update_object from django.forms.formsets import formset_factory from django.core.files.base import File +from django.conf import settings + from filetransfers.api import serve_file from converter.api import convert, in_cache @@ -29,6 +31,7 @@ from documents.conf.settings import USE_STAGING_DIRECTORY from documents.conf.settings import FILESYSTEM_FILESERVING_ENABLE from documents.conf.settings import STAGING_FILES_PREVIEW_SIZE from documents.conf.settings import PREVIEW_SIZE +from documents.conf.settings import THUMBNAIL_SIZE def document_list(request): return object_list( @@ -41,6 +44,8 @@ def document_list(request): {'name':_(u'mimetype'), 'attribute':'file_mimetype'}, {'name':_(u'added'), 'attribute':lambda x: x.date_added.date()}, {'name':_(u'file size'), 'attribute':lambda x: pretty_size(x.file.storage.size(x.file.path)) if x.exists() else '-'}, + {'name':_(u'thumbnail'), 'attribute': + lambda x: '' % reverse('document_thumbnail', args=[x.id])}, ], }, ) @@ -274,10 +279,10 @@ def document_edit(request, document_id): }, context_instance=RequestContext(request)) -def document_preview(request, document_id): +def get_document_image(request, document_id, size=PREVIEW_SIZE): document = get_object_or_404(Document, pk=document_id) - filepath = in_cache(document.uuid, PREVIEW_SIZE) + filepath = in_cache(document.uuid, size) if filepath: return serve_file(request, File(file=open(filepath, 'r'))) @@ -286,12 +291,24 @@ def document_preview(request, document_id): document.file.open() desc = document.file.storage.open(document.file.path) filepath = from_descriptor_to_tempfile(desc, document.uuid) - output_file = convert(filepath, PREVIEW_SIZE) + output_file = convert(filepath, size) + print document_id, output_file return serve_file(request, File(file=open(output_file, 'r'))) except Exception, e: + if size == THUMBNAIL_SIZE: + return serve_file(request, File(file=open('%simages/picture_error.png' % settings.MEDIA_ROOT, 'r'))) + else: + return serve_file(request, File(file=open('%simages/1297211435_error.png' % settings.MEDIA_ROOT, 'r'))) #messages.error(request, e) - return HttpResponse(e) - + #return HttpResponse(e) + + +def document_thumbnail(request, document_id): + return get_document_image(request, document_id, THUMBNAIL_SIZE) + + +def document_preview(request, document_id): + return get_document_image(request, document_id, PREVIEW_SIZE) def document_download(request, document_id): diff --git a/settings.py b/settings.py index 7d9d2c5cb9..be9a8e5df1 100644 --- a/settings.py +++ b/settings.py @@ -183,6 +183,7 @@ LOGIN_EXEMPT_URLS = ( #DOCUMENTS_STORAGE_DIRECTORY_NAME = 'documents' # Usage #DOCUMENTS_PREVIEW_SIZE = '640x480' +#DOCUMENTS_THUMBNAIL_SIZE = '50x50' # Serving #DOCUMENTS_FILESYSTEM_FILESERVING_ENABLE = True #DOCUMENTS_FILESYSTEM_FILESERVING_PATH = u'/tmp/mayan/documents' diff --git a/site_media/images/1297211435_error.png b/site_media/images/1297211435_error.png new file mode 100644 index 0000000000..439ef61b71 Binary files /dev/null and b/site_media/images/1297211435_error.png differ diff --git a/site_media/images/picture_error.png b/site_media/images/picture_error.png new file mode 100644 index 0000000000..5fc148d52d Binary files /dev/null and b/site_media/images/picture_error.png differ