From 3c8274b16699e6722a72229edfc18da736e72cc2 Mon Sep 17 00:00:00 2001 From: DevilXD Date: Mon, 16 May 2022 22:42:32 +0200 Subject: [PATCH] Implement handling for drops with more than one benefit --- gui.py | 11 +++++++---- inventory.py | 18 ++++++++++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/gui.py b/gui.py index bcc21c8..f10b1c4 100644 --- a/gui.py +++ b/gui.py @@ -975,10 +975,13 @@ class InventoryOverview: for i, drop in enumerate(campaign.drops): drop_frame = ttk.Frame(drops_row, relief="ridge", borderwidth=1, padding=5) drop_frame.grid(column=i, row=0, padx=4) - drop_image = await self._cache.get(drop.image_url, (80, 80)) - ttk.Label( - drop_frame, text=drop.rewards_text(), image=drop_image, compound="bottom" - ).grid(column=0, row=0) + benefits_frame = ttk.Frame(drop_frame) + benefits_frame.grid(column=0, row=0) + for i, benefit in enumerate(drop.benefits): + benefit_image = await self._cache.get(benefit.image_url, (80, 80)) + ttk.Label( + benefits_frame, text=benefit.name, image=benefit_image, compound="bottom" + ).grid(column=i, row=0, padx=5) progress_text, progress_color = self.get_progress(drop) self._drops[drop.id] = label = ttk.Label( drop_frame, text=progress_text, foreground=progress_color diff --git a/inventory.py b/inventory.py index 49d82c3..880f2aa 100644 --- a/inventory.py +++ b/inventory.py @@ -24,6 +24,14 @@ def remove_dimensions(url: URLType) -> URLType: return URLType(DIMS_PATTERN.sub('', url)) +class Benefit: + def __init__(self, data: JsonType): + benefit_data: JsonType = data["benefit"] + self.id: str = benefit_data["id"] + self.name: str = benefit_data["name"] + self.image_url: URLType = benefit_data["imageAssetURL"] + + class BaseDrop: def __init__( self, campaign: DropsCampaign, data: JsonType, claimed_benefits: dict[str, datetime] @@ -32,9 +40,7 @@ class BaseDrop: self.id: str = data["id"] self.name: str = data["name"] self.campaign: DropsCampaign = campaign - self.rewards: list[str] = [b["benefit"]["name"] for b in data["benefitEdges"]] - # we use the first benefit's image specifically here - self.image_url: URLType = data["benefitEdges"][0]["benefit"]["imageAssetURL"] + self.benefits: list[Benefit] = [Benefit(b) for b in data["benefitEdges"]] self.starts_at: datetime = timestamp(data["startAt"]) self.ends_at: datetime = timestamp(data["endAt"]) self.claim_id: str | None = None @@ -52,8 +58,8 @@ class BaseDrop: ( dts := [ claimed_benefits[bid] - for b in data["benefitEdges"] - if (bid := b["benefit"]["id"]) in claimed_benefits + for benefit in self.benefits + if (bid := benefit.id) in claimed_benefits ] ) and all(self.starts_at <= dt < self.ends_at for dt in dts) @@ -97,7 +103,7 @@ class BaseDrop: self.claim_id = claim_id def rewards_text(self, delim: str = ", ") -> str: - return delim.join(self.rewards) + return delim.join(benefit.name for benefit in self.benefits) async def claim(self) -> bool: result = await self._claim()