diff --git a/src/decman/__init__.py b/src/decman/__init__.py index c1c341d..1561e24 100644 --- a/src/decman/__init__.py +++ b/src/decman/__init__.py @@ -380,6 +380,13 @@ class Module: """ return [] + def flatpak_packages(self) -> list[str]: + """ + Override this method to return flatpak packages that should be installed as a part of this + Module. + """ + return [] + def systemd_units(self) -> list[str]: """ Override this method to return systemd units that should be enabled as a part of this diff --git a/src/decman/lib/__init__.py b/src/decman/lib/__init__.py index 7719764..f277a8e 100644 --- a/src/decman/lib/__init__.py +++ b/src/decman/lib/__init__.py @@ -651,7 +651,7 @@ class Source: """ result: list[str] = [] - for pkg in self.flatpak_packages: + for pkg in self._all_flatpak_packages(): if pkg in self.ignored_flatpak_packages: continue if pkg not in currently_installed_packages: @@ -668,7 +668,7 @@ class Source: for package in currently_installed_packages: if package in self.ignored_flatpak_packages: continue - if package not in self.flatpak_packages: + if package not in self._all_flatpak_packages(): result.append(package) return result @@ -702,6 +702,15 @@ class Source: result.update(module.pacman_packages()) return result + def _all_flatpak_packages(self) -> set[str]: + result = set() + result.update(self.flatpak_packages) + for module in self.modules: + if module.enabled: + result.update(module.flatpak_packages()) + + return result + def _all_foreign_pkgs(self) -> set[str]: result = set() result.update(self.aur_packages) diff --git a/tests/test_source_resolution.py b/tests/test_source_resolution.py index 8b98577..2d9275b 100644 --- a/tests/test_source_resolution.py +++ b/tests/test_source_resolution.py @@ -1,5 +1,6 @@ # pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring +from typing import override import unittest from decman.lib import Source, Store from decman import UserPackage, Module @@ -73,6 +74,9 @@ class EnabledTestModule(Module): def systemd_user_units(self) -> dict[str, list[str]]: return {"muser": ["M_u1.service"]} + def flatpak_packages(self) -> list[str]: + return ["M_f1", "M_f2"] + class DisabledTestModule(Module): def __init__(self):