view libervia/web/pages/files/view/page_meta.py @ 1616:6bfeb9f0fb84

browser (calls): conferences implementation: - Handle A/V conferences calls creation/joining by entering a conference room JID in the search box. - Group call box has been improved and is used both for group calls (small number of participants) and A/V conferences (larger number of participants). - Fullscreen button for group call is working. - Avatar/user nickname are shown in group call on peer user, as an overlay on video stream. - Use `user` metadata when present to display the right user avatar/name when receiving a stream from SFU (i.e. A/V conference). - Peer user have a new 3 dots menu with a `pin` item to (un)pin it (i.e. display it on full container with on top). - Updated webrtc to handle unidirectional streams correctly and to adapt to A/V conference specification. rel 448
author Goffi <goffi@goffi.org>
date Wed, 07 Aug 2024 00:01:57 +0200
parents ebd538cb26cb
children
line wrap: on
line source

#!/usr/bin/env python3


from pathlib import Path
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(dir=self.host.local_shared_path)
    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))