From 919cafc68c8ec97e69ebc32c14f3347c0bc5bea1 Mon Sep 17 00:00:00 2001 From: Goffi Date: Tue, 13 Jan 2026 10:57:19 +0100 Subject: [PATCH] Update use of `media_dir` following change in Libervia Media: Libervia Media is now a Python package instead of files to put in a directory to specify in settings. The discovery is now automatic, removing the need for settings and enabling easier installation. Furthermore, it should now work even if the package is zipped. `libervia_media` can now be specified as a dependency for frontends requiring it. --- libervia/backend/core/constants.py | 5 ++--- libervia/backend/core/main.py | 2 +- libervia/backend/plugins/plugin_misc_android.py | 7 ++----- libervia/backend/test/test_plugin_misc_radiocol.py | 6 +++--- libervia/backend/tools/common/template.py | 3 ++- libervia/backend/tools/config.py | 4 ---- libervia/cli/base.py | 1 - libervia/cli/call_gui.py | 4 ++-- 8 files changed, 12 insertions(+), 20 deletions(-) diff --git a/libervia/backend/core/constants.py b/libervia/backend/core/constants.py index 149c24a3..b3c463f6 100644 --- a/libervia/backend/core/constants.py +++ b/libervia/backend/core/constants.py @@ -54,8 +54,8 @@ class Const: ## Configuration ## CONFIG_PATHS = [ - # /etc/_ is used for system-related settings (e.g. when media_dir is set by the - # distribution and has not reason to change, or in a Docker image) + # /etc/_ is used for system-related settings (when a value is set by the + # distribution, or in a Docker image) Path("/etc/_"), Path("/etc/"), Path.home(), @@ -523,7 +523,6 @@ class Const: # BaseDirectory = None # Const.DEFAULT_CONFIG = { # "local_dir": "/data/data/org.libervia.cagou/app", -# "media_dir": "/data/data/org.libervia.cagou/files/app/media", # # FIXME: temporary location for downloads, need to call API properly # "downloads_dir": os.path.join( # Environment.getExternalStoragePublicDirectory( diff --git a/libervia/backend/core/main.py b/libervia/backend/core/main.py index 1bb07f96..f475d7cb 100644 --- a/libervia/backend/core/main.py +++ b/libervia/backend/core/main.py @@ -28,7 +28,7 @@ from typing import Optional, List, Tuple, Dict, cast from libervia import backend from libervia.backend.core.i18n import _, D_, language_switch from libervia.backend.core import patches -from libervia.backend.models.tor import TorData, TorMode +from libervia.backend.models.tor import TorData patches.apply() from twisted.application import app, service diff --git a/libervia/backend/plugins/plugin_misc_android.py b/libervia/backend/plugins/plugin_misc_android.py index f8454fd7..1c179921 100644 --- a/libervia/backend/plugins/plugin_misc_android.py +++ b/libervia/backend/plugins/plugin_misc_android.py @@ -18,7 +18,6 @@ import sys import os import os.path import json -from pathlib import Path from zope.interface import implementer from twisted.names import client as dns_client from twisted.python.procutils import which @@ -28,13 +27,12 @@ from twisted.internet import protocol from twisted.internet import abstract from twisted.internet import error as int_error from twisted.internet import _sslverify -from libervia.backend import G from libervia.backend.core.i18n import _, D_ from libervia.backend.core.constants import Const as C from libervia.backend.core.log import getLogger -from libervia.backend.core import exceptions from libervia.backend.tools.common import async_process from libervia.backend.memory import params +from libervia import media log = getLogger(__name__) @@ -283,8 +281,7 @@ class AndroidPlugin(object): self.am = activity.getSystemService(Context.AUDIO_SERVICE) # sound notification - media_dir = G.config.common.media_dir - assert media_dir is not None + media_dir = media.get_path() notif_path = media_dir / "sounds" / "notifications" / "music-box.mp3" self.notif_player = MediaPlayer() self.notif_player.setDataSource(str(notif_path)) diff --git a/libervia/backend/test/test_plugin_misc_radiocol.py b/libervia/backend/test/test_plugin_misc_radiocol.py index d6dfbcf1..12c79b13 100644 --- a/libervia/backend/test/test_plugin_misc_radiocol.py +++ b/libervia/backend/test/test_plugin_misc_radiocol.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 -# SAT: a jabber client +# Libervia XMPP client. # Copyright (C) 2009, 2010, 2011, 2012, 2013 Jérôme Poisson (goffi@goffi.org) # Copyright (C) 2013 Adrien Cossa (souliane@mailoo.org) @@ -24,6 +24,7 @@ from libervia.backend.core import exceptions from libervia.backend.test import helpers, helpers_plugins from libervia.backend.plugins import plugin_misc_radiocol as plugin from libervia.backend.plugins import plugin_misc_room_game as plugin_room_game +from libervia import media from .constants import Const from twisted.words.protocols.jabber.jid import JID @@ -76,8 +77,7 @@ class RadiocolTest(helpers.SatTestCase): self.host.get_client(profile) # init self.host.profiles[profile] self.songs = [] self.playlist = [] - assert self.host.memory.config.common.media_dir is not None - self.sound_dir = str(self.host.memory.config.common.media_dir / "/test/sound/") + self.sound_dir = str(media.get_path() / "/test/sound/") try: for filename in os.listdir(self.sound_dir): if filename.endswith(".ogg") or filename.endswith(".mp3"): diff --git a/libervia/backend/tools/common/template.py b/libervia/backend/tools/common/template.py index c9ad8faa..0b724a4f 100644 --- a/libervia/backend/tools/common/template.py +++ b/libervia/backend/tools/common/template.py @@ -37,6 +37,7 @@ from jinja2 import utils from jinja2 import TemplateNotFound from jinja2 import pass_context from jinja2.loaders import split_template_path +from libervia import media from lxml import etree from markupsafe import Markup as safe import pygments @@ -518,7 +519,7 @@ class Renderer: self.env.filters["media_type_sub"] = self.media_type_sub # custom tests self.env.tests["in_the_past"] = self._in_the_past - self.fa_svgs_path = Path(host.media_dir, "fonts/fontawesome/svgs") + self.fa_svgs_path = media.get_path() / "fonts/fontawesome/svgs" # policies self.env.policies["ext.i18n.trimmed"] = True diff --git a/libervia/backend/tools/config.py b/libervia/backend/tools/config.py index 6a9cda35..f56bc8c2 100644 --- a/libervia/backend/tools/config.py +++ b/libervia/backend/tools/config.py @@ -236,10 +236,6 @@ class TorSettings(ConfigOptions): class CommonSettings(ConfigOptions): - # "media_dir": "/usr/share/" + Const.APP_NAME_FILE + "/media", - media_dir: DirectoryPath | None = Field( - default=None, description="Directory for media files" - ) local_dir: DirectoryPathAuto = Field( default=xdg_data_home / C.APP_NAME_FILE, description="Local directory for Libervia data", diff --git a/libervia/cli/base.py b/libervia/cli/base.py index d67c8a8c..f42f4063 100644 --- a/libervia/cli/base.py +++ b/libervia/cli/base.py @@ -151,7 +151,6 @@ class LiberviaCli: self.console = console.Console(theme=C.THEME_DEFAULT) self.settings = main_config self.cli_settings = main_config.get_settings(CLISettings) - self.media_dir = main_config.common.media_dir self.set_color_theme() bridge_module = dynamic_import.bridge(bridge_name, "libervia.frontends.bridge") if bridge_module is None: diff --git a/libervia/cli/call_gui.py b/libervia/cli/call_gui.py index bcdf43ad..49c4ff54 100644 --- a/libervia/cli/call_gui.py +++ b/libervia/cli/call_gui.py @@ -48,6 +48,7 @@ from PyQt6.QtWidgets import ( QWidget, ) import gi +from libervia import media from libervia.backend.core.i18n import _ from libervia.frontends.tools import aio, display_servers, webrtc @@ -204,8 +205,7 @@ class AVCallUI(QMainWindow): @classmethod async def run(cls, parent, call_data): """Run PyQt loop and show the app""" - media_dir = parent.host.settings.common.media_dir - icons_path = media_dir / "fonts/fontawesome/svgs/solid" + icons_path = media.get_path() / "fonts/fontawesome/svgs/solid" app = QApplication([]) av_call_gui = cls(parent.host, icons_path) av_call_gui.show()