structureEntryController.py (8915B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\structure\structureBrowser\controllers\structureEntryController.py 2 from evePathfinder.core import IsUnreachableJumpCount 3 import eveformat.client 4 from eve.client.script.ui.structure.structureBrowser.controllers.reinforceTimersBundle import ReinforcementBundle 5 from carbon.common.script.util.linkUtil import GetShowInfoLink 6 from carbonui.util.sortUtil import SortListOfTuples 7 from eve.client.script.ui.station import stationServiceConst 8 import evetypes 9 from localization import GetByLabel 10 from signals import Signal 11 import structures 12 from utillib import KeyVal 13 14 class StructureEntryController(object): 15 16 def __init__(self, structureInfo): 17 self.structureInfo = KeyVal(structureInfo) 18 self.structureInfo.reinforceTimers = ReinforcementBundle(reinforceWeekday=structureInfo.get('reinforce_weekday'), reinforceHour=structureInfo.get('reinforce_hour'), nextReinforceWeekday=structureInfo.get('next_reinforce_weekday'), nextReinforceHour=structureInfo.get('next_reinforce_hour'), nextReinforceApply=structureInfo.get('next_reinforce_apply')) 19 self.systemAndStructureName = None 20 self.requiredHours = None 21 self.filterText = None 22 self.on_structure_state_changed = Signal(signalName='on_structure_state_changed') 23 24 def GetNumJumps(self): 25 jumps = sm.GetService('clientPathfinderService').GetJumpCountFromCurrent(self.GetSolarSystemID()) 26 return jumps 27 28 def GetNumJumpsText(self): 29 jumps = self.GetNumJumps() 30 if IsUnreachableJumpCount(jumps): 31 return '-' 32 else: 33 return jumps 34 35 def GetSecurity(self): 36 return sm.GetService('map').GetSecurityStatus(self.GetSolarSystemID()) 37 38 def GetSolarSystemID(self): 39 return self.structureInfo.solarSystemID 40 41 def GetSecurityWithColor(self): 42 return eveformat.solar_system_security_status(self.GetSolarSystemID()) 43 44 def GetName(self): 45 if self.systemAndStructureName: 46 return self.systemAndStructureName 47 locationName = cfg.evelocations.Get(self.GetSolarSystemID()).name 48 structureName = cfg.evelocations.Get(self.GetItemID()).name 49 solarsystemName = cfg.evelocations.Get(self.GetSolarSystemID()).name 50 categoryID = evetypes.GetCategoryID(self.GetTypeID()) 51 if categoryID == const.categoryStation: 52 stationInfo = cfg.stations.GetIfExists(self.GetItemID()) 53 if stationInfo: 54 locationName = cfg.evelocations.Get(stationInfo.orbitID).name 55 structureName = structureName.replace(locationName, '') 56 structureName = structureName.replace(' - ', '', 1) 57 elif categoryID == const.categoryStructure: 58 if structureName.startswith(solarsystemName): 59 structureName = structureName.replace('%s - ' % solarsystemName, '') 60 if not structureName: 61 structureName = evetypes.GetName(self.GetTypeID()) 62 solarsystemLink = GetShowInfoLink(const.typeSolarSystem, solarsystemName, self.GetSolarSystemID()) 63 locationName = locationName.replace(solarsystemName, solarsystemLink) 64 systemAndStructureName = '<br>'.join([locationName, structureName]) 65 self.systemAndStructureName = systemAndStructureName 66 return self.systemAndStructureName 67 68 def GetFilterText(self): 69 if self.filterText is not None: 70 return self.filterText 71 regionID = self.GetRegionID() 72 regionText = cfg.evelocations.Get(regionID).name if regionID else '' 73 textList = [self.GetCleanName(), 74 self.GetOwnerName(), 75 self.GetSystemName(), 76 evetypes.GetName(self.GetTypeID()), 77 regionText] 78 text = ' '.join(textList) 79 text = text.lower() 80 self.filterText = text 81 return text 82 83 def GetCleanName(self): 84 return cfg.evelocations.Get(self.GetItemID()).name 85 86 def GetSystemName(self): 87 return cfg.evelocations.Get(self.GetSolarSystemID()).name 88 89 def GetOwnerID(self): 90 return self.structureInfo.ownerID 91 92 def GetOwnerName(self): 93 return cfg.eveowners.Get(self.GetOwnerID()).name 94 95 def GetTypeID(self): 96 return self.structureInfo.typeID 97 98 def GetItemID(self): 99 return self.structureInfo.structureID 100 101 def GetProfileID(self): 102 return self.structureInfo.profileID 103 104 def GetRegionID(self): 105 regionID = sm.GetService('map').GetRegionForSolarSystem(self.GetSolarSystemID()) 106 return regionID 107 108 def GetServices(self): 109 return GetStuctureServices(self.GetSolarSystemID(), self.structureInfo.services, ownerID=self.GetOwnerID()) 110 111 def GetServicesAndOnlineStatus(self): 112 return GetStuctureServicesAndOnlineStatus(self.GetSolarSystemID(), self.structureInfo.services, ownerID=self.GetOwnerID()) 113 114 def HasService(self, serviceID): 115 if self.IsServiceAlwaysAvailable(serviceID): 116 return True 117 for eachService in self.GetServices(): 118 if eachService.name == serviceID: 119 return True 120 121 return False 122 123 def IsServiceAlwaysAvailable(self, serviceID): 124 serviceData = stationServiceConst.serviceDataByNameID.get(serviceID, None) 125 if serviceData and serviceData.serviceID == stationServiceConst.serviceIDAlwaysPresent: 126 return True 127 return False 128 129 def GetStateLabel(self): 130 return GetByLabel(structures.STATE_LABELS.get(self.GetState(), '.unknown)')) 131 132 def GetInfoForExtraColumns(self, serviceID): 133 if serviceID in self.structureInfo.services: 134 info = self.structureInfo.services.get(serviceID) 135 return info 136 137 def GetFuelExpiry(self): 138 return self.structureInfo.fuelExpires 139 140 def IsLowPower(self): 141 return self.structureInfo.upkeepState == structures.UPKEEP_STATE_LOW_POWER 142 143 def IsAbandoned(self): 144 return self.structureInfo.upkeepState == structures.UPKEEP_STATE_ABANDONED 145 146 def GetState(self): 147 return self.structureInfo.state 148 149 def GetTimerEnd(self): 150 return self.structureInfo.timerEnd 151 152 def GetReinforcementTime(self): 153 return self.structureInfo.reinforceTimers.GetReinforcementTime() 154 155 def GetNextReinforcementTime(self): 156 return self.structureInfo.reinforceTimers.GetNextReinforcementTime() 157 158 def GetGetNextApplyReinforcementTime(self): 159 return self.structureInfo.reinforceTimers.GetNextApply() 160 161 def CanUnanchor(self): 162 if not session.corprole & const.corpRoleDirector: 163 return False 164 if structures.STATE_CANCELS_UNANCHOR.get(self.GetState()) is True: 165 return False 166 if not self.IsUnanchoring(): 167 return True 168 return False 169 170 def CanCancelUnanchor(self): 171 if session.corprole & const.corpRoleDirector: 172 if self.IsUnanchoring(): 173 return True 174 return False 175 176 def IsUnanchoring(self): 177 return self.GetUnanchorTime() is not None 178 179 def GetUnanchorTime(self): 180 return self.structureInfo.unanchoring 181 182 def StructureStateChanged(self, structureID, newStructureState): 183 self.structureInfo.state = newStructureState 184 self.on_structure_state_changed(structureID) 185 186 def GetLiquidOzoneQty(self): 187 return self.structureInfo.liquidOzoneQty 188 189 def GetWars(self): 190 return self.structureInfo.wars 191 192 193 def GetStuctureServices(solarSystemID, structureServices, ownerID): 194 sortedServices, _ = GetStuctureServicesAndOnlineStatus(solarSystemID, structureServices, ownerID) 195 return sortedServices 196 197 198 def GetStuctureServicesAndOnlineStatus(solarSystemID, structureServices, ownerID): 199 if structureServices is None: 200 return ([], {}) 201 sortServices = set() 202 securitySvc = sm.GetService('securityOfficeSvc') 203 onlineStatusByServiceID = {} 204 for eachServiceID, eachServiceValue in structureServices.iteritems(): 205 onlineStatus = eachServiceValue 206 if eachServiceID in structures.INDUSTRY_SERVICES: 207 eachServiceID = structures.SERVICE_INDUSTRY 208 if onlineStatusByServiceID.get(eachServiceID, None) == structures.SERVICE_STATE_ONLINE: 209 onlineStatus = structures.SERVICE_STATE_ONLINE 210 elif eachServiceID == structures.SERVICE_SECURITY_OFFICE: 211 if ownerID not in const.stationOwnersWithSecurityService or not securitySvc.CanAccessServiceInSolarSystem(solarSystemID): 212 continue 213 serviceInfo = stationServiceConst.serviceDataByServiceID.get(eachServiceID, None) 214 if serviceInfo is None: 215 continue 216 sortServices.add((serviceInfo.label, serviceInfo)) 217 onlineStatusByServiceID[eachServiceID] = onlineStatus 218 219 if sortServices: 220 sortServices = SortListOfTuples(sortServices) 221 return (sortServices, onlineStatusByServiceID)