From aebd0e657084d557e0867edd3552b2620bbcac6b Mon Sep 17 00:00:00 2001 From: DevilXD Date: Sat, 20 Aug 2022 22:08:02 +0200 Subject: [PATCH 1/7] Add ExitRequest raise while waiting for a server response --- twitch.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/twitch.py b/twitch.py index b6dc6fc..15c1516 100644 --- a/twitch.py +++ b/twitch.py @@ -870,7 +870,17 @@ class Twitch: logger.debug(f"Request: ({method=}, {url=}, {kwargs=})") for delay in ExponentialBackoff(shift=1, maximum=3*60): try: - async with session.request(method, url, **kwargs) as response: + response = None + done, pending = await asyncio.wait( + [session.request(method, url, **kwargs), self.gui.wait_until_closed()], + return_when=asyncio.FIRST_COMPLETED, + ) + if self.gui.close_requested: + raise ExitRequest() + for task in done: + response = task.result() + break + if response is not None: logger.debug(f"Response: {response.status}: {response}") if response.status < 500: yield response @@ -880,6 +890,9 @@ class Twitch: # just so that quick 2nd retries that often happen, aren't shown if delay > 1: self.print(_("error", "no_connection").format(seconds=round(delay))) + finally: + if response is not None: + response.release() await asyncio.sleep(delay) async def gql_request(self, op: GQLOperation) -> JsonType: From e0dc37182468333a2514b65cd177fccf07e58480 Mon Sep 17 00:00:00 2001 From: DevilXD Date: Sat, 20 Aug 2022 22:14:38 +0200 Subject: [PATCH 2/7] Rename a translation key --- lang/简体中文.json | 2 +- translate.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lang/简体中文.json b/lang/简体中文.json index 5697cc3..6051ecf 100644 --- a/lang/简体中文.json +++ b/lang/简体中文.json @@ -112,7 +112,7 @@ "upcoming": "即将上线 \u23f3", "expired": "已结束 \u274c", "claimed": "声明 \u2714", - "ready": "准备掉宝 \u23f3" + "ready_to_claim": "准备掉宝 \u23f3" }, "starts": "开始时间: {time}", "ends": "结束时间: {time}", diff --git a/translate.py b/translate.py index 3a67068..b8859ff 100644 --- a/translate.py +++ b/translate.py @@ -133,7 +133,7 @@ class GUIInvStatus(TypedDict): expired: str upcoming: str claimed: str - ready: str + ready_to_claim: str class GUIInventory(TypedDict): @@ -318,7 +318,7 @@ default_translation: Translation = { "upcoming": "Upcoming ⏳", "expired": "Expired ❌", "claimed": "Claimed ✔", - "ready": "Ready to claim ⏳", + "ready_to_claim": "Ready to claim ⏳", }, "starts": "Starts: {time}", "ends": "Ends: {time}", From 31f25c9a6df8acce4ec6ad6632baccfc18860df1 Mon Sep 17 00:00:00 2001 From: DevilXD Date: Sat, 20 Aug 2022 23:04:25 +0200 Subject: [PATCH 3/7] Show progress for drops with non-zero current minutes --- gui.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/gui.py b/gui.py index 15db42b..77a818a 100644 --- a/gui.py +++ b/gui.py @@ -1213,21 +1213,23 @@ class InventoryOverview: self._campaigns.clear() def get_progress(self, drop: TimedDrop) -> tuple[str, tk._Color]: + progress_text: str progress_color: tk._Color = '' - progress_text: str = _("gui", "inventory", "minutes_progress").format( - minutes=drop.required_minutes - ) if drop.is_claimed: progress_color = "green" progress_text = _("gui", "inventory", "status", "claimed") elif drop.can_claim: progress_color = "goldenrod" - progress_text = _("gui", "inventory", "status", "ready") - elif drop.can_earn(): + progress_text = _("gui", "inventory", "status", "ready_to_claim") + elif drop.current_minutes or drop.can_earn(): progress_text = _("gui", "inventory", "percent_progress").format( percent=f"{drop.progress:3.1%}", minutes=drop.required_minutes, ) + else: + progress_text = _("gui", "inventory", "minutes_progress").format( + minutes=drop.required_minutes + ) return (progress_text, progress_color) def update_drop(self, drop: TimedDrop) -> None: From 512593e54ba4da9876cfc4ff5c539e443251e342 Mon Sep 17 00:00:00 2001 From: DevilXD Date: Sun, 21 Aug 2022 11:44:31 +0200 Subject: [PATCH 4/7] Ignore log.txt --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 436d5ae..535b0d7 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ __pycache__ # Dev files /env /cache +log.txt cookies.jar settings.json /lang/English.json From d8d63975718ff09ecfbffd49185aa599e5ddfe62 Mon Sep 17 00:00:00 2001 From: DevilXD Date: Sun, 21 Aug 2022 11:46:40 +0200 Subject: [PATCH 5/7] Revert "Add ExitRequest raise while waiting for a server response" --- twitch.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/twitch.py b/twitch.py index 15c1516..b6dc6fc 100644 --- a/twitch.py +++ b/twitch.py @@ -870,17 +870,7 @@ class Twitch: logger.debug(f"Request: ({method=}, {url=}, {kwargs=})") for delay in ExponentialBackoff(shift=1, maximum=3*60): try: - response = None - done, pending = await asyncio.wait( - [session.request(method, url, **kwargs), self.gui.wait_until_closed()], - return_when=asyncio.FIRST_COMPLETED, - ) - if self.gui.close_requested: - raise ExitRequest() - for task in done: - response = task.result() - break - if response is not None: + async with session.request(method, url, **kwargs) as response: logger.debug(f"Response: {response.status}: {response}") if response.status < 500: yield response @@ -890,9 +880,6 @@ class Twitch: # just so that quick 2nd retries that often happen, aren't shown if delay > 1: self.print(_("error", "no_connection").format(seconds=round(delay))) - finally: - if response is not None: - response.release() await asyncio.sleep(delay) async def gql_request(self, op: GQLOperation) -> JsonType: From 75b87110f4c0d15400405a4f98de5c5e0fd11f1a Mon Sep 17 00:00:00 2001 From: DevilXD Date: Sun, 21 Aug 2022 11:49:27 +0200 Subject: [PATCH 6/7] Use a different ExitRequest approach for now --- twitch.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/twitch.py b/twitch.py index b6dc6fc..fd22c26 100644 --- a/twitch.py +++ b/twitch.py @@ -869,6 +869,8 @@ class Twitch: kwargs["proxy"] = self.settings.proxy logger.debug(f"Request: ({method=}, {url=}, {kwargs=})") for delay in ExponentialBackoff(shift=1, maximum=3*60): + if self.gui.close_requested: + raise ExitRequest() try: async with session.request(method, url, **kwargs) as response: logger.debug(f"Response: {response.status}: {response}") From 69595a93272b9279bf989a3d18358f1340295ed0 Mon Sep 17 00:00:00 2001 From: DevilXD Date: Sun, 21 Aug 2022 16:33:45 +0200 Subject: [PATCH 7/7] Add a second ExitRequest check, move the first one around --- twitch.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/twitch.py b/twitch.py index fd22c26..640131b 100644 --- a/twitch.py +++ b/twitch.py @@ -869,8 +869,6 @@ class Twitch: kwargs["proxy"] = self.settings.proxy logger.debug(f"Request: ({method=}, {url=}, {kwargs=})") for delay in ExponentialBackoff(shift=1, maximum=3*60): - if self.gui.close_requested: - raise ExitRequest() try: async with session.request(method, url, **kwargs) as response: logger.debug(f"Response: {response.status}: {response}") @@ -882,7 +880,11 @@ class Twitch: # just so that quick 2nd retries that often happen, aren't shown if delay > 1: self.print(_("error", "no_connection").format(seconds=round(delay))) + if self.gui.close_requested: + raise ExitRequest() await asyncio.sleep(delay) + if self.gui.close_requested: + raise ExitRequest() async def gql_request(self, op: GQLOperation) -> JsonType: gql_logger.debug(f"GQL Request: {op}")