@@ -117,6 +117,8 @@ def __str__(self):
117117 return "NWCWallet"
118118
119119 def handle_new_balance (self , new_balance , fetchPaymentsIfChanged = True ):
120+ if not self .keep_running :
121+ return
120122 if new_balance != self .last_known_balance :
121123 print ("Balance changed!" )
122124 self .last_known_balance = new_balance
@@ -127,11 +129,15 @@ def handle_new_balance(self, new_balance, fetchPaymentsIfChanged=True):
127129 self .fetch_payments () # if the balance changed, then re-list transactions
128130
129131 def handle_new_payment (self , new_payment ):
132+ if not self .keep_running :
133+ return
130134 print ("handle_new_payment" )
131135 self .payment_list .add (new_payment )
132136 self .payments_updated_cb ()
133137
134138 def handle_new_payments (self , new_payments ):
139+ if not self .keep_running :
140+ return
135141 print ("handle_new_payments" )
136142 if self .payment_list != new_payments :
137143 print ("new list of payments" )
@@ -163,6 +169,7 @@ def __init__(self, lnbits_url, lnbits_readkey):
163169 super ().__init__ ()
164170 self .lnbits_url = lnbits_url
165171 self .lnbits_readkey = lnbits_readkey
172+ self .ws = None
166173
167174
168175 def parseLNBitsPayment (self , transaction ):
@@ -215,14 +222,16 @@ def wallet_manager_thread(self):
215222 new_balance = self .fetch_balance () # TODO: only do this every 60 seconds, but loop the main thread more frequently
216223 except Exception as e :
217224 print (f"WARNING: wallet_manager_thread got exception { e } , ignorning." )
218- if not websocket_running : # after
225+ if not websocket_running and self . keep_running : # after
219226 websocket_running = True
220227 _thread .stack_size (mpos .apps .good_stack_size ())
221228 _thread .start_new_thread (self .websocket_thread , ())
222- print ("Sleeping a while before re-fetching balance..." )
223- time .sleep (60 )
229+ if self .keep_running :
230+ print ("Sleeping a while before re-fetching balance..." )
231+ time .sleep (60 )
224232 print ("wallet_manager_thread stopping" )
225- self .ws .close ()
233+ if self .ws :
234+ self .ws .close ()
226235
227236 def fetch_balance (self ):
228237 walleturl = self .lnbits_url + "/api/v1/wallet"
@@ -234,7 +243,7 @@ def fetch_balance(self):
234243 response = requests .get (walleturl , timeout = 10 , headers = headers )
235244 except Exception as e :
236245 print ("fetch_balance: get request failed:" , e )
237- if response and response .status_code == 200 :
246+ if response and response .status_code == 200 and self . keep_running :
238247 response_text = response .text
239248 print (f"Got response text: { response_text } " )
240249 response .close ()
@@ -258,7 +267,7 @@ def fetch_payments(self):
258267 response = requests .get (paymentsurl , timeout = 10 , headers = headers )
259268 except Exception as e :
260269 print ("fetch_payments: get request failed:" , e )
261- if response and response .status_code == 200 :
270+ if response and response .status_code == 200 and self . keep_running :
262271 response_text = response .text
263272 print (f"Got response text: { response_text } " )
264273 response .close ()
@@ -309,9 +318,11 @@ def wallet_manager_thread(self):
309318 if self .relay_manager .relays [self .relay ].connected is True :
310319 self .connected = True
311320 break
321+ elif not self .keep_running :
322+ break
312323 print ("Waiting for relay connection..." )
313- if not self .connected :
314- print (f"ERROR: could not connect to NWC relay { self .relay } , aborting..." )
324+ if not self .connected or not self . keep_running :
325+ print (f"ERROR: could not connect to NWC relay { self .relay } or not self.keep_running , aborting..." )
315326 # TODO: call an error callback to notify the user
316327 return
317328
@@ -329,7 +340,10 @@ def wallet_manager_thread(self):
329340 request_message = [ClientMessageType .REQUEST , self .subscription_id ]
330341 request_message .extend (self .filters .to_json_array ())
331342 self .relay_manager .publish_message (json .dumps (request_message ))
332- time .sleep (5 )
343+ for _ in range (10 ):
344+ if not self .keep_running :
345+ return
346+ time .sleep (0.5 )
333347
334348 self .fetch_balance ()
335349
@@ -390,6 +404,8 @@ def wallet_manager_thread(self):
390404 self .relay_manager .close_connections ()
391405
392406 def fetch_balance (self ):
407+ if not self .keep_running :
408+ return
393409 # Create get_balance request
394410 balance_request = {
395411 "method" : "get_balance" ,
@@ -407,6 +423,8 @@ def fetch_balance(self):
407423 self .relay_manager .publish_event (dm )
408424
409425 def fetch_payments (self ):
426+ if not self .keep_running :
427+ return
410428 # Create get_balance request
411429 list_transactions = {
412430 "method" : "list_transactions" ,
0 commit comments