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

clone_state_indicator.py (3735B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\omega\upsell\components\clone_state_indicator.py
      2 import carbonui
      3 import carbonui.text.styles
      4 import datetimeutils
      5 import uthread2
      6 from carbonui import Align, TextColor
      7 from carbonui.primitives.layoutGrid import LayoutGrid
      8 from eve.client.script.ui import eveColor
      9 import omega.client.signal as omega_signals
     10 from eve.common.lib import appConst
     11 from localization import GetByLabel, formatters
     12 from localization.formatters import timeIntervalFormatters
     13 from omega.client.clone_grade_svc import get_clone_grade_svc
     14 
     15 class CloneStateIndicator(LayoutGrid):
     16     default_columns = 1
     17     default_cellSpacing = (0, 2)
     18 
     19     def __init__(self, **kw):
     20         super(CloneStateIndicator, self).__init__(**kw)
     21         self.state_label = carbonui.text.styles.TextBody(parent=self, align=Align.CENTERTOP)
     22         self.time_left_label = carbonui.text.styles.TextDetail(parent=self, align=Align.CENTERTOP, color=TextColor.SECONDARY)
     23         uthread2.start_tasklet(self.update)
     24         omega_signals.on_omega_license_expired.connect(self._on_subscription_changed)
     25         omega_signals.on_omega_license_changed.connect(self._on_subscription_changed)
     26         omega_signals.on_omega_license_acquired.connect(self._on_subscription_changed)
     27         omega_signals.on_omega_recurring_changed.connect(self._on_subscription_changed)
     28         omega_signals.on_cache_invalidated.connect(self._on_subscription_changed)
     29 
     30     def Close(self):
     31         try:
     32             omega_signals.on_omega_license_expired.disconnect(self._on_subscription_changed)
     33             omega_signals.on_omega_license_changed.disconnect(self._on_subscription_changed)
     34             omega_signals.on_omega_license_acquired.disconnect(self._on_subscription_changed)
     35             omega_signals.on_omega_recurring_changed.disconnect(self._on_subscription_changed)
     36             omega_signals.on_cache_invalidated.disconnect(self._on_subscription_changed)
     37         finally:
     38             super(CloneStateIndicator, self).Close()
     39 
     40     def _on_subscription_changed(self, *args):
     41         self.update()
     42 
     43     def update(self):
     44         svc = get_clone_grade_svc()
     45         is_omega = svc.is_omega_without_grace_period()
     46         if is_omega:
     47             current_state = 'UI/CloneState/Omega'
     48             color = eveColor.OMEGA_YELLOW
     49         else:
     50             current_state = 'UI/CloneState/Alpha'
     51             color = TextColor.HIGHLIGHT
     52         self.state_label.text = GetByLabel('UI/OmegaUpsell/CurrentCloneState', current_state=GetByLabel(current_state))
     53         self.state_label.color = color
     54         if is_omega:
     55             self.time_left_label.display = True
     56             self.time_left_label.text = self.get_expiry_date_text()
     57         else:
     58             self.time_left_label.display = False
     59 
     60     def get_expiry_date_text(self):
     61         svc = get_clone_grade_svc()
     62         if svc.is_omega_subscription_recurring():
     63             return GetByLabel('UI/OmegaUpsell/RecurringSubscription')
     64         else:
     65             omega_license = svc.get_omega_license_without_grace_period()
     66             expiry_date = datetimeutils.datetime_to_filetime(omega_license.expiry_date)
     67             expiry_date = formatters.dateTimeFormatters.FormatDateTime(expiry_date, timeFormat=None)
     68             return GetByLabel('UI/OmegaUpsell/ActiveUntil', expiry_date=expiry_date, color=eveColor.OMEGA_YELLOW_HEX)
     69 
     70     def get_time_left_formatted_text(self, duration):
     71         if duration > appConst.DAY:
     72             showTo = 'day'
     73         elif duration > appConst.HOUR:
     74             showTo = 'hour'
     75         else:
     76             showTo = 'minute'
     77         return timeIntervalFormatters.FormatTimeIntervalWritten(duration, showFrom='day', showTo=showTo)