diff --git a/subiquity/server/controllers/source.py b/subiquity/server/controllers/source.py index c2e41f6eb1..3a8da05339 100644 --- a/subiquity/server/controllers/source.py +++ b/subiquity/server/controllers/source.py @@ -79,6 +79,7 @@ def __init__(self, app): self._handler = None self.source_path: Optional[str] = None self.ai_source_id: Optional[str] = None + self._configured: bool = False def make_autoinstall(self): return { @@ -148,10 +149,24 @@ def get_handler( async def configured(self): await super().configured() + self._configured = True self.app.base_model.set_source_variant(self.model.current.variant) async def POST(self, source_id: str, search_drivers: bool = False) -> None: - self.model.search_drivers = search_drivers + # Marking the source model configured has an effect on many of the + # other controllers. Oftentimes, it would involve cancelling and + # restarting various operations. + # Let's try not to trigger the event again if we are not changing any + # of the settings. + changed = False + if search_drivers != self.model.search_drivers: + changed = True + self.model.search_drivers = search_drivers with contextlib.suppress(KeyError): - self.model.current = self.model.get_matching_source(source_id) - await self.configured() + new_source = self.model.get_matching_source(source_id) + if new_source != self.model.current: + changed = True + self.model.current = new_source + + if changed or not self._configured: + await self.configured()