Use asyncio.run

This commit is contained in:
DevilXD committed 2023-07-05 21:44:22 +02:00
1 parent cb9a0789fe
commit c2a5db8a6a
1 file changed
+37 -35
+37 -35
View File
@@ -164,38 +164,40 @@ if __name__ == "__main__":
logging.getLogger("TwitchDrops.websocket").setLevel(settings.debug_ws) logging.getLogger("TwitchDrops.websocket").setLevel(settings.debug_ws)
# client run # client run
exit_status = 0 async def main():
loop = asyncio.new_event_loop() exit_status = 0
asyncio.set_event_loop(loop) client = Twitch(settings)
client = Twitch(settings) loop = asyncio.get_running_loop()
signal.signal(signal.SIGINT, lambda *_: client.gui.close()) if sys.platform == "linux":
signal.signal(signal.SIGTERM, lambda *_: client.gui.close()) loop.add_signal_handler(signal.SIGINT, lambda *_: client.gui.close())
try: loop.add_signal_handler(signal.SIGTERM, lambda *_: client.gui.close())
loop.run_until_complete(client.run()) try:
except CaptchaRequired: await client.run()
exit_status = 1 except CaptchaRequired:
client.prevent_close() exit_status = 1
client.print(_("error", "captcha")) client.prevent_close()
except Exception: client.print(_("error", "captcha"))
exit_status = 1 except Exception:
client.prevent_close() exit_status = 1
client.print("Fatal error encountered:\n") client.prevent_close()
client.print(traceback.format_exc()) client.print("Fatal error encountered:\n")
finally: client.print(traceback.format_exc())
signal.signal(signal.SIGINT, signal.SIG_DFL) finally:
signal.signal(signal.SIGTERM, signal.SIG_DFL) if sys.platform == "linux":
client.print(_("gui", "status", "exiting")) loop.remove_signal_handler(signal.SIGINT)
loop.run_until_complete(client.shutdown()) loop.remove_signal_handler(signal.SIGTERM)
if not client.gui.close_requested: client.print(_("gui", "status", "exiting"))
client.print(_("status", "terminated")) await client.shutdown()
client.gui.status.update(_("gui", "status", "terminated")) if not client.gui.close_requested:
loop.run_until_complete(client.gui.wait_until_closed()) client.print(_("status", "terminated"))
# save the application state client.gui.status.update(_("gui", "status", "terminated"))
# NOTE: we have to do it after wait_until_closed, await client.gui.wait_until_closed()
# because the user can alter some settings between app termination and closing the window # save the application state
client.save(force=True) # NOTE: we have to do it after wait_until_closed,
client.gui.stop() # because the user can alter some settings between app termination and closing the window
client.gui.close_window() client.save(force=True)
loop.run_until_complete(loop.shutdown_asyncgens()) client.gui.stop()
loop.close() client.gui.close_window()
sys.exit(exit_status) sys.exit(exit_status)
asyncio.run(main())