diff --git a/src/app.py b/src/app.py index ef8b54a01..c938a91c4 100644 --- a/src/app.py +++ b/src/app.py @@ -164,6 +164,8 @@ def app_info(app, full=False, upgradable=False): ret["current_version"] = f" ({current_revision})" ret["new_version"] = f" ({new_revision})" + ret["settings"] = settings + if not full: return ret @@ -175,7 +177,6 @@ def app_info(app, full=False, upgradable=False): ret["manifest"]["install"] = _set_default_ask_questions( ret["manifest"].get("install", {}) ) - ret["settings"] = settings ret["from_catalog"] = from_catalog diff --git a/src/tools.py b/src/tools.py index b4eef34cc..58c8dee7f 100644 --- a/src/tools.py +++ b/src/tools.py @@ -20,6 +20,7 @@ import re import os import subprocess import time +import shutil from importlib import import_module from packaging import version from typing import List @@ -29,7 +30,13 @@ from moulinette.utils.log import getActionLogger from moulinette.utils.process import call_async_output from moulinette.utils.filesystem import read_yaml, write_to_yaml, cp, mkdir, rm, chown -from yunohost.app import app_upgrade, app_list +from yunohost.app import ( + app_upgrade, + app_list, + _filter_and_hydrate_notifications, + _extract_app, + _parse_app_instance_name, +) from yunohost.app_catalog import ( _initialize_apps_catalog_system, _update_apps_catalog, @@ -365,6 +372,21 @@ def tools_update(target=None): upgradable_apps = list(app_list(upgradable=True)["apps"]) + # Retrieve next manifest notifications + for app in upgradable_apps: + absolute_app_name, _ = _parse_app_instance_name(app["id"]) + manifest, extracted_app_folder = _extract_app(absolute_app_name) + current_version = version.parse(app["current_version"]) + app["notifications"] = { + type_: _filter_and_hydrate_notifications( + manifest["notifications"][type_], current_version, app["settings"] + ) + for type_ in ("pre_upgrade", "post_upgrade") + } + # FIXME Post-upgrade notifs should be hydrated with post-upgrade app settings + del app["settings"] + shutil.rmtree(extracted_app_folder) + if len(upgradable_apps) == 0 and len(upgradable_system_packages) == 0: logger.info(m18n.n("already_up_to_date"))