diff --git a/src/cli/wallet.py b/src/cli/wallet.py index b511566..b4aed56 100644 --- a/src/cli/wallet.py +++ b/src/cli/wallet.py @@ -502,6 +502,10 @@ def connect(self, ID, address, type): CONFIG = MeileConfig.read_configuration(MeileConfig.CONFFILE) PASSWORD = CONFIG['wallet'].get('password', '') KEYNAME = CONFIG['wallet'].get('keyname', '') + + confile = path.join(ConfParams.KEYRINGDIR, "connect.log") + conndesc = open(confile, 'w') + self.RPC = CONFIG['network'].get('rpc', HTTParams.RPC) @@ -523,10 +527,14 @@ def connect(self, ID, address, type): sessions = sdk.sessions.QuerySessionsForSubscription(int(ID)) for session in sessions: if session.status == Status.ACTIVE.value: + conndesc.write("Terminating any active session on chain...\n") + conndesc.flush() tx = sdk.sessions.EndSession(session_id=session.id, rating=0, tx_params=tx_params) print(sdk.sessions.wait_for_tx(tx["hash"])) tx = sdk.sessions.StartSession(subscription_id=int(ID), address=address, tx_params=tx_params) + conndesc.write("Creating new session...\n") + conndesc.flush() # Will need to handle log responses with friendly UI response in case of session create error if tx.get("log", None) is not None: self.connected = {"v2ray_pid" : None, "result": False, "status" : tx["log"]} @@ -582,6 +590,8 @@ def connect(self, ID, address, type): "signature": base64.b64encode(signature).decode("utf-8"), } print(payload) + conndesc.write("Fetching credentials from node...\n") + conndesc.flush() response = requests.post( f"{node.remote_url}/accounts/{sdk._account.address}/sessions/{session_id}", json=payload, @@ -612,7 +622,8 @@ def connect(self, ID, address, type): self.connected = {"v2ray_pid" : None, "result": False, "status" : f"Incorrect result size: {len(decode)}"} print(self.connected) return - + conndesc.write("Bringing up dVPN tunnel...\n") + conndesc.flush() ipv4_address = socket.inet_ntoa(decode[0:4]) + "/32" ipv6_address = socket.inet_ntop(socket.AF_INET6, decode[4:20]) + "/128" host = socket.inet_ntoa(decode[20:24]) @@ -663,9 +674,14 @@ def connect(self, ID, address, type): if psutil.net_if_addrs().get(iface): self.connected = {"v2ray_pid" : None, "result": True, "status" : iface} + conndesc.write("Checking network connection...\n") + conndesc.flush() self.get_ip_address() + conndesc.close() return else: # v2ray + conndesc.write("Bringing up V2Ray socks tunnel...\n") + conndesc.flush() if len(decode) != 7: self.connected = {"v2ray_pid" : None, "result": False, "status" : f"Incorrect result size: {len(decode)}"} print(self.connected) @@ -729,12 +745,18 @@ def connect(self, ID, address, type): if tuniface is True: self.connected = {"v2ray_pid" : v2ray_handler.v2ray_pid, "result": True, "status" : tuniface} print(self.connected) + conndesc.write("Checking network connection...\n") + conndesc.flush() self.get_ip_address() + conndesc.close() return else: try: + conndesc.write("Error connecting to V2Ray node...\n") + conndesc.flush() v2ray_handler.v2ray_script = f"{v2ray_tun2routes_connect_bash} down" v2ray_handler.kill_daemon() + conndesc.close() except Exception as e: print(str(e)) diff --git a/src/kv/meile.kv b/src/kv/meile.kv index ef43647..e35a3fb 100644 --- a/src/kv/meile.kv +++ b/src/kv/meile.kv @@ -525,6 +525,7 @@ WindowManager: pos_hint: {'center_x': 0.5, 'top': .925} spacing: '40dp' Image: + id: qr source: root.qr_address pos_hint: {'x': 0, 'top': 1} size_hint_y: .5 @@ -1948,16 +1949,31 @@ WindowManager: size_hint_y: None - height: "7dp" - - MDProgressBar: - id: pb - value: 0.01 - min: 0 - max: 1 - color: get_color_from_hex(MeileColors.MEILE) - pos_hint: {'center_x' : .5, "y" : .5} - size_hint_x: .85 + orientation: "vertical" + height: "30dp" # Adjusted height for visibility + padding: "10dp" + spacing: "10dp" + MDBoxLayout: + orientation: "vertical" + size_hint_y: None + height: self.minimum_height + MDLabel: + id: status + text: "Connecting..." + halign: "center" # Center align the text for better visibility + size_hint_y: None + height: self.texture_size[1] + dp(10) # Ensure the label has a height + + MDProgressBar: + id: pb + value: 0.01 + min: 0 + max: 1 + color: get_color_from_hex(MeileColors.MEILE) + size_hint_y: None + height: "10dp" # Set explicit height for the progress bar + size_hint_x: .85 + pos_hint: {'center_x': .5} orientation: "vertical" diff --git a/src/ui/interfaces.py b/src/ui/interfaces.py index bb097c6..4d61da4 100644 --- a/src/ui/interfaces.py +++ b/src/ui/interfaces.py @@ -112,7 +112,7 @@ class ClickableTextFieldRoundCVV(MDRelativeLayout): class TXContent(BoxLayout): pass -class ConnectionDialog(MDFloatLayout): +class ConnectionDialog(MDBoxLayout): pass diff --git a/src/ui/screens.py b/src/ui/screens.py index f3993db..e34c8fe 100644 --- a/src/ui/screens.py +++ b/src/ui/screens.py @@ -392,7 +392,7 @@ def __init__(self, node_tree, **kwargs): Clock.schedule_once(self.get_config,1) Clock.schedule_once(self.build, 1) - + Clock.schedule_interval(self.update_wallet, 60) menu_icons = ["cloud-refresh", "sort", "shield-lock", "exit-to-app"] menu_items = [ { @@ -406,6 +406,12 @@ def __init__(self, node_tree, **kwargs): caller=self.ids.settings_menu, width_mult=3, background_color=get_color_from_hex(MeileColors.BLACK)) + + def update_wallet(self, dt): + MeileConfig = MeileGuiConfig() + CONFIG = MeileConfig.read_configuration(MeileGuiConfig.CONFFILE) + + self.address = CONFIG['wallet'].get('address', None) def ping(self): UUID = Meile.app.root.get_screen(WindowNames.PRELOAD).UUID try: @@ -427,24 +433,45 @@ def connect_routine(self): @delayable def connect(): - cd = ConnectionDialog() - self.set_conn_dialog(cd, "Connecting...") + CONNFILE_OPENED = False + self.cd = ConnectionDialog() + self.set_conn_dialog(self.cd, " ") yield 0.3 + confile = path.join(ConfParams.KEYRINGDIR, "connect.log") + if path.isfile(confile): + remove(confile) + + with open(confile, 'a'): + pass + + hwf = HandleWalletFunctions() thread = Thread(target=lambda: self.ping()) thread.start() t = Thread(target=lambda: hwf.connect(ID, naddress, type)) t.start() - + while t.is_alive(): - yield 0.0365 - if "WireGuard" not in type: - cd.ids.pb.value += 0.001 - else: - cd.ids.pb.value += 0.00175 - - cd.ids.pb.value = 1 + yield 0.0314 + self.cd.ids.pb.value += 0.00085 + + #if "WireGuard" not in type: + # self.cd.ids.pb.value += 0.001 + #else: + # self.cd.ids.pb.value += 0.001 + try: + if path.isfile(confile) and not CONNFILE_OPENED: + conndesc = open(confile, 'r') + CONNFILE_OPENED = True + elif path.isfile(confile): + self.update_conn_dialog_title(conndesc.readlines()[-1]) + except IndexError: + pass + + + #conndesc.close() + self.cd.ids.pb.value = 1 self.ConnectedDict = deepcopy(hwf.connected) yield 0.420 @@ -1279,6 +1306,11 @@ def set_conn_dialog(self, cd, title): md_bg_color=get_color_from_hex(MeileColors.BLACK), ) self.dialog.open() + + def update_conn_dialog_title(self, new_title): + if self.dialog: + self.cd.ids.status.text = new_title + def load_country_nodes(self, country, *kwargs): mw = Meile.app.root.get_screen(WindowNames.MAIN_WINDOW) @@ -1858,7 +1890,9 @@ class PlanScreen(MDBoxLayout): def __init__(self, **kwargs): super(PlanScreen, self).__init__() self.mw = Meile.app.root.get_screen(WindowNames.MAIN_WINDOW) - wallet = self.mw.address + MeileConfig = MeileGuiConfig() + CONFIG = MeileConfig.read_configuration(MeileGuiConfig.CONFFILE) + wallet = CONFIG['wallet'].get('address', None) Request = HTTPRequests.MakeRequest() http = Request.hadapter()