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

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)