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

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