From 8f91f9d30f3ffe15469c681290905b9e57ec6501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20Marti=CC=81n?= Date: Sun, 24 Aug 2014 12:23:59 +0200 Subject: [PATCH] Added an easy system to update covers using a simple google image search with the first four results with a one-click update system --- shelfzilla/apps/_admin/urls.py | 5 +- shelfzilla/apps/_admin/views.py | 45 ++++++++++ shelfzilla/apps/manga/admin.py | 6 ++ shelfzilla/apps/manga/models.py | 7 +- .../_admin/volumes/includes/cover.html | 84 +++++++++++++++++++ 5 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 shelfzilla/themes/bootflat/templates/_admin/volumes/includes/cover.html diff --git a/shelfzilla/apps/_admin/urls.py b/shelfzilla/apps/_admin/urls.py index f5a6c7c..2881dd4 100644 --- a/shelfzilla/apps/_admin/urls.py +++ b/shelfzilla/apps/_admin/urls.py @@ -1,10 +1,13 @@ from django.conf.urls import patterns, url -from .views import VolumeChangeSeriesView +from .views import VolumeChangeSeriesView, VolumeChangeCoverView urlpatterns = patterns( '', url(r'^manga/volume/change_series/$', VolumeChangeSeriesView.as_view(), name="_admin.manga.volume.change_series"), + url(r'^manga/volume/cover/(?P\d+)/$', + VolumeChangeCoverView.as_view(), + name="_admin.manga.volume.cover"), ) diff --git a/shelfzilla/apps/_admin/views.py b/shelfzilla/apps/_admin/views.py index 0a7c0e8..2b9be9f 100644 --- a/shelfzilla/apps/_admin/views.py +++ b/shelfzilla/apps/_admin/views.py @@ -3,6 +3,8 @@ from django.template import RequestContext from django.utils.translation import ugettext as _ from django.contrib import messages from django.http import HttpResponseForbidden, HttpResponseRedirect +from django.views.decorators.csrf import csrf_exempt +from filer.models import Image from shelfzilla.views import View from shelfzilla.apps.manga.models import Volume, Series @@ -42,3 +44,46 @@ class VolumeChangeSeriesView(View): messages.success(request, _('Volume series changed')) return HttpResponseRedirect('/admin/manga/volume/') + + +class VolumeChangeCoverView(View): + @csrf_exempt + def dispatch(self, request, *args, **kwargs): + if not request.user.is_staff: + return HttpResponseForbidden() + else: + return super(VolumeChangeCoverView, self).dispatch( + request, *args, **kwargs) + + def post(self, request, volume_pk): + try: + volume = Volume.objects.get(pk=volume_pk) + if 'cover_url' in request.POST: + cover_url = request.POST['cover_url'] + + from django.core.files.temp import NamedTemporaryFile + from django.core.files import File + import urllib2 + + + cover_temp = NamedTemporaryFile(delete=True) + cover_temp.write(urllib2.urlopen(cover_url).read()) + cover_temp.flush() + + new_cover, is_new = Image.objects.get_or_create(file=File(cover_temp)) + # new_cover._move_file() + + if volume.cover: + volume.cover.delete() + volume.cover = new_cover + volume.save() + + messages.success(request, _('Volume series changed')) + else: + messages.error(request, _('Cover url to update not found.')) + except Volume.DoesNotExist: + messages.error(request, _('Volume not found.')) + + return HttpResponseRedirect( + '/admin/manga/volume/{}/'.format(volume_pk)) + diff --git a/shelfzilla/apps/manga/admin.py b/shelfzilla/apps/manga/admin.py index 20c5c3a..992fcc2 100644 --- a/shelfzilla/apps/manga/admin.py +++ b/shelfzilla/apps/manga/admin.py @@ -91,6 +91,7 @@ class SeriesAdmin(ImportExportModelAdmin, reversion.VersionAdmin): suit_form_tabs = ( ('general', _('General')), ('volumes', _('Volumes')), + ('cover', _('Cover')), ('review', _('Review')), ('advanced', _('Advanced')), ) @@ -133,6 +134,7 @@ class VolumeAdmin(ImportExportModelAdmin, reversion.VersionAdmin): suit_form_tabs = ( ('general', _('General')), + ('cover', _('Cover')), ('review', _('Review')), ('advanced', _('Advanced')), ) @@ -154,6 +156,10 @@ class VolumeAdmin(ImportExportModelAdmin, reversion.VersionAdmin): }), ] + suit_form_includes = ( + ('_admin/volumes/includes/cover.html', 'top', 'cover'), + ) + def change_series(self, request, queryset): selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME) return HttpResponseRedirect( diff --git a/shelfzilla/apps/manga/models.py b/shelfzilla/apps/manga/models.py index 88ea081..1d0f37b 100644 --- a/shelfzilla/apps/manga/models.py +++ b/shelfzilla/apps/manga/models.py @@ -240,8 +240,11 @@ def series_delete_folder(sender, instance, using, **kwargs): def volume_delete_cover(sender, instance, **kwargs): - if instance.cover: - instance.cover.delete() + try: + if instance.cover: + instance.cover.delete() + except: + pass post_save.connect(series_check_filer, sender=Series) post_save.connect(volume_check_filer, sender=Volume) diff --git a/shelfzilla/themes/bootflat/templates/_admin/volumes/includes/cover.html b/shelfzilla/themes/bootflat/templates/_admin/volumes/includes/cover.html new file mode 100644 index 0000000..16e7f66 --- /dev/null +++ b/shelfzilla/themes/bootflat/templates/_admin/volumes/includes/cover.html @@ -0,0 +1,84 @@ +{% load i18n %} + + + + + + + + + + + + + + + + +
{% trans "Actual cover:" %}{% trans "Search" %}
+ + + +
+ +