NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)