From daa01defab95116cdd0f30b8141a3250df009b29 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Mon, 18 Jun 2012 22:32:22 +0000 Subject: [PATCH] Added media viewing and editing; gets media from config and creates a /thumbnail/ folder there svn: r19869 --- src/data/templates/view_media_detail.html | 1 + src/webapp/grampsdb/forms.py | 9 ++++++- src/webapp/grampsdb/view/media.py | 31 ++++++++++++++++++++++- src/webapp/utils.py | 7 +++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/data/templates/view_media_detail.html b/src/data/templates/view_media_detail.html index 68c868933..2e7eadfc1 100644 --- a/src/data/templates/view_media_detail.html +++ b/src/data/templates/view_media_detail.html @@ -31,6 +31,7 @@ {{mediaform.desc.label}}: {% render mediaform.desc user action %} +{% media_link media.handle user action %} {{mediaform.gramps_id.label}}: diff --git a/src/webapp/grampsdb/forms.py b/src/webapp/grampsdb/forms.py index bf2c53bc4..2b134d06f 100644 --- a/src/webapp/grampsdb/forms.py +++ b/src/webapp/grampsdb/forms.py @@ -23,11 +23,17 @@ # forms.py forms for Django web project +# Django Modules: from django import forms -from webapp.grampsdb.models import * from django.forms.models import inlineformset_factory from django.forms.models import BaseModelFormSet from django.forms.widgets import TextInput + +# Gramps Modules: +from webapp.grampsdb.models import * +import gen.mime + +# Python Modules: import datetime class PersonForm(forms.ModelForm): @@ -197,6 +203,7 @@ class MediaForm(forms.ModelForm): from webapp.libdjango import DjangoInterface dji = DjangoInterface() model = super(MediaForm, self).save(commit=False) + model.mime = gen.mime.get_type(model.path) dobj = dp(self.cleaned_data['text']) dji.add_date(model, dobj.serialize()) if commit: diff --git a/src/webapp/grampsdb/view/media.py b/src/webapp/grampsdb/view/media.py index 99b420fb3..07afcdaf6 100644 --- a/src/webapp/grampsdb/view/media.py +++ b/src/webapp/grampsdb/view/media.py @@ -26,10 +26,16 @@ from webapp.utils import _, boolean, update_last_changed from webapp.grampsdb.models import Media from webapp.grampsdb.forms import * from webapp.libdjango import DjangoInterface +from gen.config import config ## Django Modules from django.shortcuts import get_object_or_404, render_to_response, redirect from django.template import Context, RequestContext +from django.http import HttpResponse + +## Other Python Modules +from PIL import Image +import os ## Globals dji = DjangoInterface() @@ -49,7 +55,30 @@ def process_media(request, context, handle, action, add_to=None): # view, edit, action = request.POST.get("action") # Handle: edit, view, add, create, save, delete - if action == "add": + if action == "full": + # FIXME: path should come from config + media = Media.objects.get(handle=handle) + media_type, media_ext = media.mime.split("/", 1) + folder = config.get('behavior.addmedia-image-dir') + image = Image.open("%s/%s" % (folder, media.path)) + response = HttpResponse(mimetype=media.mime) + image.save(response, media_ext.upper()) + return response + elif action == "thumbnail": + media = Media.objects.get(handle=handle) + media_type, media_ext = media.mime.split("/", 1) + folder = config.get('behavior.addmedia-image-dir') + if os.path.exists("%s/thumbnail/%s" % (folder, media.path)): + image = Image.open("%s/thumbnail/%s" % (folder, media.path)) + else: + image = Image.open("%s/%s" % (folder, media.path)) + image.thumbnail((300,300), Image.ANTIALIAS) + os.makedirs("%s/thumbnail" % folder) + image.save("%s/thumbnail/%s" % (folder, media.path)) + response = HttpResponse(mimetype=media.mime) + image.save(response, media_ext.upper()) + return response + elif action == "add": media = Media(gramps_id=dji.get_next_id(Media, "M")) mediaform = MediaForm(instance=media) mediaform.model = media diff --git a/src/webapp/utils.py b/src/webapp/utils.py index 5a09c1521..e8fd38db7 100644 --- a/src/webapp/utils.py +++ b/src/webapp/utils.py @@ -76,6 +76,7 @@ util_filters = [ util_tags = [ 'render', + 'media_link', 'render_name', "get_person_from_handle", "event_table", @@ -884,6 +885,12 @@ def display_date(obj): else: return "" +def media_link(handle, user, action): + retval = """""" % ( + "/media/%s/full" % handle, + "/media/%s/thumbnail" % handle) + return retval + def render(formfield, user, action, id=None, url=None, *args): if not user.is_authenticated(): action = "view"