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

recommendationController.py (6060B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\recommendation\recommendationController.py
      2 import logging
      3 from brennivin.itertoolsext import Bundle
      4 from carbon.client.script.environment.AudioUtil import PlaySound
      5 from eve.client.script.ui.shared.recommendation.const import NO_ACTIVE, REJECTED, COMPLETED, CURRENT_ACTIVE, ANOTHER_ACTIVE, BACKROUNDS_BY_TAG_ID, HINT_BY_TAG_ID, Sounds
      6 from fsdBuiltData.common.tagsFSDLoader import TagsFSDLoader
      7 from localization import GetByMessageID, GetByLabel
      8 from operations.client.operationscontroller import GetOperationsController
      9 from operations.common.fsdloaders import OperationsLoader
     10 from signals import signal
     11 logger = logging.getLogger(__name__)
     12 
     13 class RecommendationController(object):
     14 
     15     def __init__(self, operationID, slotIdx, journeyID = None):
     16         self.operationID = operationID
     17         self.journeyID = journeyID
     18         self.slotIdx = slotIdx
     19         self._primaryTag = None
     20         self._operation = None
     21         self.status = None
     22         self.hasBeenSeenAfterCompletion = False
     23         self.recommendationSvc = sm.GetService('recommendationSvc')
     24         self.onNewRecommendation = signal.Signal(signalName='onNewRecommendation')
     25         self.onRequestTimeout = signal.Signal(signalName='onRequestTimeout')
     26 
     27     def TryPopulateController(self):
     28         if self.operationID:
     29             return
     30         self.ResetController()
     31         self.operationID, self.journeyID = self.recommendationSvc.GetRecommendationFromQueue()
     32         if not self.operationID or not self.journeyID:
     33             logger.exception('RecommendationController::TryPopulateController - missing operationID or journeyID')
     34             return
     35         self.onNewRecommendation()
     36 
     37     @property
     38     def operation(self):
     39         if not self._operation:
     40             operation = OperationsLoader.GetByID(self.operationID)
     41             if not operation:
     42                 logger.error('Operation Recommendation not found in FSD: %d' % self.operationID)
     43                 return
     44             self._operation = operation
     45         return self._operation
     46 
     47     def ResetController(self):
     48         self.operationID = None
     49         self.journeyID = None
     50         self.status = None
     51         self.hasBeenSeenAfterCompletion = False
     52         self._operation = None
     53         self._primaryTag = None
     54 
     55     @property
     56     def primaryTag(self):
     57         if not self._primaryTag:
     58             for tagID in self.operation.primaryTags:
     59                 tag = TagsFSDLoader.GetByID(tagID)
     60                 if tag:
     61                     self._primaryTag = Bundle(tagID=tagID, tagInfo=tag)
     62                     break
     63 
     64         return self._primaryTag
     65 
     66     def GetOperationName(self):
     67         return GetByMessageID(self.operation.title)
     68 
     69     def GetOperationDescription(self):
     70         return GetByMessageID(self.operation.description)
     71 
     72     def GetRecommendationIcon(self, solid = False):
     73         primaryTag = self.primaryTag
     74         if primaryTag:
     75             path = primaryTag.tagInfo.texturePath or ''
     76             if solid and path:
     77                 path = path.replace('.png', 'White.png').replace('.jpg', 'White.jpg')
     78             return path
     79         return ''
     80 
     81     def GetRecommendationHint(self):
     82         primaryTag = self.primaryTag
     83         hintList = []
     84         if primaryTag:
     85             tagHintPath = HINT_BY_TAG_ID.get(primaryTag.tagID, None)
     86             if tagHintPath:
     87                 tagText = GetByLabel(tagHintPath)
     88                 if tagText:
     89                     tagHint = '%s%s' % (GetByLabel('UI/recommendations/Hints/TagHeader'), tagText)
     90                     hintList.append(tagHint)
     91         hintList.append(GetByMessageID(self.operation.extraHint) if self.operation.extraHint else None)
     92         hintList = filter(None, hintList)
     93         if hintList:
     94             return '<br><br>'.join(hintList)
     95         return ''
     96 
     97     def GetAgencyContentGroup(self):
     98         return self.operation.agencyContentGroupID
     99 
    100     def GetBackgroundPath(self):
    101         FALLBACK_IMAGE = ''
    102         primaryTag = self.primaryTag
    103         if primaryTag:
    104             tagID = primaryTag.tagID
    105             return BACKROUNDS_BY_TAG_ID.get(tagID, FALLBACK_IMAGE)
    106         return FALLBACK_IMAGE
    107 
    108     def RequestRecommendations(self, amount, allowOld = False):
    109         self.recommendationSvc.RequestRecommendations(amount, allowOld)
    110 
    111     def AcceptRecommendation(self, *args):
    112         PlaySound(Sounds.ACCEPT)
    113         self.recommendationSvc.AcceptRecommendation(self.operationID, self.journeyID)
    114 
    115     def QuitRecommendation(self, *args):
    116         PlaySound(Sounds.QUIT)
    117         self.recommendationSvc.QuitRecommendation(self.operationID, self.slotIdx)
    118 
    119     def DismissRecommendation(self, *args):
    120         PlaySound(Sounds.DISMISS)
    121         self.recommendationSvc.DismissRecommendation(self.operationID, self.journeyID, self.slotIdx)
    122 
    123     def RecommendationDisplayed(self):
    124         self.recommendationSvc.SendRecommendationDisplayedEvent(self.operationID, self.journeyID)
    125 
    126     def GetOperationState(self):
    127         activeOperationID = GetOperationsController().get_active_operation_id()
    128         if self.status in (REJECTED, COMPLETED):
    129             return self.status
    130         if not activeOperationID:
    131             return NO_ACTIVE
    132         if self.operationID == activeOperationID:
    133             return CURRENT_ACTIVE
    134         return ANOTHER_ACTIVE
    135 
    136     def SetStatus(self, newStatus):
    137         self.status = newStatus
    138 
    139     def IsCompleted(self):
    140         return self.status == COMPLETED
    141 
    142     def IsCompletedAndUnseen(self):
    143         return self.IsCompleted() and not self.hasBeenSeenAfterCompletion
    144 
    145     def MarkCompletionAnimationAsSeen(self):
    146         self.hasBeenSeenAfterCompletion = True
    147 
    148 
    149 class LastActiveOperationInfo(object):
    150 
    151     def __init__(self, categoryID, operation, taskList):
    152         self.categoryID = categoryID
    153         self.operation = operation
    154         self.taskList = taskList
    155         self.operationID = operation.operationID if operation else None
    156 
    157     def __repr__(self):
    158         return 'LastActiveOperationInfo : %s ' % self.__dict__