campaign_controller.py (5199B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\ui_controllers\campaign_controller.py 2 import datetime 3 import gametime 4 import logging 5 from achievement_system.client.ui.util import get_achievements_targeting_campaign 6 from campaigns.client.v1.data_model.campaign import CampaignState 7 from campaigns.client.ui_controllers.campaign_controller_text import CampaignControllerText 8 from campaigns.client.ui_controllers.campaign_controller_texture import CampaignControllerTextures 9 from carbon.common.script.util.format import FmtDate 10 from datetimeutils import datetime_to_filetime 11 from eve.client.script.ui.shared.theatersOfWar.campaigns.theme_packs.theme_packs_util import get_theme_pack_for_campaign 12 from localization import GetByMessageID, GetByLabel 13 logger = logging.getLogger(__name__) 14 15 class CampaignController(object): 16 17 def __init__(self, campaign, repository): 18 self._campaign = campaign 19 self._repository = repository 20 self._theme_pack = None 21 self._texts = None 22 self._textures = None 23 24 @property 25 def campaign(self): 26 return self._campaign 27 28 @property 29 def campaign_id(self): 30 return self._campaign.id 31 32 @property 33 def text(self): 34 if self._texts is None: 35 self._texts = CampaignControllerText(self._campaign) 36 return self._texts 37 38 @property 39 def textures(self): 40 if self._textures is None: 41 self._textures = CampaignControllerTextures(self._campaign) 42 return self._textures 43 44 @property 45 def title_text(self): 46 return GetByMessageID(self._campaign.title) 47 48 @property 49 def subtitle_text(self): 50 return GetByMessageID(self._campaign.subtitle) 51 52 @property 53 def annotations(self): 54 return self._campaign.annotations 55 56 @property 57 def issuer(self): 58 return self.campaign.issuer 59 60 @property 61 def issuer_name(self): 62 return cfg.eveowners.Get(self.issuer).name 63 64 @property 65 def target_progress(self): 66 return self._campaign.target_progress 67 68 @property 69 def theme_pack(self): 70 if self._theme_pack is None: 71 annotations = self.annotations 72 theme_pack_id = annotations.get('theme_pack', None) 73 self._theme_pack = get_theme_pack_for_campaign(theme_pack_id) 74 return self._theme_pack 75 76 @property 77 def expiry_datetime(self): 78 return self._campaign.scheduled_expiry_datetime 79 80 @property 81 def is_expired(self): 82 now = datetime.datetime.now() 83 return now > self._campaign.scheduled_expiry_datetime 84 85 @property 86 def is_completed(self): 87 current_progress = self.current_progress or 0 88 return current_progress >= self.target_progress 89 90 @property 91 def is_finished(self): 92 return self._campaign.is_finished 93 94 @property 95 def is_cancelled(self): 96 return self._campaign.campaign_state == CampaignState.CANCELLED 97 98 @property 99 def num_days_left(self): 100 now = datetime.datetime.now() 101 daysLeft = self.expiry_datetime - now 102 return max(0, daysLeft.days) 103 104 @property 105 def time_left_text(self): 106 now = gametime.GetWallclockTime() 107 expiry_timestamp = datetime_to_filetime(self.expiry_datetime) 108 time_left = max(0, expiry_timestamp - now) 109 return FmtDate(time_left, 'ss') 110 111 @property 112 def time_remaining_text(self): 113 days_left = self.num_days_left 114 return GetByLabel('UI/Campaigns/DaysRemaining', numDays=days_left) 115 116 def get_duration_text(self): 117 start_date = datetime_to_filetime(self._campaign.scheduled_start_datetime) 118 expiry_date = datetime_to_filetime(self.expiry_datetime) 119 return '%s - %s' % (FmtDate(start_date, 'sn'), FmtDate(expiry_date, 'sn')) 120 121 @property 122 def campaign_set_name(self): 123 annotations = self.annotations 124 return annotations.get('campaign_set', None) 125 126 @property 127 def ui_idx(self): 128 annotations = self.annotations 129 ui_idx = annotations.get('ui_idx', None) 130 if ui_idx: 131 return int(ui_idx) 132 133 @property 134 def font_family(self): 135 return self.theme_pack.font_family 136 137 @property 138 def map_focus_entity_id(self): 139 annotations = self.annotations 140 if annotations: 141 focus_id = annotations.get('map_focus_entity_id', None) 142 if focus_id: 143 return int(focus_id) 144 145 @property 146 def definition_name(self): 147 return self._campaign.definition_name 148 149 @property 150 def achievement(self): 151 achievements = get_achievements_targeting_campaign(self._campaign.definition_name) 152 if achievements: 153 return achievements[0] 154 155 @property 156 def current_progress(self): 157 return self._campaign_stats.current_campaign_progress 158 159 @property 160 def total_contributors(self): 161 return self._campaign_stats.total_contributors 162 163 @property 164 def _campaign_stats(self): 165 return self._repository.get_campaign_stats(self.campaign_id)[0] 166 167 def clear_campaign_stats_cache(self): 168 return self._repository.clear_campaign_stats_cache(self.campaign_id)