From 8d2f1f9a8bc6ea39869a992ae2c7b78fa24b366e Mon Sep 17 00:00:00 2001 From: Maciej Borzecki Date: Tue, 24 Mar 2020 11:18:53 +0100 Subject: [PATCH] console_conf/controllers: add recovery chooser controllers Add controller used by the recovery chooser. Signed-off-by: Maciej Borzecki --- console_conf/controllers/__init__.py | 10 +++++- console_conf/controllers/chooser.py | 53 ++++++++++++++++++++++++++++ console_conf/controllers/welcome.py | 10 ++++-- 3 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 console_conf/controllers/chooser.py diff --git a/console_conf/controllers/__init__.py b/console_conf/controllers/__init__.py index 631c78e2..175c588f 100644 --- a/console_conf/controllers/__init__.py +++ b/console_conf/controllers/__init__.py @@ -17,9 +17,17 @@ from .identity import IdentityController from subiquitycore.controllers.network import NetworkController -from .welcome import WelcomeController +from .welcome import WelcomeController, RecoveryChooserWelcomeController +from .chooser import ( + RecoveryChooserController, + RecoveryChooserConfirmController + ) + __all__ = [ 'IdentityController', 'NetworkController', 'WelcomeController', + 'RecoveryChooserWelcomeController', + 'RecoveryChooserController', + 'RecoveryChooserConfirmController', ] diff --git a/console_conf/controllers/chooser.py b/console_conf/controllers/chooser.py new file mode 100644 index 00000000..eae3ed6b --- /dev/null +++ b/console_conf/controllers/chooser.py @@ -0,0 +1,53 @@ +# Copyright 2020 Canonical, Ltd. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +import logging + +from console_conf.ui.views import ChooserView, ChooserConfirmView + +from subiquitycore.controller import BaseController + +log = logging.getLogger("console_conf.controllers.chooser") + + +class RecoveryChooserBaseController(BaseController): + def __init__(self, app): + super().__init__(app) + self.model = app.base_model + + def cancel(self): + # exit without taking any action + self.app.exit() + + +class RecoveryChooserController(RecoveryChooserBaseController): + def start_ui(self): + view = ChooserView(self, self.model.systems) + self.ui.set_body(view) + + def select(self, system, action): + self.model.select(system, action) + self.app.next_screen() + + +class RecoveryChooserConfirmController(RecoveryChooserBaseController): + def start_ui(self): + view = ChooserConfirmView(self, self.model.selection) + self.ui.set_body(view) + + def confirm(self): + log.warning("user action %s", self.model.selection) + # output the choice + self.app.respond(self.model.selection) + self.app.exit() diff --git a/console_conf/controllers/welcome.py b/console_conf/controllers/welcome.py index 907cc852..fe709e84 100644 --- a/console_conf/controllers/welcome.py +++ b/console_conf/controllers/welcome.py @@ -13,15 +13,17 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from console_conf.ui.views import WelcomeView +from console_conf.ui.views import WelcomeView, ChooserWelcomeView from subiquitycore.controller import BaseController class WelcomeController(BaseController): + welcome_view = WelcomeView + def start_ui(self): - view = WelcomeView(self) + view = self.welcome_view(self) self.ui.set_body(view) def done(self): @@ -30,3 +32,7 @@ class WelcomeController(BaseController): def cancel(self): # Can't go back from here! pass + + +class RecoveryChooserWelcomeController(WelcomeController): + welcome_view = ChooserWelcomeView