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__