Display campaign's game, clear progress when idle

This commit is contained in:
DevilXD committed 2022-11-30 10:47:56 +01:00
1 parent e4088699c5
commit 36597d9a4a
2 files changed
+69 -24

No files matched your search

+67 -22
View File
@@ -494,6 +494,7 @@ class _BaseVars(TypedDict):
class _CampaignVars(_BaseVars):
name: StringVar
game: StringVar
class _DropVars(_BaseVars):
@@ -512,15 +513,16 @@ class CampaignProgress:
self._manager = manager
self._vars: _ProgressVars = {
"campaign": {
"name": StringVar(master, "..."), # campaign name
"name": StringVar(master), # campaign name
"game": StringVar(master), # game name
"progress": DoubleVar(master), # controls the progress bar
"percentage": StringVar(master, "-%"), # percentage display string
"percentage": StringVar(master), # percentage display string
"remaining": StringVar(master), # time remaining string, filled via _update_time
},
"drop": {
"rewards": StringVar(master, "..."), # drop rewards
"rewards": StringVar(master), # drop rewards
"progress": DoubleVar(master), # as above
"percentage": StringVar(master, "-%"), # as above
"percentage": StringVar(master), # as above
"remaining": StringVar(master), # as above
},
}
@@ -530,10 +532,22 @@ class CampaignProgress:
frame.grid(column=0, row=2, columnspan=2, sticky="nsew", padx=2)
frame.columnconfigure(0, weight=2)
frame.columnconfigure(1, weight=1)
ttk.Label(frame, text=_("gui", "progress", "campaign")).grid(column=0, row=0, columnspan=2)
game_campaign = ttk.Frame(frame)
game_campaign.grid(column=0, row=0, columnspan=2, sticky="nsew")
game_campaign.columnconfigure(0, weight=1)
game_campaign.columnconfigure(1, weight=1)
ttk.Label(
frame, textvariable=self._vars["campaign"]["name"]
).grid(column=0, row=1, columnspan=2)
game_campaign, text="Game:"
).grid(column=0, row=0)
ttk.Label(
game_campaign, textvariable=self._vars["campaign"]["game"]
).grid(column=0, row=1)
ttk.Label(
game_campaign, text=_("gui", "progress", "campaign")
).grid(column=1, row=0)
ttk.Label(
game_campaign, textvariable=self._vars["campaign"]["name"]
).grid(column=1, row=1)
ttk.Label(
frame, text=_("gui", "progress", "campaign_progress")
).grid(column=0, row=2, rowspan=2)
@@ -567,7 +581,7 @@ class CampaignProgress:
).grid(column=0, row=10, columnspan=2)
self._drop: TimedDrop | None = None
self._timer_task: asyncio.Task[None] | None = None
self._update_time(0)
self.display(None)
@staticmethod
def _divmod(minutes: int, seconds: int) -> tuple[int, int]:
@@ -620,22 +634,32 @@ class CampaignProgress:
self._timer_task.cancel()
self._timer_task = None
def display(self, drop: TimedDrop, *, countdown: bool = True, subone: bool = False):
def display(self, drop: TimedDrop | None, *, countdown: bool = True, subone: bool = False):
self._drop = drop
# drop update
vars_drop = self._vars["drop"]
vars_campaign = self._vars["campaign"]
self.stop_timer()
if drop is None:
# clear the drop display
vars_drop["rewards"].set("...")
vars_drop["progress"].set(0.0)
vars_drop["percentage"].set("-%")
vars_campaign["name"].set("...")
vars_campaign["game"].set("...")
vars_campaign["progress"].set(0.0)
vars_campaign["percentage"].set("-%")
self._update_time(0)
return
vars_drop["rewards"].set(drop.rewards_text())
vars_drop["progress"].set(drop.progress)
vars_drop["percentage"].set(f"{drop.progress:6.1%}")
# campaign update
campaign = drop.campaign
vars_campaign = self._vars["campaign"]
vars_campaign["name"].set(campaign.name)
vars_campaign["game"].set(campaign.game.name)
vars_campaign["progress"].set(campaign.progress)
vars_campaign["percentage"].set(
f"{campaign.progress:6.1%} ({campaign.claimed_drops}/{campaign.total_drops})"
)
self.stop_timer()
if countdown:
# restart our seconds update timer
self.start_timer()
@@ -1008,7 +1032,7 @@ class TrayIcon:
return asyncio.create_task(notifier())
return None
def update_title(self, drop: TimedDrop):
def update_title(self, drop: TimedDrop | None):
if self.icon is not None:
self.icon.title = self.get_title(drop)
@@ -1929,6 +1953,10 @@ class GUIManager:
# inventory overview is updated from within drops themselves via change events
self.tray.update_title(drop) # tray
def clear_drop(self):
self.progress.display(None)
self.tray.update_title(None)
def print(self, *args, **kwargs):
# print to our custom output
self.output.print(*args, **kwargs)
@@ -1965,7 +1993,7 @@ if __name__ == "__main__":
drops: bool,
viewers: int,
points: int,
priority: bool,
acl_based: bool,
):
# status: 0 -> OFFLINE, 1 -> PENDING_ONLINE, 2 -> ONLINE
if status == 1:
@@ -1987,11 +2015,12 @@ if __name__ == "__main__":
game=game_obj,
drops_enabled=drops,
viewers=viewers,
priority=priority,
acl_based=acl_based,
)
def create_drop(
campaign_name: str,
game_name: str,
rewards: list[str],
claimed_drops: int,
total_drops: int,
@@ -2013,6 +2042,7 @@ if __name__ == "__main__":
campaign=HashNamespace(
name=campaign_name,
id="campaign",
game=create_game(0, game_name),
expired=False,
active=False,
upcoming=True,
@@ -2080,12 +2110,18 @@ if __name__ == "__main__":
# Channel list
gui.channels.display(
create_channel(
name="Thomus", status=0, game=None, drops=False, viewers=0, points=0, priority=True
name="Thomus",
status=0,
game=None,
drops=False,
viewers=0,
points=0,
acl_based=True,
),
add=True,
)
channel = create_channel(
name="Traitus", status=1, game=None, drops=False, viewers=0, points=0, priority=True
name="Traitus", status=1, game=None, drops=False, viewers=0, points=0, acl_based=True
)
gui.channels.display(channel, add=True,)
gui.channels.set_watching(channel)
@@ -2097,7 +2133,7 @@ if __name__ == "__main__":
drops=True,
viewers=42,
points=1234567,
priority=False,
acl_based=False,
),
add=True,
)
@@ -2109,7 +2145,7 @@ if __name__ == "__main__":
drops=True,
viewers=69,
points=1234567,
priority=False,
acl_based=False,
),
add=True,
)
@@ -2117,12 +2153,21 @@ if __name__ == "__main__":
gui.channels.get_selection()
# Tray
# gui.tray.minimize()
await asyncio.sleep(1)
await asyncio.sleep(2)
gui.tray.notify("Bounty Coins (3/7)", "Mined Drop")
# Inventory overview
drop = create_drop("Wardrobe Cleaning", ["Fancy Pants"], 2, 7, 239, 240)
drop = create_drop(
"Wardrobe Cleaning", "Cleaning Masters", ["Fancy Pants"], 2, 7, 239, 240
)
await gui.inv.add_campaign(drop.campaign)
# Drop progress
gui.display_drop(drop, countdown=False)
await asyncio.sleep(3)
gui.progress.start_timer()
await asyncio.sleep(5)
gui.clear_drop()
await asyncio.sleep(5)
gui.display_drop(drop)
await asyncio.sleep(63)