diff libervia/web/pages/files/view/page_meta.py @ 1518:eb00d593801d

refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
author Goffi <goffi@goffi.org>
date Fri, 02 Jun 2023 16:49:28 +0200
parents libervia/pages/files/view/page_meta.py@106bae41f5c8
children ebd538cb26cb
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libervia/web/pages/files/view/page_meta.py	Fri Jun 02 16:49:28 2023 +0200
@@ -0,0 +1,58 @@
+#!/usr/bin/env python3
+
+
+from libervia.web.server.constants import Const as C
+from libervia.backend.core.i18n import _
+from twisted.web import static
+from libervia.web.server.utils import ProgressHandler
+import tempfile
+import os
+import os.path
+from libervia.backend.core.log import getLogger
+
+log = getLogger(__name__)
+"""files handling pages"""
+
+name = "files_view"
+access = C.PAGES_ACCESS_PROFILE
+
+
+def parse_url(self, request):
+    self.get_path_args(request, ["service", "*path"], min_args=2, service="jid", path="")
+
+
+def cleanup(__, tmp_dir, dest_path):
+    try:
+        os.unlink(dest_path)
+    except OSError:
+        log.warning(_("Can't remove temporary file {path}").format(path=dest_path))
+    try:
+        os.rmdir(tmp_dir)
+    except OSError:
+        log.warning(_("Can't remove temporary directory {path}").format(path=tmp_dir))
+
+
+async def render(self, request):
+    data = self.get_r_data(request)
+    profile = self.get_profile(request)
+    service, path_elts = data["service"], data["path"]
+    basename = path_elts[-1]
+    dir_elts = path_elts[:-1]
+    dir_path = "/".join(dir_elts)
+    tmp_dir = tempfile.mkdtemp()
+    dest_path = os.path.join(tmp_dir, basename)
+    request.notifyFinish().addCallback(cleanup, tmp_dir, dest_path)
+    progress_id = await self.host.bridge_call(
+        "file_jingle_request",
+        service.full(),
+        dest_path,
+        basename,
+        "",
+        "",
+        {"path": dir_path},
+        profile,
+    )
+    log.debug("file requested")
+    await ProgressHandler(self.host, progress_id, profile).register()
+    log.debug("file downloaded")
+    self.delegate_to_resource(request, static.File(dest_path))