from django.shortcuts import get_object_or_404, render
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
+from lxml import etree
+from librarian import RDFNS, DCNS
from documents.helpers import active_tab
-from documents.models import Chunk
+from documents.models import Book, Chunk
from cover.models import Image
from cover import forms
+from cover.utils import get_import_data
+
PREVIEW_SIZE = (216, 300)
width = int(width) if width else None
height=request.GET.get('height')
height = int(height) if height else None
- cover = make_cover(info, width=width, height=height)
- #cover = make_cover(info)
+
+ if not (height or width):
+ width, height = PREVIEW_SIZE
+
+ cover_class = request.GET.get('cover_class', 'default')
+
+ cover = make_cover(info, cover_class=cover_class, width=width, height=height)
response = HttpResponse(content_type=cover.mime_type())
- if height or width:
- size = (width, height)
- else:
- size = PREVIEW_SIZE
- img = cover.image().resize(size, Image.ANTIALIAS)
+ img = cover.final_image()
img.save(response, cover.format)
if 'download' in request.GET:
@active_tab('cover')
def image_list(request):
return render(request, "cover/image_list.html", {
- 'object_list': Image.objects.all(),
+ 'object_list': Image.objects.all().order_by('-id'),
'can_add': request.user.has_perm('cover.add_image'),
})
'form': form,
'ff': ff,
})
+
+@permission_required('cover.add_image')
+def quick_import(request, pk):
+ url = request.POST.get('url')
+ if url.startswith('%s://%s/' % (
+ request.scheme,
+ request.get_host())):
+ cover_id = url.rsplit('/', 1)[-1]
+ cover = Image.objects.get(pk=cover_id)
+ else:
+ data = get_import_data(url)
+ same = Image.objects.filter(source_url=data['source_url'])
+ if not same.exists():
+ same = Image.objects.filter(download_url=data['download_url'])
+ if same.exists():
+ cover = same.first()
+ else:
+ form = forms.ImageAddForm(data)
+ if form.is_valid():
+ cover = form.save()
+
+ # We have a cover. Now let's commit.
+ book = Book.objects.get(pk=pk)
+ chunk = book[0]
+ text = chunk.head.materialize()
+
+ root = etree.fromstring(text)
+ rdf = root.find('.//' + RDFNS('Description'))
+ for tag in 'url', 'attribution', 'source':
+ for elem in rdf.findall('.//' + DCNS('relation.coverImage.%s' % tag)):
+ rdf.remove(elem)
+ e = etree.Element(DCNS('relation.coverImage.url'))
+ e.text = request.build_absolute_uri(cover.use_file.url)
+ rdf.append(e)
+ e.tail = '\n '
+ e = etree.Element(DCNS('relation.coverImage.attribution'))
+ e.text = ''
+ if cover.title:
+ e.text += cover.title + ', '
+ if cover.author:
+ e.text += cover.author + ', '
+ e.text += cover.license_name
+ e.tail = '\n '
+ rdf.append(e)
+ e = etree.Element(DCNS('relation.coverImage.source'))
+ e.text = cover.get_full_url()
+ e.tail = '\n '
+ rdf.append(e)
+
+ xml = etree.tostring(root, encoding='unicode')
+ chunk.commit(
+ xml,
+ author=request.user,
+ comment='Cover',
+ publishable=chunk.head.publishable,
+ )
+ return HttpResponseRedirect(book.get_absolute_url())
+