63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
from django.shortcuts import resolve_url, redirect
|
|
from django.views.generic import FormView
|
|
from django.views.generic.detail import SingleObjectMixin
|
|
from polyphonic.library.views import CollectionMixin
|
|
from polyphonic.library.models import Work, Document
|
|
from polyphonic.library import forms
|
|
from byostorage.models import UserStorage
|
|
|
|
from . import sync_work
|
|
|
|
|
|
class WorkGDriveView(CollectionMixin, SingleObjectMixin, FormView):
|
|
model = Work
|
|
template_name = "library/gdrive.html"
|
|
form_class = forms.DocumentLinkForm
|
|
|
|
@property
|
|
def cancel_url(self):
|
|
return resolve_url("work_detail", self.collection.pk, self.kwargs["pk"])
|
|
|
|
def get_context_data(self, *args, **kwargs):
|
|
self.object = self.get_object()
|
|
data = super().get_context_data(*args, **kwargs)
|
|
|
|
data["meta"] = dict(self.object.meta_info.values_list("name", "value"))
|
|
print(data["meta"])
|
|
|
|
return data
|
|
|
|
def form_valid(self, form):
|
|
link = form.cleaned_data["link"]
|
|
|
|
# storage = self.collection.storage.instance()
|
|
storage = UserStorage.objects.get(name="gdrive").instance()
|
|
self.object = self.get_object()
|
|
|
|
folderid = storage.get_folder_id(link)
|
|
if folderid:
|
|
self.object.meta_info.update_or_create(
|
|
name="folderid", defaults={"value": folderid}
|
|
)
|
|
sync_work(self.object)
|
|
|
|
return redirect("work_detail", self.collection.pk, self.kwargs["pk"])
|
|
|
|
link = storage.import_link(link)
|
|
if link is None:
|
|
form.add_error("link", "Not a valid link")
|
|
return self.form_invalid(form)
|
|
|
|
work = self.collection.works.get(pk=self.kwargs["pk"])
|
|
|
|
doc = Document(
|
|
work=work,
|
|
upload=f"gdrive:{link}",
|
|
# upload=f"{self.collection.storage.name}:{link}",
|
|
doctype=Document.DOCTYPE_PDF,
|
|
)
|
|
doc.save()
|
|
doc.auto_tag()
|
|
|
|
return redirect("work_detail", self.collection.pk, self.kwargs["pk"])
|