activitiesSvc.py (6359B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\services\activitiesSvc.py 2 import eveexceptions 3 import localization 4 import uthread2 5 from carbon.common.script.sys.service import Service 6 from eve.client.script.ui.shared.activities.activity import ReleasedActivity 7 from eve.client.script.ui.shared.activities.newActivityNotify import CheckOpenNewActivitiesNotifyWindow 8 from eve.client.script.ui.shared.message_bus.newsCarouselMessenger import NewsCarouselMessenger 9 from fsdBuiltData.common.newActivitiesFSDLoader import NewActivitiesFSDLoader 10 from signals import Signal 11 12 class ActivitiesService(Service): 13 __guid__ = 'svc.activities' 14 __notifyevents__ = ['OnActivityRedDotUpdated'] 15 16 def Run(self, *args): 17 super(ActivitiesService, self).Run(*args) 18 self.Initialize() 19 20 def Initialize(self): 21 self._extensionsInitialized = False 22 self.OnActivitySelected = Signal(signalName='OnActivitySelected') 23 self.OnAfterExecution = Signal(signalName='OnAfterExecution') 24 self.OnSetPopState = Signal(signalName='OnSetPopState') 25 self.OnOpenActivityInfo = Signal(signalName='OnOpenActivityInfo') 26 self.OnCloseActivityInfo = Signal(signalName='OnCloseActivityInfo') 27 self._currId = None 28 self._activities = None 29 self._unseen = 0 30 self._activitiesService = None 31 self.message_bus = NewsCarouselMessenger(sm.GetService('publicGatewaySvc')) 32 33 def _GetRemoteActivitiesService(self): 34 if self._activitiesService is None: 35 self._activitiesService = sm.RemoteSvc('activityMgr') 36 return self._activitiesService 37 38 def AfterLogout(self): 39 self._extensionsInitialized = False 40 41 def LoadActivityStatus(self): 42 statuses = self._GetRemoteActivitiesService().GetActivityBadgeStatuses() 43 self.activityStatuses = set(statuses) 44 45 def CalcUnseenCountAndActivityStatus(self): 46 self._unseen = 0 47 for activity in self._activities: 48 if activity.GetID() not in self.activityStatuses and not activity.IsCountdownVisible(): 49 self._unseen += 1 50 else: 51 activity.SetSeen() 52 53 def LoadActivities(self): 54 activites = [ ReleasedActivity(activityID, fsdData) for activityID, fsdData in self.GetFSDData().iteritems() ] 55 self._activities = [ activity for activity in activites if activity.IsShown() ] 56 if len(self._activities) == 0: 57 return 58 self._maxActivityID = max(self._activities, key=lambda x: x.GetID()).GetID() 59 self._activities = sorted(self._activities, key=self._GetSortValue, reverse=True) 60 self.dataDict = dict([ (element.GetID(), element) for element in self._activities ]) 61 self.firstID = None 62 if self._activities is not None and len(self._activities) > 0: 63 self.firstID = self._activities[0].GetID() 64 self.LoadActivityStatus() 65 self.CalcUnseenCountAndActivityStatus() 66 self.OnActivityRedDotUpdated() 67 68 def HasUnseenActivity(self): 69 return self.GetUnseenActivityCount() > 0 70 71 def GetUnseenActivityCount(self): 72 return self._unseen 73 74 def GetActivities(self): 75 return self._activities 76 77 def GetActivityCount(self): 78 return self._activities and len(self._activities) or 0 79 80 def _GetSortValue(self, activity): 81 return activity.GetID() 82 83 def GetFSDData(self): 84 return NewActivitiesFSDLoader().GetData() 85 86 def GetCurrentActivityInfo(self): 87 activity = self.dataDict.get(self._currId) 88 return activity.GetInfo() 89 90 def OnBannerClicked(self): 91 info = self.GetCurrentActivityInfo() 92 if info: 93 self.OnOpenActivityInfo(info) 94 else: 95 self.StartAction() 96 97 def OnActivityInfoCloseClicked(self): 98 self.OnCloseActivityInfo() 99 100 def ExecuteAction(self): 101 activity = self.dataDict.get(self._currId) 102 activity.ExecuteCallToAction() 103 self.OnAfterExecution(False) 104 105 def StartAction(self): 106 uthread2.start_tasklet(self.ExecuteAction) 107 108 def IsCurrentActivityExecutable(self): 109 return True 110 111 def CheckIfLoginOpenWindowEnabled(self): 112 if not localization.util.AmOnChineseServer(): 113 return 114 if not session.charid: 115 return 116 if self._activities is None or len(self._activities) == 0: 117 return 118 if self.GetStatus() == 0: 119 self.ToggleActivities() 120 121 def ToggleActivities(self): 122 CheckOpenNewActivitiesNotifyWindow() 123 124 def GetCurrId(self): 125 return self._currId 126 127 def OnActivitySeen(self, activity): 128 activityID = activity.GetID() 129 if activityID in self.activityStatuses: 130 return 131 ret = self._GetRemoteActivitiesService().ActivitySeen(activityID) 132 if not ret: 133 return 134 self.activityStatuses.add(activityID) 135 self.CalcUnseenCountAndActivityStatus() 136 self.OnActivityRedDotUpdated() 137 138 def SelectActivity(self, activityID = None): 139 isFirst = False 140 if activityID is None: 141 if self.firstID is None: 142 return 143 isFirst = True 144 activityID = self.firstID 145 self._LogDisplayed(activityID) 146 self._currId = activityID 147 activity = self.dataDict.get(self._currId) 148 if not isFirst: 149 self.OnActivitySeen(activity) 150 self.OnActivitySelected(activity) 151 152 def OnActivityRedDotUpdated(self): 153 sm.ScatterEvent('OnActivityUpdated') 154 155 def GetStatus(self): 156 return self._GetRemoteActivitiesService().GetActivitiesPopState() 157 158 def OnStatusChanged(self, state): 159 self._LogAutoPopupToggled(state) 160 ret = self._GetRemoteActivitiesService().SetActivitiesPopState(state) 161 if not ret: 162 self.OnSetPopState(1 if state == 0 else 0) 163 164 @eveexceptions.EatsExceptions('protoClientLogs') 165 def _LogAutoPopupToggled(self, checked): 166 self.message_bus.auto_popup_toggled(checked) 167 168 @eveexceptions.EatsExceptions('protoClientLogs') 169 def _LogDisplayed(self, ad_id): 170 self.message_bus.displayed(ad_id) 171 172 def Reset(self): 173 self._activities = None 174 self.dataDict = None 175 self.firstID = None 176 self._currId = None 177 self._unseen = 0