rewards_page.py (5124B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\page\rewards\rewards_page.py 2 import logging 3 import threadutils 4 from achievement_system.client.api.error import GenericInternalServerError, ServiceUnavailableError, DefinitionNotFoundError 5 from achievement_system.client.api.repository import get_repository 6 from achievement_system.client.api.signal import on_achievement_milestone_reward_claimed 7 from achievement_system.client.ui.controller.reward import AchievementRewardController, CategoryRewardController 8 from achievement_system.client.ui.window.const import WindowState, TRANSITION_DURATION 9 from achievement_system.client.ui.window.page.rewards.entry import AchievementRewardEntry 10 from achievement_system.client.ui.window.page.rewards.info_container import InfoContainer 11 from achievement_system.client.ui.window.signal import on_window_state_changed 12 from carbonui import Align, uiconst, TextAlign 13 from carbonui.control.scrollContainer import ScrollContainer 14 from carbonui.primitives.container import Container 15 from carbonui.text.styles import TextHeader 16 from carbonui.uianimations import animations 17 from localization import GetByLabel 18 logger = logging.getLogger('ACHIEVEMENTS') 19 20 class RewardsPage(Container): 21 22 def __init__(self, *args, **kwargs): 23 super(RewardsPage, self).__init__(*args, **kwargs) 24 self.opacity = 0.0 25 self.construct_layout() 26 self.connect_signals() 27 28 def Close(self): 29 try: 30 self.disconnect_signals() 31 finally: 32 super(RewardsPage, self).Close() 33 34 def connect_signals(self): 35 on_window_state_changed.connect(self.on_window_state_changed) 36 on_achievement_milestone_reward_claimed.connect(self.on_achievement_milestone_reward_claimed_signal) 37 38 def disconnect_signals(self): 39 on_window_state_changed.disconnect(self.on_window_state_changed) 40 on_achievement_milestone_reward_claimed.connect(self.on_achievement_milestone_reward_claimed_signal) 41 42 def construct_layout(self): 43 content_container = Container(name='content_container', parent=self, padding=(8, 0, 8, 0)) 44 self.info_container = InfoContainer(name='info_container', parent=content_container, align=Align.TOTOP, text=GetByLabel('UI/Achievements/Window/Rewards/ClaimedTitlesInfo'), height=32) 45 self.scroll_container = ScrollContainer(name='scroll_container', parent=content_container, padTop=16) 46 47 @threadutils.highlander_threaded 48 def update(self): 49 self.scroll_container.Flush() 50 achievement_rewards, category_rewards = self.unclaimed_rewards 51 if len(achievement_rewards) == 0 and len(category_rewards) == 0: 52 TextHeader(name='no_rewards_label', parent=self.scroll_container, align=Align.TOTOP, textAlign=TextAlign.CENTER, text=GetByLabel('UI/Achievements/Window/Rewards/NoRewardsAvailable'), padTop=32) 53 return 54 self.add_rewards(achievement_rewards, AchievementRewardController) 55 self.add_rewards(category_rewards, CategoryRewardController) 56 57 def add_rewards(self, rewards, controller_class): 58 if len(rewards) == 0: 59 return 60 for identifier, unclaimed_rewards in rewards.items(): 61 for milestone_id, unclaimed_reward_ids in unclaimed_rewards.unclaimed_rewards_per_milestone.items(): 62 try: 63 controller = controller_class(identifier=identifier, milestone_id=milestone_id, rewards=unclaimed_reward_ids) 64 AchievementRewardEntry(parent=self.scroll_container, align=Align.TOTOP, controller=controller, on_claim=self.on_claim) 65 except DefinitionNotFoundError: 66 continue 67 68 @property 69 def unclaimed_rewards(self): 70 try: 71 return get_repository().get_all_unclaimed_rewards() 72 except ServiceUnavailableError or GenericInternalServerError: 73 return {} 74 75 def on_window_state_changed(self, window_state): 76 if window_state == WindowState.REWARDS: 77 self.update() 78 self.state = uiconst.UI_PICKCHILDREN 79 animations.FadeIn(self, duration=TRANSITION_DURATION) 80 else: 81 self.state = uiconst.UI_DISABLED 82 animations.FadeOut(self, duration=TRANSITION_DURATION) 83 84 def on_claim(self, entry): 85 if isinstance(entry.controller, AchievementRewardController): 86 logger.info('claiming AchievementRewardController') 87 get_repository().claim_rewards_for_achievement(achievement_id=entry.controller.identifier, milestone_id=entry.controller.milestone_id) 88 elif isinstance(entry.controller, CategoryRewardController): 89 logger.info('claiming CategoryRewardController') 90 get_repository().claim_rewards_for_category(category_id=entry.controller.identifier, milestone_id=entry.controller.milestone_id) 91 92 def on_achievement_milestone_reward_claimed_signal(self, achievement_id, milestone_id): 93 logger.info('on_achievement_milestone_reward_claimed_signal, %s|%s' % (achievement_id, milestone_id)) 94 self.update()