@@ -43,6 +43,10 @@ def process_output_line(self, line: str):
4343 QTimer .singleShot (100 , self .auto_unlock_wallet )
4444 elif 'Unable to synchronize wallet to chain' in line :
4545 self .process .terminate ()
46+ elif 'Started rescan from block' in line :
47+ self .system_tray .menu .lnd_status_action .setText (
48+ 'LND syncing'
49+ )
4650 elif 'Unable to complete chain rescan' in line :
4751 self .process .terminate ()
4852 elif 'Starting HTLC Switch' in line :
@@ -75,6 +79,11 @@ def process_output_line(self, line: str):
7579 self .old_height = new_height
7680 self .old_timestamp = new_timestamp
7781
82+ elif 'Shutdown complete' in line :
83+ self .system_tray .menu .lnd_status_action .setText (
84+ 'LND has shutdown'
85+ )
86+
7887 def restart_process (self ):
7988 QTimer .singleShot (3000 , self .process .start )
8089
@@ -90,6 +99,10 @@ def unlock_wallet(lnd, progress_callback, password: str):
9099 details = e .details ()
91100 return details
92101
102+ @property
103+ def keyring_service_name (self ):
104+ return f'lnd_{ self .node_set .bitcoin .network } _wallet_password'
105+
93106 def generate_seed (self , new_seed_password : str ):
94107 try :
95108 generate_seed_response = self .node_set .lnd_client .generate_seed (
@@ -134,15 +147,14 @@ def handle_unlock_wallet(self, details: str):
134147 # User needs to create a new wallet
135148 elif 'wallet not found' in details :
136149 new_wallet_password = get_random_password ()
137- keyring_service_name = keyring_user_name = f'lnd_wallet_password'
138150 log .info (
139151 'create_wallet' ,
140- keyring_service_name = keyring_service_name ,
141- keyring_user_name = keyring_user_name
152+ keyring_service_name = self . keyring_service_name ,
153+ keyring_user_name = self . keyring_service_name
142154 )
143155 keyring .set_password (
144- service = keyring_service_name ,
145- username = keyring_user_name ,
156+ service = self . keyring_service_name ,
157+ username = self . keyring_service_name ,
146158 password = new_wallet_password
147159 )
148160 seed = self .generate_seed (new_wallet_password )
@@ -160,32 +172,49 @@ def handle_unlock_wallet(self, details: str):
160172 username = self .node_set .bitcoin .file ['rpcuser' ],
161173 password = new_wallet_password
162174 )
175+ elif 'invalid passphrase for master public key' in details :
176+ self .system_tray .menu .lnd_status_action .setText (
177+ 'Invalid LND Password'
178+ )
163179 else :
164180 log .warning (
165181 'unlock_wallet failed' ,
166182 details = details ,
167183 exc_info = True
168184 )
169185
186+ def get_password (self ):
187+ passwords = []
188+ for service_name in [self .keyring_service_name , 'lnd_wallet_password' ]:
189+ for user_name in [self .keyring_service_name , self .node_set .bitcoin .file ['rpcuser' ], 'lnd_wallet_password' ]:
190+ log .info (
191+ 'auto_unlock_wallet_get_password' ,
192+ keyring_service_name = service_name ,
193+ keyring_user_name = user_name
194+ )
195+ password = keyring .get_password (
196+ service = service_name ,
197+ username = user_name ,
198+ )
199+ if password is not None :
200+ log .info (
201+ 'Successfully got password from' ,
202+ keyring_service_name = service_name ,
203+ keyring_user_name = user_name
204+ )
205+ passwords += [password ]
206+ return passwords
207+
170208 def auto_unlock_wallet (self ):
171- keyring_service_name = f'lnd_{ self .node_set .bitcoin .network } _wallet_password'
172- keyring_user_name = self .node_set .bitcoin .file ['rpcuser' ]
173- log .info (
174- 'auto_unlock_wallet_get_password' ,
175- keyring_service_name = keyring_service_name ,
176- keyring_user_name = keyring_user_name
177- )
178- password = keyring .get_password (
179- service = keyring_service_name ,
180- username = keyring_user_name ,
181- )
182- worker = Worker (
183- fn = self .unlock_wallet ,
184- lnd = self .node_set .lnd ,
185- password = password
186- )
187- worker .signals .result .connect (self .handle_unlock_wallet )
188- self .threadpool .start (worker )
209+ for password in self .get_password ():
210+ worker = Worker (
211+ fn = self .unlock_wallet ,
212+ lnd = self .node_set .lnd ,
213+ password = password
214+ )
215+ worker .signals .result .connect (self .handle_unlock_wallet )
216+ worker .signals .error .connect (self .handle_unlock_wallet )
217+ self .threadpool .start (worker )
189218
190219 def show (self ):
191220 self .showMaximized ()
0 commit comments