paragonLpStorePanel.py (10138B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\station\loyaltyPointStore\paragonLpStorePanel.py 2 import evetypes 3 import copy 4 from carbonui.button.const import HEIGHT_NORMAL 5 from eve.client.script.ui.control.entries.util import GetFromClass 6 from eve.client.script.ui.cosmetics.structure.cosmeticLicenseErrorScreen import CosmeticLicenseErrorScreen 7 from eve.client.script.ui.station.loyaltyPointStore.lpOfferEntry import AllianceLogoLPOfferEntry, CorporationLogoLPOfferEntry, LPOfferEntry, on_cosmetic_license_purchase_failed 8 from eve.client.script.ui.station.loyaltyPointStore.lpOfferEntry2 import LPOfferEntry2 9 from eve.client.script.ui.station.loyaltyPointStore.paragonLpStoreFilters import ParagonLPStoreFilters 10 from eve.client.script.ui.station.loyaltyPointStore.paragonLpStoreConst import FILTER_ACQUIRED, FILTER_ALLIANCE_EMBLEMS, FILTER_ALL_FACTIONS, FILTER_ALL_HULLS, FILTER_CORP_EMBLEMS, FILTER_EMPIRE_FACTIONS, FILTER_FACTION, FILTER_HULL, FILTER_OTHER_FACTIONS 11 from eve.common.lib import appConst 12 from carbonui import uiconst 13 from inventorycommon.const import typeLoyaltyPointsHeraldry 14 from localization import GetByLabel 15 from eve.client.script.ui.control.infoNotice import InfoNotice 16 from eve.client.script.ui.station.loyaltyPointStore.lpStorePanel import LPStorePanel 17 from shipcosmetics.client.licensegateway.licenseSignals import on_enable_heraldry_purchase_flag_change 18 from shipcosmetics.common.const import CosmeticsType 19 _BUY_BUTTON_COLUMN_EMPTY_TITLE = ' ' 20 _BUY_BUTTON_COLUMN_MIN_WIDTH = 220 21 REWARD_COLUMN_WIDTH_MIN = 568 22 COST_COLUMN_WIDTH_MIN = 105 23 24 class ParagonLPStorePanel(LPStorePanel): 25 __notifyevents__ = ['OnLPStoreParagonFilterChange'] 26 27 def ApplyAttributes(self, attributes): 28 self.cosmeticsLicenseSvc = sm.GetService('cosmeticsLicenseSvc') 29 self.fetchFreshCosmeticLicenses = True 30 self._errorScreenPadding = attributes.errorScreenPadding 31 super(ParagonLPStorePanel, self).ApplyAttributes(attributes) 32 on_cosmetic_license_purchase_failed.connect(self._OnCosmeticLicensePurchaseFailed) 33 on_enable_heraldry_purchase_flag_change.connect(self._OnHeraldryPurchaseFlagChanged) 34 sm.RegisterNotify(self) 35 36 def _OnClose(self, *args): 37 on_cosmetic_license_purchase_failed.disconnect(self._OnCosmeticLicensePurchaseFailed) 38 on_enable_heraldry_purchase_flag_change.disconnect(self._OnHeraldryPurchaseFlagChanged) 39 super(ParagonLPStorePanel, self)._OnClose(*args) 40 41 def ConstructTopParent(self): 42 padding = (-self._errorScreenPadding[0], 43 -self._errorScreenPadding[1], 44 -self._errorScreenPadding[2], 45 -self._errorScreenPadding[3]) 46 self.errorScreen = CosmeticLicenseErrorScreen(name='errorScreen', parent=self, align=uiconst.TOALL, padding=padding) 47 self.errorScreen.CloseScreen(animate=False) 48 super(ParagonLPStorePanel, self).ConstructTopParent() 49 50 def ConstructInfoCont(self): 51 super(ParagonLPStorePanel, self).ConstructInfoCont() 52 InfoNotice(name='autoInjectInfo', parent=self.topParent, align=uiconst.TOTOP, labelText=GetByLabel('UI/ShipCosmetics/AutoInjectNotice')) 53 if self.cosmeticsLicenseSvc.is_emblem_lp_cost_removed(): 54 InfoNotice(name='experimentInfo', parent=self.topParent, align=uiconst.TOTOP, labelText='LP Costs for all Emblems have been reduced to zero for the purpose of this mass test', padTop=6) 55 56 def ConstructFilterCont(self): 57 self.filters = ParagonLPStoreFilters(parent=self.topParent, name='filters', align=uiconst.TOTOP, height=HEIGHT_NORMAL, padding=(0, 32, 0, 16), filterEditClearedCallback=self.RefreshOffers, filterEditCallback=self.RefreshOffers, corpID=self.corpID) 58 59 def RefreshPresets(self): 60 pass 61 62 def _GetStoreOffers(self): 63 if self.cosmeticsLicenseSvc.are_heraldry_purchases_enabled(): 64 return sm.GetService('lpstore').GetOffers(self.corpID) 65 else: 66 return [] 67 68 def OnLPStoreParagonFilterChange(self): 69 self.RefreshOffers() 70 71 def _ProcessOffers(self, storeOffers, filters, textFilter): 72 offers = [] 73 if self.cosmeticsLicenseSvc.are_heraldry_purchases_enabled(): 74 try: 75 ownedLicenses = self.cosmeticsLicenseSvc.get_owned_ship_licenses(force_refresh=self.fetchFreshCosmeticLicenses) 76 if self.fetchFreshCosmeticLicenses: 77 self.fetchFreshCosmeticLicenses = False 78 except RuntimeError: 79 ownedLicenses = [] 80 self.errorScreen.ShowScreen(GetByLabel('UI/LPStore/FetchLicensesFailedErrorMessage'), GetByLabel('UI/LPStore/FetchLicensesFailedErrorSubtext'), GetByLabel('UI/LPStore/FetchingFailedButton'), self._RetryFetchingCosmeticsLicenses) 81 82 def IsLicenseOwned(license): 83 for ownedLicense in ownedLicenses: 84 if ownedLicense.fsdTypeID == license.fsdTypeID: 85 return True 86 87 return False 88 89 for offer in storeOffers: 90 if evetypes.GetGroupID(offer.typeID) == appConst.groupShipCosmeticLicense: 91 cosmeticLicense = self.cosmeticsLicenseSvc.get_by_ship_license_type_id(offer.typeID) 92 offer['isOwned'] = IsLicenseOwned(cosmeticLicense) 93 offer['shipTypeID'] = cosmeticLicense.shipTypeID 94 offer['cosmeticType'] = cosmeticLicense.cosmeticType 95 if self.cosmeticsLicenseSvc.is_emblem_lp_cost_removed(): 96 offer = copy.deepcopy(offer) 97 offer.lpCost = 0 98 sortID = 'sort_%s' % GetByLabel('UI/LPStore/EMCost') 99 offer[sortID] = offer.lpCost 100 if not self.Check(offer, filters, textFilter): 101 continue 102 if cosmeticLicense.cosmeticType == CosmeticsType.ALLIANCE_LOGO: 103 offers.append(GetFromClass(AllianceLogoLPOfferEntry, offer)) 104 elif cosmeticLicense.cosmeticType == CosmeticsType.CORPORATION_LOGO: 105 offers.append(GetFromClass(CorporationLogoLPOfferEntry, offer)) 106 else: 107 offers.append(GetFromClass(LPOfferEntry, offer)) 108 109 return offers 110 111 def Check(self, offer, filters, textFilter = ''): 112 if textFilter and evetypes.GetName(offer.typeID).lower().find(textFilter) < 0: 113 return False 114 if not hasattr(offer, 'shipTypeID') or not hasattr(offer, 'isOwned') or not hasattr(offer, 'cosmeticType'): 115 return False 116 includedCosmeticsTypes = [] 117 for f, value in filters.iteritems(): 118 if f == FILTER_FACTION and value != FILTER_ALL_FACTIONS: 119 factionID = evetypes.GetFactionID(offer.shipTypeID) 120 if value == FILTER_OTHER_FACTIONS: 121 if factionID in FILTER_EMPIRE_FACTIONS: 122 return False 123 elif factionID is None or factionID != value: 124 return False 125 groupID = evetypes.GetGroupID(offer.shipTypeID) 126 if f == FILTER_HULL and value != FILTER_ALL_HULLS: 127 if groupID != value: 128 return False 129 if f == FILTER_CORP_EMBLEMS and value: 130 includedCosmeticsTypes.append(CosmeticsType.CORPORATION_LOGO) 131 if f == FILTER_ALLIANCE_EMBLEMS and value: 132 includedCosmeticsTypes.append(CosmeticsType.ALLIANCE_LOGO) 133 if f == FILTER_ACQUIRED and value: 134 if offer.isOwned: 135 return False 136 137 if offer.cosmeticType not in includedCosmeticsTypes: 138 return False 139 return True 140 141 def _GetHeaders(self): 142 headers = [GetByLabel('UI/LPStore/Reward')] 143 requirements = self.lpSvc.GetRequirements(self.corpID) 144 for requirementColumn in requirements: 145 costLabelPath = requirementColumn.costLabelPath 146 if costLabelPath: 147 costLabel = GetByLabel(costLabelPath) 148 headers.append(costLabel) 149 150 if self.hasStandingsRequirement: 151 headers.append(GetByLabel('UI/LPStore/StandingsRequired')) 152 headers.append(_BUY_BUTTON_COLUMN_EMPTY_TITLE) 153 return headers 154 155 def _GetMinColumnWidths(self): 156 minColumnWidths = {GetByLabel('UI/LPStore/Reward'): REWARD_COLUMN_WIDTH_MIN} 157 requirements = self.lpSvc.GetRequirements(self.corpID) 158 for requirementColumn in requirements: 159 costLabelPath = requirementColumn.costLabelPath 160 if costLabelPath: 161 costLabel = GetByLabel(costLabelPath) 162 minColumnWidths[costLabel] = COST_COLUMN_WIDTH_MIN 163 164 if self.hasStandingsRequirement: 165 minColumnWidths[GetByLabel('UI/LPStore/StandingsRequired')] = 86 166 minColumnWidths[_BUY_BUTTON_COLUMN_EMPTY_TITLE] = _BUY_BUTTON_COLUMN_MIN_WIDTH 167 return minColumnWidths 168 169 def _RetryFetchingCosmeticsLicenses(self): 170 self.errorScreen.CloseScreen(True) 171 self.Refresh() 172 173 def _OnHeraldryPurchaseFlagChanged(self, _flagValue): 174 if self.offerRefreshDespammerInitiated: 175 self.RefreshOffers() 176 177 def _CloseErrorScreen(self): 178 self.errorScreen.CloseScreen(True) 179 180 def _OnCosmeticLicensePurchaseFailed(self): 181 self.errorScreen.ShowScreen(GetByLabel('UI/LPStore/CosmeticLicensePurchaseFailedError'), GetByLabel('UI/LPStore/CosmeticLicensePurchaseFailedSubtext'), GetByLabel('UI/LPStore/CosmeticLicensePurchaseFailedButton'), self._CloseErrorScreen) 182 183 def _GetCorpLPsLabel(self, lpAmount): 184 return GetByLabel('UI/Common/TypeAmount', item=typeLoyaltyPointsHeraldry, amount=lpAmount) 185 186 def _GetSortByLabel(self): 187 return GetByLabel('UI/LPStore/EMCost') 188 189 def _GetExchangeRateHint(self, fromCorpName, toCorpName): 190 return GetByLabel('UI/LPStore/ExchangeRateNotDefinedEM', fromCorpName=fromCorpName, toCorpName=toCorpName) 191 192 def _OnSizeChange_NoBlock(self, *args): 193 super(ParagonLPStorePanel, self)._OnSizeChange_NoBlock(*args) 194 if hasattr(self, 'errorScreen'): 195 self.errorScreen.AdjustWidth(args[0])