+ super(DownloadFormatsForm, self).__init__(*args, **kwargs)
+
+
+CUSTOMIZATION_FLAGS = (
+ ('nofootnotes', _("Don't show footnotes")),
+ ('nothemes', _("Don't disply themes")),
+ ('nowlfont', _("Don't use our custom font")),
+ ('no-cover', _("Without cover")),
+ )
+CUSTOMIZATION_OPTIONS = (
+ ('leading', _("Leading"), (
+ ('', _('Normal leading')),
+ ('onehalfleading', _('One and a half leading')),
+ ('doubleleading', _('Double leading')),
+ )),
+ ('fontsize', _("Font size"), (
+ ('', _('Default')),
+ ('13pt', _('Big'))
+ )),
+# ('pagesize', _("Paper size"), (
+# ('a4paper', _('A4')),
+# ('a5paper', _('A5')),
+# )),
+ )
+
+
+class CustomPDFForm(forms.Form):
+ def __init__(self, book, *args, **kwargs):
+ super(CustomPDFForm, self).__init__(*args, **kwargs)
+ self.book = book
+ for name, label in CUSTOMIZATION_FLAGS:
+ self.fields[name] = forms.BooleanField(required=False, label=label)
+ for name, label, choices in CUSTOMIZATION_OPTIONS:
+ self.fields[name] = forms.ChoiceField(choices, required=False, label=label)
+
+ def clean(self):
+ self.cleaned_data['cust'] = self.customizations
+ self.cleaned_data['path'] = get_customized_pdf_path(self.book,
+ self.cleaned_data['cust'])
+ if not WaitedFile.can_order(self.cleaned_data['path']):
+ raise ValidationError(_('Queue is full. Please try again later.'))
+ return self.cleaned_data
+
+ @property
+ def customizations(self):
+ c = []
+ for name, label in CUSTOMIZATION_FLAGS:
+ if self.cleaned_data.get(name):
+ c.append(name)
+ for name, label, choices in CUSTOMIZATION_OPTIONS:
+ option = self.cleaned_data.get(name)
+ if option:
+ c.append(option)
+ c.sort()
+ return c
+
+ def save(self, *args, **kwargs):
+ if not self.cleaned_data['cust'] and self.book.pdf_file:
+ # Don't build with default options, just redirect to the standard file.
+ return {"redirect": self.book.pdf_file.url}
+ url = WaitedFile.order(self.cleaned_data['path'],
+ lambda p, waiter_id: build_custom_pdf.delay(self.book.id,
+ self.cleaned_data['cust'], p, waiter_id),
+ self.book.pretty_title()
+ )
+ #return redirect(url)
+ return {"redirect": url}