diff --git a/svc/src/hudctrl/api.py b/svc/src/hudctrl/api.py index 0ca59b9..8d393c8 100644 --- a/svc/src/hudctrl/api.py +++ b/svc/src/hudctrl/api.py @@ -54,7 +54,8 @@ async def get_monitor_config(): @app.put('/display/monitors') async def put_monitor_config( - monitors: str = fastapi.Body(..., media_type='text/plain') + bgtasks: fastapi.BackgroundTasks, + monitors: str = fastapi.Body(..., media_type='text/plain'), ): try: svc.monitor_config = MonitorConfig.from_string(monitors) @@ -64,6 +65,7 @@ async def put_monitor_config( fastapi.status.HTTP_400_BAD_REQUEST, detail=f'Invalid monitor config: {e}', ) + bgtasks.add_task(svc.save_config) return {'monitor_config': svc.monitor_config} diff --git a/svc/src/hudctrl/hud.py b/svc/src/hudctrl/hud.py index fa8adba..8f11c6c 100644 --- a/svc/src/hudctrl/hud.py +++ b/svc/src/hudctrl/hud.py @@ -143,6 +143,19 @@ class HUDService: await self.marionette.switch_to_window(self.windows[name]) await self.marionette.refresh() + def save_config(self) -> None: + log.info('Saving configuration to %s', self.config_file) + config = Configuration( + monitors=self.monitor_config.monitors + if self.monitor_config + else [], + urls=self.urls, + host=self.host, + port=self.port, + ) + f = self.config_file.open('w', encoding='utf-8') + f.write(config.json()) + async def set_display(self, host: str, port: int) -> None: if self.marionette: log.warning('Closing existing Marionette connection')