Skip to content

Commit

Permalink
pairing step bug fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
BHznJNs committed Nov 16, 2024
1 parent 87a6cd6 commit e09a660
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 17 deletions.
47 changes: 33 additions & 14 deletions adb_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,21 @@
os.environ["ADBUTILS_ADB_PATH"] = str(adb_bin_path)
ADB_BIN_PATH = str(adb_bin_path)

def try_connect_device(addr: str, timeout: float=3.0) -> adbutils.AdbClient | None:
client = adbutils.AdbClient()
def start_adb_server() -> bool:
command = f"{ADB_BIN_PATH} start-server"
try:
output = client.connect(addr, timeout)
assert len(client.device_list()) > 0
LOGGER.write(LogType.Server, output)
except adbutils.AdbTimeout as e:
client.disconnect(addr)
LOGGER.write(LogType.Error, "Connect timeout: " + str(e))
return None
process = subprocess.Popen(
command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
)
process.wait()
return True
except Exception as e:
client.disconnect(addr)
LOGGER.write(LogType.Error, "Connect failed: " + str(e))
return None
return client
process.terminate()
LOGGER.write(LogType.Error, "ADB server failed to start: " + str(e))
return False

def try_pairing(addr: str, pairing_code: str) -> bool:
command = f"{ADB_BIN_PATH} pair {addr} {pairing_code}"
Expand All @@ -38,12 +38,31 @@ def try_pairing(addr: str, pairing_code: str) -> bool:
stderr=subprocess.PIPE,
text=True,
)
process.wait()
process.wait(3)
_, stderr = process.communicate()
if stderr: raise Exception(stderr)
return True
except Exception as e:
process.terminate()
LOGGER.write(LogType.Error, "ADB failed to pair: " + str(e))
return False

def try_connect_device(addr: str, timeout: float=3.0) -> adbutils.AdbClient | None:
client = adbutils.AdbClient()
try:
output = client.connect(addr, timeout)
assert len(client.device_list()) > 0
LOGGER.write(LogType.Server, output)
except adbutils.AdbTimeout as e:
client.disconnect(addr)
LOGGER.write(LogType.Error, "Connect timeout: " + str(e))
return None
except Exception as e:
client.disconnect(addr)
LOGGER.write(LogType.Error, "Connect failed: " + str(e))
return None
return client

def get_display_size(adb_client: adbutils.AdbClient) -> tuple[int, int]:
device = adb_client.device_list()[0]
output = str(device.shell("dumpsys window displays"))
Expand Down
2 changes: 2 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import sys
import adbutils

from adb_controller import start_adb_server
from multiprocessing import freeze_support
from input.controller import main_loop
from server import ADBConnectionError, InvalidDummyByteException, server_process_factory, try_connect_server
Expand Down Expand Up @@ -50,6 +51,7 @@ def close_notification_resolver(errno: Exception | None):
if __name__ == "__main__":
freeze_support()

start_adb_server()
open_connecting_window()

server_process = server_process_factory()
Expand Down
7 changes: 4 additions & 3 deletions ui/connecting_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,15 @@ def pair_callback():

addr = addr_entry.get().strip()
pairing_code = pairing_code_entry.get().strip()
if not is_valid_ip(addr):
if not is_valid_ip_port(addr):
error_label.configure(text=I18N(["Invalid pairing address!", "配对地址无效!"]))
return
ret = try_pairing(addr, pairing_code)
if ret == False:
if not ret:
error_label.configure(text=I18N(["Pairing Failed!", "配对失败!"]))
return
device_ip = get_ip_from_ip_port(addr)
connecting_addr_entry.delete(0, ctk.END)
connecting_addr_entry.insert(0, device_ip)
tabview.set(I18N(["Connecting", "连接"]))
connecting_window.deiconify()
Expand Down Expand Up @@ -131,7 +132,7 @@ def direct_connect(addr: str):
nonlocal process_data_queue
if not is_valid_ip(addr):
process_data_queue.put(
ProcessError(I18N(["Invalid connecting address!", "配对地址无效!"])))
ProcessError(I18N(["Invalid connecting address!", "连接地址无效!"])))
return
ret = try_connect_device(addr)
if ret is not None:
Expand Down

0 comments on commit e09a660

Please sign in to comment.