sequencingTime.py (5518B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\cosmetics\ship\controls\sequencingTime.py 2 from carbonui.uiconst import PickState 3 from carbonui.primitives.layoutGrid import LayoutGrid 4 import eveicon 5 import gametime 6 import uthread2 7 from carbonui import Align, TextColor, uiconst 8 from carbonui.text.styles import TextHeader, TextBody 9 from carbonui.primitives.container import Container 10 from carbonui.primitives.containerAutoSize import ContainerAutoSize 11 from carbonui.primitives.fill import Fill 12 from carbonui.primitives.sprite import Sprite 13 from cosmetics.client.ships.skins.live_data import current_skin_design, current_skin_design_signals 14 from cosmetics.client.shipSkinSequencingSvc import get_ship_skin_sequencing_svc 15 import cosmetics.client.ships.ship_skin_signals as ship_skin_signals 16 from eve.client.script.ui import eveColor 17 from player_messaging.client.ui_message import message_player 18 from eve.client.script.ui.cosmetics.ship.pages.sequence.tooltipInfoIcons import SequencingTimeSkillsInfoIcon 19 from localization import GetByLabel, formatters 20 from publicGateway.grpc.exceptions import GenericException 21 from stackless_response_router.exceptions import TimeoutException 22 23 class SequencingTime(Container): 24 default_height = 32 25 26 def __init__(self, *args, **kwargs): 27 super(SequencingTime, self).__init__(*args, **kwargs) 28 self._update_thread = None 29 self.construct_layout() 30 self.connect_signals() 31 self.update() 32 33 def Close(self): 34 try: 35 self.kill_update_thread() 36 self.disconnect_signals() 37 finally: 38 super(SequencingTime, self).Close() 39 40 def kill_update_thread(self): 41 if self._update_thread: 42 self._update_thread.kill() 43 self._update_thread = None 44 45 def connect_signals(self): 46 current_skin_design_signals.on_design_reset.connect(self.on_design_reset) 47 current_skin_design_signals.on_existing_design_loaded.connect(self.on_existing_design_loaded) 48 current_skin_design_signals.on_ship_type_id_changed.connect(self.on_ship_type_id_changed) 49 current_skin_design_signals.on_slot_fitting_changed.connect(self.on_slot_fitting_changed) 50 ship_skin_signals.on_skin_sequencing_cache_invalidated.connect(self._on_skin_sequencing_cache_invalidated) 51 52 def disconnect_signals(self): 53 current_skin_design_signals.on_design_reset.disconnect(self.on_design_reset) 54 current_skin_design_signals.on_existing_design_loaded.disconnect(self.on_existing_design_loaded) 55 current_skin_design_signals.on_ship_type_id_changed.disconnect(self.on_ship_type_id_changed) 56 current_skin_design_signals.on_slot_fitting_changed.disconnect(self.on_slot_fitting_changed) 57 ship_skin_signals.on_skin_sequencing_cache_invalidated.disconnect(self._on_skin_sequencing_cache_invalidated) 58 59 def construct_layout(self): 60 self.Flush() 61 left_container = Container(name='left_container', parent=self, align=Align.TOLEFT, pickState=PickState.ON, hint=GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/TimeToSequence'), width=40) 62 Fill(bgParent=left_container, color=eveColor.WHITE, opacity=0.1) 63 Sprite(name='icon', parent=left_container, align=Align.CENTER, texturePath=eveicon.hourglass, color=TextColor.NORMAL, pickState=PickState.OFF, pos=(0, 0, 16, 16)) 64 self.right_container = Container(name='right_container', parent=self, align=Align.TOALL, padLeft=4) 65 self.layout_grid = LayoutGrid(parent=self.right_container, align=Align.TORIGHT, cellSpacing=(4, 0)) 66 self.layout_grid.columns = 3 67 self.construct_info_icon() 68 self.construct_time_label() 69 self.construct_discount_label() 70 71 def construct_info_icon(self): 72 SequencingTimeSkillsInfoIcon(name='info_icon', parent=self.layout_grid, align=Align.CENTER) 73 74 def construct_time_label(self): 75 self.time_label = TextHeader(name='time_label', parent=self.layout_grid, color=TextColor.HIGHLIGHT, align=Align.CENTER, padLeft=8) 76 77 def construct_discount_label(self): 78 self.discount_label = TextBody(parent=self.layout_grid, align=Align.CENTERLEFT, color=eveColor.SUCCESS_GREEN) 79 80 def update(self): 81 self.kill_update_thread() 82 self._update_thread = uthread2.start_tasklet(self._update_async) 83 84 def _update_async(self): 85 try: 86 duration, discount = get_ship_skin_sequencing_svc().get_predicted_job_duration(current_skin_design.get()) 87 duration = duration * gametime.SEC 88 except (GenericException, TimeoutException): 89 message_player(GetByLabel('UI/Common/CannotConnectToServer')) 90 duration = 0 91 discount = 0 92 93 self.construct_layout() 94 show_to = 'minute' if duration < gametime.DAY else 'hour' 95 self.time_label.text = formatters.FormatTimeIntervalShortWritten(duration, showTo=show_to) 96 if discount: 97 self.discount_label.text = GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/CostWithDiscount', discount_percentage=discount) 98 else: 99 self.discount_label.text = '' 100 101 def on_design_reset(self, *args): 102 self.update() 103 104 def on_existing_design_loaded(self, *args): 105 self.update() 106 107 def on_ship_type_id_changed(self, *args): 108 self.update() 109 110 def on_slot_fitting_changed(self, *args): 111 self.update() 112 113 def _on_skin_sequencing_cache_invalidated(self, *args): 114 self.update()