Skip to content

Commit 9eebff8

Browse files
authored
fix: poll device readiness when game already running (#57)
Headless -t startup failed when the game was already open because start_device only called check_device_error once for connected devices. Reuse the same wait loop as cold start. Fixes ok-oldking/ok-wuthering-waves#1293
1 parent 2ca9cb6 commit 9eebff8

1 file changed

Lines changed: 20 additions & 18 deletions

File tree

ok/gui/StartController.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,22 @@ def add_task_to_enable(enable_task):
7575
communicate.starting_emulator.emit(True, self.tr(f'Start failed: {e}'), 0)
7676
return False
7777

78+
def _wait_until_device_ready(self):
79+
wait_until = time.time() + self.start_timeout
80+
while not self.exit_event.is_set():
81+
og.device_manager.do_refresh(True)
82+
error = self.check_device_error()
83+
if error is None:
84+
return True
85+
logger.error(f'waiting for game to start error {error}')
86+
remaining_time = wait_until - time.time()
87+
if remaining_time <= 0:
88+
communicate.starting_emulator.emit(True, self.tr('Start game timeout!'), 0)
89+
return False
90+
communicate.starting_emulator.emit(False, None, int(remaining_time))
91+
time.sleep(2)
92+
return False
93+
7894
def start_device(self):
7995
device = og.device_manager.get_preferred_device()
8096
logger.info(f'start_device: {device}')
@@ -96,28 +112,14 @@ def start_device(self):
96112
if not execute(path, arguments=args):
97113
communicate.starting_emulator.emit(True, self.tr("Start game failed, please start game first"), 0)
98114
return False
99-
wait_until = time.time() + self.start_timeout
100-
while not self.exit_event.is_set():
101-
og.device_manager.do_refresh(True)
102-
error = self.check_device_error()
103-
if error is None:
104-
break
105-
logger.error(f'waiting for game to start error {error}')
106-
remaining_time = wait_until - time.time()
107-
if remaining_time <= 0:
108-
communicate.starting_emulator.emit(True, self.tr('Start game timeout!'), 0)
109-
return False
110-
communicate.starting_emulator.emit(False, None, int(remaining_time))
111-
time.sleep(2)
115+
if not self._wait_until_device_ready():
116+
return False
112117
else:
113118
communicate.starting_emulator.emit(True,
114119
self.tr('Game path does not exist, Please open game manually!'), 0)
115120
return False
116-
else:
117-
error = self.check_device_error()
118-
if error:
119-
communicate.starting_emulator.emit(True, error, 0)
120-
return False
121+
elif not self._wait_until_device_ready():
122+
return False
121123
communicate.starting_emulator.emit(True, None, 0)
122124
return True
123125

0 commit comments

Comments
 (0)