From ef981e06e8f6e1627929bdf24dd7ad6bf6fdb0bf Mon Sep 17 00:00:00 2001 From: Tris Forster Date: Sun, 24 May 2026 11:35:18 +1000 Subject: [PATCH] Shared gdrive access --- polyphonic/library/gdrive/storage.py | 4 ++-- polyphonic/library/gdrive/views.py | 20 +++++++++---------- .../templates/library/work_detail.html | 13 +++++++----- polyphonic/library/views/__init__.py | 6 ++++-- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/polyphonic/library/gdrive/storage.py b/polyphonic/library/gdrive/storage.py index 4f76f63..a17715e 100644 --- a/polyphonic/library/gdrive/storage.py +++ b/polyphonic/library/gdrive/storage.py @@ -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) diff --git a/polyphonic/library/gdrive/views.py b/polyphonic/library/gdrive/views.py index 8192422..7bf9aff 100644 --- a/polyphonic/library/gdrive/views.py +++ b/polyphonic/library/gdrive/views.py @@ -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() diff --git a/polyphonic/library/templates/library/work_detail.html b/polyphonic/library/templates/library/work_detail.html index dda7405..d9d1af6 100644 --- a/polyphonic/library/templates/library/work_detail.html +++ b/polyphonic/library/templates/library/work_detail.html @@ -129,16 +129,19 @@ {% if request.is_admin %}

Add Files

- {% if "gdrive" in methods %} - - {% endif %} {% if "upload" in methods %}
{% csrf_token %}
{% endif %} + {% if "gdrive" in methods %} + + {% endif %}
{% endif %} diff --git a/polyphonic/library/views/__init__.py b/polyphonic/library/views/__init__.py index d621484..c9ed90a 100644 --- a/polyphonic/library/views/__init__.py +++ b/polyphonic/library/views/__init__.py @@ -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