From 64d63bdd245cabbdd3893bcd2b76b3cb07b12e57 Mon Sep 17 00:00:00 2001 From: RedDeadDepresso <94017243+RedDeadDepresso@users.noreply.github.com> Date: Fri, 5 Jan 2024 18:07:29 +0000 Subject: [PATCH] test: exit emulator --- module/alas.py | 74 ++++++++++++++++------ module/config/argument/args.json | 2 + module/config/argument/argument.yaml | 2 +- module/config/config_generated.py | 2 +- module/config/i18n/en-US.json | 2 + module/config/i18n/zh-CN.json | 2 + module/device/platform/platform_windows.py | 2 + 7 files changed, 64 insertions(+), 22 deletions(-) diff --git a/module/alas.py b/module/alas.py index 8e2167f..e155377 100644 --- a/module/alas.py +++ b/module/alas.py @@ -29,6 +29,7 @@ class AzurLaneAutoScript: # Failure count of tasks # Key: str, task name, value: int, failure count self.failure_record = {} + self.operating_system = platform.system() @cached_property def config(self): @@ -231,21 +232,19 @@ class AzurLaneAutoScript: if not self.wait_until(task.next_run): del_cached_property(self, 'config') continue + elif method == 'exit_aas': + self.exit_aas() + release_resources() + self.device.release_during_wait() + if not self.wait_until(task.next_run): + del_cached_property(self, 'config') + continue + elif method == 'exit_aas_emulator': + self.exit_emulator() + self.exit_aas() + exit(0) elif method == 'shutdown': - os = platform.system() - if os not in ["Windows", "Linux", "Darwin"]: - logger.info("Shutdown set during wait but operating system not supported") - else: - logger.info('Shutdown during wait') - try: - self.shutdown(os) - msg = CTkMessagebox(title="AAS: Cancel Shutdown?", message="All tasks have been completed: shutting down. Do you want to cancel?", - icon="MCE\icons\question.png", option_1="Cancel") - response = msg.get() - if response=="Cancel": - self.abort_shutdown(os) - except: - logger.error("Failed to shutdown. It may be due to a lack of administrator privileges.") + self.shutdown() release_resources() self.device.release_during_wait() if not self.wait_until(task.next_run): @@ -331,17 +330,52 @@ class AzurLaneAutoScript: self.checker.check_now() continue - def shutdown(self, os): + def exit_emulator(self): + if self.operating_system != 'Windows': + logger.error("Exiting emulator is only supported on Windows") + return + try: + from module.device.platform.platform_windows import PlatformWindows + PlatformWindows(self.config).emulator_stop() + except: + logger.error("Failed to stop emulator. It may be due to a lack of administrator privileges or incorrect input in Emulator Settings.") + + def exit_aas(self): + if self.operating_system != 'Windows': + logger.error("Exiting AAS is only supported on Windows") + return + try: + from module.device.platform.platform_windows import PlatformWindows + PlatformWindows(self.config).kill_process_by_regex("aas\.exe") + except: + logger.error("Failed to stop AAS. It may be due to a lack of administrator privileges.") + + def shutdown(self): + if self.operating_system not in ["Windows", "Linux", "Darwin"]: + logger.info("Shutdown set during wait but operating system not supported") + else: + logger.info('Shutdown during wait') + try: + self.start_shutdown() + msg = CTkMessagebox(title="AAS: Cancel Shutdown?", message="All tasks have been completed: shutting down. Do you want to cancel?", + icon="MCE\icons\question.png", option_1="Cancel") + response = msg.get() + if response=="Cancel": + self.cancel_shutdown() + except: + logger.error("Failed to shutdown. It may be due to a lack of administrator privileges.") + + def start_shutdown(self): logger.info("Running Shutting down") - if os == "Windows": + if self.operating_system == "Windows": subprocess.run(["shutdown", "-s", "-t", "60"]) - elif os in ["Linux", "Darwin"]: + elif self.operating_system in ["Linux", "Darwin"]: subprocess.run(["shutdown", "-h", "+1"]) - def abort_shutdown(self, os): - if os == "Windows": + def cancel_shutdown(self): + if self.operating_system == "Windows": subprocess.run(["shutdown", "-a"]) - elif os in ["Linux", "Darwin"]: + elif self.operating_system in ["Linux", "Darwin"]: subprocess.run(["shutdown", "-c"]) if __name__ == '__main__': diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 91f4ee9..a0bd144 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -129,6 +129,8 @@ "stay_there", "goto_main", "close_game", + "exit_aas", + "exit_aas_emulator", "shutdown" ] } diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 9a3464a..e27fe1e 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -71,7 +71,7 @@ Optimization: CombatScreenshotInterval: 1.0 WhenTaskQueueEmpty: value: goto_main - option: [ stay_there, goto_main, close_game, shutdown ] + option: [ stay_there, goto_main, close_game, exit_aas, exit_aas_emulator, shutdown ] # ==================== Daily ==================== diff --git a/module/config/config_generated.py b/module/config/config_generated.py index ca9c668..ae27721 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -37,7 +37,7 @@ class GeneratedConfig: # Group `Optimization` Optimization_ScreenshotInterval = 0.3 Optimization_CombatScreenshotInterval = 1.0 - Optimization_WhenTaskQueueEmpty = 'goto_main' # stay_there, goto_main, close_game, shutdown + Optimization_WhenTaskQueueEmpty = 'goto_main' # stay_there, goto_main, close_game, exit_aas, exit_aas_emulator, shutdown # Group `Cafe` Cafe_Reward = True diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index b8bb086..c14d8ee 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -225,6 +225,8 @@ "stay_there": "Stay There", "goto_main": "Goto Main Page", "close_game": "Close Game", + "exit_aas": "Exit AAS", + "exit_aas_emulator": "Exit AAS & Emulator", "shutdown": "Shutdown" } }, diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 81e3d75..bb1425a 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -225,6 +225,8 @@ "stay_there": "停在原处", "goto_main": "前往主界面", "close_game": "关闭游戏", + "exit_aas": "exit_aas", + "exit_aas_emulator": "exit_aas_emulator", "shutdown": "shutdown" } }, diff --git a/module/device/platform/platform_windows.py b/module/device/platform/platform_windows.py index 0490156..bc5ca8c 100644 --- a/module/device/platform/platform_windows.py +++ b/module/device/platform/platform_windows.py @@ -153,6 +153,8 @@ class PlatformWindows(PlatformBase, EmulatorManager): elif instance == Emulator.NoxPlayerFamily: # Nox.exe -clone:Nox_1 -quit self.execute(f'"{exe}" -clone:{instance.name} -quit') + elif instance == Emulator.BlueStacks5: + self.execute(f'taskkill /fi "WINDOWTITLE eq {instance.name}" /IM "HD-Player.exe" /F') else: raise EmulatorUnknown(f'Cannot stop an unknown emulator instance: {instance}')