Shared gdrive access

This commit is contained in:
Tris Forster 2026-05-24 11:35:18 +10:00
parent 4cef5800bc
commit ef981e06e8
4 changed files with 23 additions and 20 deletions

View File

@ -106,13 +106,13 @@ class GDriveLinkStorage(Storage):
except FileNotFoundError:
return None
"""
def import_link(self, url) -> str:
file_id = self.extract_id(url, SHARED_FILE)
meta = self.get_meta(file_id)
return f"{file_id}/{meta['name']}"
"""
def folder_import(self, url) -> list[str]:
folder_id = self.extract_id(url, SHARED_FOLDER)
_, files = self.listdir(folder_id)

View File

@ -4,6 +4,7 @@ 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
class WorkGDriveView(CollectionMixin, SingleObjectMixin, FormView):
@ -27,23 +28,19 @@ class WorkGDriveView(CollectionMixin, SingleObjectMixin, FormView):
def form_valid(self, form):
link = form.cleaned_data["link"]
storage = self.collection.storage.instance()
# storage = self.collection.storage.instance()
storage = UserStorage.objects.get(name="gdrive").instance()
self.object = self.get_object()
try:
folderid = storage.get_folder_id(link)
folderid = storage.get_folder_id(link)
if folderid:
self.object.meta_info.update_or_create(
name="folderid", defaults={"value": folderid}
)
return redirect("work_detail", self.collection.pk, self.kwargs["pk"])
except FileNotFoundError:
pass # not a folder id
try:
link = self.collection.storage.instance().import_link(link)
except AttributeError:
pass
except FileNotFoundError as e:
link = storage.import_link(link)
if link is None:
form.add_error("link", str(e))
return self.form_invalid(form)
@ -51,7 +48,8 @@ class WorkGDriveView(CollectionMixin, SingleObjectMixin, FormView):
doc = Document(
work=work,
upload=f"{self.collection.storage.name}:{link}",
upload=f"gdrive:{link}",
# upload=f"{self.collection.storage.name}:{link}",
doctype=Document.DOCTYPE_PDF,
)
doc.save()

View File

@ -129,16 +129,19 @@
{% if request.is_admin %}
<div class="column is-one-quarter">
<h4 class="is-size-5">Add Files</h4>
{% if "gdrive" in methods %}
<div class="has-text-centered mt-3">
<a class="button button-primary" href="{% url 'work_gdrive' collection.pk object.pk %}">Link Google Drive Files</a><br/>
</div>
{% endif %}
{% if "upload" in methods %}
<form action="{% url 'document_add' collection.pk object.pk %}" class="dropzone" id="doc-upload" style="-moz-user-select: none">
{% csrf_token %}
</form>
{% endif %}
{% if "gdrive" in methods %}
<div class="has-text-centered mt-3">
<a class="button button-primary is-size-7" href="{% url 'work_gdrive' collection.pk object.pk %}">
<span class="icon"><i class="fa-brands fa-google-drive"></i></span>
Link Google Drive Files
</a><br/>
</div>
{% endif %}
</div>
{% endif %}
</div>

View File

@ -319,11 +319,13 @@ class WorkDetailView(CollectionMixin, DetailView):
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
methods = set("upload")
methods = set(["upload"])
match self.collection.storage.storage:
case "library.storage.GDriveLinkStorage":
case "library.gdrive.storage.GDriveLinkStorage":
methods.discard("upload")
methods.add("gdrive")
case _:
methods.add("gdrive")
context["methods"] = methods
return context