33
44from kivy .app import App
55from kivy .logger import Logger
6- from kivy .uix .settings import Settings
76
7+ from enum_here import ScreenName
88from herethere .here import ServerConfig , start_server
99from patches_here import monkeypatch_kivy
1010
1313
1414async def run_ssh_server (app ):
1515 """Start and run SSH server."""
16+ Logger .debug ("Python Here: wait for %here settings" )
17+ try :
18+ await app .ssh_server_config_ready .wait ()
19+ except asyncio .CancelledError :
20+ return
21+
1622 config = ServerConfig (
1723 host = "" ,
18- port = 8022 ,
19- username = "here" ,
20- password = "there" ,
2124 chroot = app .user_data_dir or "" ,
2225 key_path = "./key.rsa" ,
26+ ** app .get_pythonhere_config (),
2327 )
2428
2529 try :
@@ -48,15 +52,16 @@ class PythonHereApp(App):
4852 def __init__ (self ):
4953 super ().__init__ ()
5054 self .server_task = None
55+ self .settings = None
56+ self .ssh_server_config_ready = asyncio .Event ()
5157 self .ssh_server_started = asyncio .Event ()
5258 self .ssh_server_namespace = {}
5359
5460 def build (self ):
5561 """Initialize application UI."""
56- self .settings_cls = Settings
57-
5862 super ().build ()
59- self .root .switch_screen ("here" )
63+
64+ self .settings = self .root .ids .settings
6065
6166 self .ssh_server_namespace .update (
6267 {
@@ -65,6 +70,10 @@ def build(self):
6570 }
6671 )
6772
73+ self .settings .bind (on_config_change = self .handle_config_change )
74+ self .update_server_config_status ()
75+ self .root .switch_screen (ScreenName .here )
76+
6877 def run_app (self ):
6978 """Run application and SSH server tasks."""
7079 self .ssh_server_started = asyncio .Event ()
@@ -84,6 +93,22 @@ async def async_run_app(self):
8493 if self .server_task :
8594 self .server_task .cancel ()
8695
96+ def update_server_config_status (self ):
97+ """Check and update value of the `ssh_server_config_ready`."""
98+ if all (self .get_pythonhere_config ().values ()):
99+ self .ssh_server_config_ready .set ()
100+
101+ def get_pythonhere_config (self ):
102+ """Return user settings for SSH server."""
103+ return self .settings .get_pythonhere_config ()
104+
105+ def handle_config_change (
106+ self , settings , config , section , key , value
107+ ): # pylint: disable=too-many-arguments, unused-argument
108+ """Config change handler."""
109+ if section == "pythonhere" :
110+ self .update_server_config_status ()
111+
87112 def on_start (self ):
88113 """App start handler."""
89114 Logger .info ("Python Here: app started" )
0 commit comments