mirror of
https://github.com/rangermix/TwitchDropsMiner.git
synced 2026-05-30 00:49:36 +00:00
Implement handling for drops with more than one benefit
This commit is contained in:
11
gui.py
11
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
|
||||
|
||||
18
inventory.py
18
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()
|
||||
|
||||
Reference in New Issue
Block a user