vgsService.py (6077B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\vgsService.py 2 import logging 3 from carbon.client.script.environment.AudioUtil import PlaySound 4 from carbon.common.script.sys.service import Service 5 from carbonui.uicore import uicore 6 from eve.client.script.ui.view.aurumstore.vgsUiController import VgsUiController 7 from eve.client.script.ui.view.viewStateConst import ViewState 8 from eve.common.lib.vgsConst import CATEGORYTAG_GAMETIME 9 from eveexceptions import UserError 10 from globalConfig import GetFakeVgsEnabled 11 import locks 12 from localization import GetByLabel 13 from plex.client.api.signal import on_balance_changed 14 from vgs.client.store import Store 15 from vgs.client.vgsClient import VgsClient 16 log = logging.getLogger(__name__) 17 18 class VgsService(Service): 19 __guid__ = 'svc.vgsService' 20 __servicename__ = 'vgsSvc' 21 __displayName__ = 'Vgs Service' 22 __startupdependencies__ = ['neocom', 23 'redeem', 24 'viewState', 25 'machoNet'] 26 __notifyevents__ = ['OnRedeemingTokensUpdated', 27 'OnSessionChanged', 28 'OnSessionReset', 29 'OnUIScalingChange', 30 'OnGlobalConfigChanged'] 31 32 def __init__(self): 33 super(VgsService, self).__init__() 34 self.vgsClient = None 35 self.store = None 36 self.uiController = None 37 self.isTestingEnabled = None 38 39 def Run(self, memStream = None): 40 self.LogInfo('Starting Vgs Service') 41 self.Initialize() 42 self.isTestingEnabled = GetFakeVgsEnabled(self.machoNet) 43 on_balance_changed.connect(self._on_balance_changed) 44 45 def Stop(self, memStream = None): 46 on_balance_changed.disconnect(self._on_balance_changed) 47 super(VgsService, self).Stop(memStream) 48 49 def Initialize(self): 50 self.vgsClient = VgsClient() 51 self.store = Store(self.vgsClient, lockImpl=locks.Lock) 52 self.uiController = VgsUiController(self, self.viewState) 53 54 def ClearCache(self): 55 self.store.ClearCache() 56 57 def Reset(self): 58 self.ClearCache() 59 self.vgsClient = None 60 self.store = None 61 self.uiController.Close() 62 self.uiController = None 63 64 def UpdateMockingSettings(self): 65 oldIsTestingEnabled = self.isTestingEnabled 66 self.isTestingEnabled = GetFakeVgsEnabled(self.machoNet) 67 if oldIsTestingEnabled != self.isTestingEnabled: 68 self.Reset() 69 self.Initialize() 70 self.CloseView(reason='Connection settings change detected - closing store to avoid UI errors') 71 72 def OnUIScalingChange(self, *args): 73 self.CloseView(reason='VgsService.OnUIScalingChange - closing store to avoid UI errors') 74 75 def OnGlobalConfigChanged(self, *args, **kwargs): 76 self.UpdateMockingSettings() 77 78 def _on_balance_changed(self, balance, delta): 79 if delta > 0: 80 PlaySound('ui_plex_in001_play') 81 elif delta < 0: 82 PlaySound('ui_plex_out001_play') 83 self.neocom.Blink('aurumStore', GetByLabel('UI/Neocom/Blink/PLEXBalanceChanged')) 84 85 def OnRedeemingTokensUpdated(self): 86 self.store.GetAccount().OnRedeemingTokensUpdated() 87 88 def GetStore(self): 89 return self.store 90 91 def GetUiController(self): 92 return self.uiController 93 94 def CloseView(self, reason = None): 95 if self.viewState.IsViewActive(ViewState.VirtualGoodsStore): 96 if reason: 97 self.LogInfo(reason) 98 self.viewState.CloseSecondaryView(ViewState.VirtualGoodsStore) 99 100 def OnSessionChanged(self, isRemote, session, change): 101 if 'charid' in change and change['charid'][1] is not None and self.vgsClient is None: 102 self.Initialize() 103 isLocationChange = 'locationid' in change 104 isUserChange = 'userid' in change 105 if isLocationChange or isUserChange: 106 reason = '' 107 if isLocationChange and isUserChange: 108 reason = 'VgsService.OnSessionChanged - locationid and userid change detected, closing store' 109 elif isLocationChange: 110 reason = 'VgsService.OnSessionChanged - locationid change detected, closing store' 111 elif isUserChange: 112 reason = 'VgsService.OnSessionChanged - userid change detected, closing store' 113 self.LogInfo(reason) 114 self.CloseView(reason) 115 116 def OnSessionReset(self): 117 self.Reset() 118 self.Initialize() 119 120 def ShowRedeemUI(self): 121 if session.charid: 122 self.redeem.OpenRedeemWindow() 123 if self.viewState.IsViewActive(ViewState.VirtualGoodsStore): 124 self.uiController.CloseOffer() 125 self.viewState.CloseSecondaryView(ViewState.VirtualGoodsStore) 126 if session.charid is None: 127 uicore.layer.charsel.EnterRedeemMode(animate=True) 128 129 def ShowOffer(self, offerId, categoryId = None): 130 self.GetUiController().ShowOffer(offerId, categoryId) 131 132 def SetFeaturedOffers(self, offerIDs = None): 133 self.GetUiController().SetFeaturedOffers(offerIDs) 134 135 def GetFeaturedOffers(self): 136 return self.GetUiController().GetFeaturedOffers() 137 138 def ToggleStore(self, categoryId = None): 139 self._CheckIsUndocking() 140 self.viewState.ToggleSecondaryView(ViewState.VirtualGoodsStore, categoryId=categoryId) 141 142 def OpenStore(self, categoryTag = None, typeIds = None): 143 self._CheckIsUndocking() 144 if not self.viewState.IsViewActive(ViewState.VirtualGoodsStore): 145 self.viewState.ActivateView(ViewState.VirtualGoodsStore, categoryTag=categoryTag, typeIds=typeIds) 146 elif categoryTag: 147 view = self.viewState.GetView(ViewState.VirtualGoodsStore) 148 view.SelectCategoryByCategoryTag(categoryTag) 149 150 def IsFastCheckoutWindowActive(self): 151 return self.GetUiController().IsFastCheckoutWindowActive() 152 153 def ShowBuyOmegaInStore(self): 154 self.OpenStore(categoryTag=CATEGORYTAG_GAMETIME) 155 156 def _CheckIsUndocking(self): 157 if sm.GetService('undocking').IsExiting(): 158 raise UserError('StoreNotAvailableWhileUndocking')