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

goal_data_controller.py (10958B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\careergoals\client\goal_data_controller.py
      2 import logging
      3 import uuid
      4 from carbon.common.script.sys.serviceConst import ROLE_QA
      5 from careergoals.client import signal, errors
      6 from careergoals.client.const import RewardLabel
      7 from careergoals.client.goal import Goal
      8 from careergoals.client.goal_data_grouping import create_career_path_goal_groups, OverallGoalGroup
      9 from careergoals.client.goal_definition import GoalDefinition
     10 import characterdata.careerpathconst as cpConst
     11 from careergoals.client.messenger.request_messenger import PublicCareerGoalRequestMessenger
     12 logger = logging.getLogger(__name__)
     13 
     14 class GoalDataController(object):
     15 
     16     def __init__(self):
     17         self._public_gateway = sm.GetService('publicGatewaySvc')
     18         self._request_messenger = PublicCareerGoalRequestMessenger(self._public_gateway)
     19         self._goal_definitions_per_career = None
     20         self._overall_goal_definitions = None
     21         self._goals = None
     22         self._local_claimed_rewards = {}
     23         self._local_completed_goals = []
     24 
     25     def are_goals_loaded(self):
     26         return self._are_definitions_loaded() and self._are_states_loaded()
     27 
     28     def prime_definitions_and_states(self):
     29         self._load_states()
     30 
     31     def claim_reward(self, goal_id, reward_label):
     32         if not self._public_gateway.is_available():
     33             return
     34         success = self._request_messenger.claim_reward_request(goal_id, reward_label)
     35         self.mark_local_reward_label_claimed(goal_id, reward_label, success)
     36 
     37     def _load_definitions(self):
     38         if not self._are_definitions_loaded():
     39             goal_definitions = self._request_messenger.get_goals_definition_request()
     40             self._goal_definitions_per_career = create_career_path_goal_groups()
     41             self._overall_goal_definitions = OverallGoalGroup()
     42             for goal_definition in goal_definitions:
     43                 if goal_definition.career == cpConst.career_path_none:
     44                     self._overall_goal_definitions.add_goal_definition(goal_definition)
     45                 elif goal_definition.group_id:
     46                     self._goal_definitions_per_career[goal_definition.career].add_goal_definition(goal_definition)
     47                 else:
     48                     self._goal_definitions_per_career[goal_definition.career].career_path_goal_definition = goal_definition
     49 
     50             for each in self._goal_definitions_per_career.itervalues():
     51                 each.sort_goal_definitions()
     52 
     53             signal.on_definitions_loaded()
     54 
     55     def _are_definitions_loaded(self):
     56         return self._goal_definitions_per_career is not None and self._overall_goal_definitions is not None
     57 
     58     def _get_goal_definition(self, goal_id, career_id = None, group_id = None):
     59         self._load_definitions()
     60         if career_id is None:
     61             goal_definition = self._overall_goal_definitions.get_goal_definition(goal_id)
     62             if goal_definition is not None:
     63                 return goal_definition
     64             for _, goals_per_career in self._goal_definitions_per_career.iteritems():
     65                 found_goal_definition = goals_per_career.get_goal_definition(goal_id)
     66                 if found_goal_definition is not None:
     67                     return found_goal_definition
     68 
     69         else:
     70             if group_id is None:
     71                 career_path_goal_definition = self._goal_definitions_per_career[career_id].career_path_goal_definition
     72                 if career_path_goal_definition.goal_id == goal_id:
     73                     return career_path_goal_definition
     74             return self._goal_definitions_per_career[career_id].get_goal_definition(goal_id, group_id)
     75 
     76     def _load_states(self):
     77         self._load_definitions()
     78         if self._goals is None:
     79             self._goals = {}
     80             goal_progress_states = self._request_messenger.get_goals_and_rewards_progress_request()
     81             for goal_progress in goal_progress_states:
     82                 goal_id = goal_progress.goal_id
     83                 goal_definition = self._get_goal_definition(goal_id, None, None)
     84                 if not goal_definition:
     85                     raise errors.CareerGoalDefinitionNotFound
     86                 claimed_states = {x:y for x, y in goal_progress.claimed_states.iteritems() if x in goal_definition.reward_labels}
     87                 self._goals[goal_id] = Goal(goal_definition, goal_progress.progress, goal_progress.completed, claimed_states)
     88 
     89             signal.on_states_loaded()
     90 
     91     def _are_states_loaded(self):
     92         return self._goals is not None
     93 
     94     def get_all_goals(self):
     95         self._load_states()
     96         return self._goals
     97 
     98     def get_goal(self, goal_id):
     99         self._load_states()
    100         return self._goals.get(goal_id, None)
    101 
    102     def get_career_path_total_progress(self, career_path_id):
    103         self._load_states()
    104         all_career_goal_definitions = self._goal_definitions_per_career[career_path_id].get_all_career_goal_definitions()
    105         total_progress = 0
    106         for goal_definition in all_career_goal_definitions:
    107             goal = self.get_goal(goal_definition.goal_id)
    108             if goal:
    109                 total_progress += goal_definition.progress
    110 
    111         return total_progress
    112 
    113     def get_career_path_goal(self, career_path_id):
    114         self._load_states()
    115         return self._goals.get(self._goal_definitions_per_career[career_path_id].career_path_goal_definition.goal_id, None)
    116 
    117     def get_overall_goals(self):
    118         self._load_states()
    119         return [ self._goals.get(x.goal_id, None) for x in self._overall_goal_definitions.goal_definitions ]
    120 
    121     def get_goals_in_group(self, career_path_id, group_id):
    122         self._load_states()
    123         if career_path_id in self._goal_definitions_per_career:
    124             return [ self._goals.get(x.goal_id, None) for x in self._goal_definitions_per_career[career_path_id].get_goal_definitions_in_group(group_id) ]
    125         else:
    126             return []
    127 
    128     def is_career_path_goal(self, goal_id, career_path_id):
    129         self._load_definitions()
    130         if career_path_id is None:
    131             return any([ x == goal_id for x in [ y.career_path_goal_definition.goal_id for y in self._goal_definitions_per_career.values() ] ])
    132         elif career_path_id not in self._goal_definitions_per_career:
    133             return False
    134         else:
    135             return goal_id == self._goal_definitions_per_career[career_path_id].career_path_goal_definition.goal_id
    136 
    137     def is_overall_goal(self, goal_id):
    138         self._load_definitions()
    139         return any([ x.goal_id == goal_id for x in self._overall_goal_definitions.goal_definitions ])
    140 
    141     def get_overall_progress(self):
    142         self._load_states()
    143         if len(self.get_overall_goals()) > 0:
    144             return self.get_overall_goals()[-1].progress
    145         return 0
    146 
    147     def get_max_overall_target(self):
    148         self._load_definitions()
    149         return self._overall_goal_definitions.get_max_target()
    150 
    151     def are_all_overall_goals_completed(self):
    152         self._load_states()
    153         return all([ g.is_completed() for g in self.get_overall_goals() ])
    154 
    155     def is_activity_completed(self, career_path_id, group_id):
    156         self._load_states()
    157         goals = self.get_goals_in_group(career_path_id, group_id)
    158         return all([ g.is_completed() for g in goals ])
    159 
    160     def get_goals_with_claimable_rewards(self):
    161         self._load_states()
    162         return [ g for g in self.get_all_goals().itervalues() if g.has_unclaimed_rewards() ]
    163 
    164     def get_claimable_rewards_count(self):
    165         self._load_states()
    166         claimable_rewards_count = 0
    167         for goal in self.get_goals_with_claimable_rewards():
    168             claimable_rewards_count += len(goal.get_unclaimed_reward_labels())
    169 
    170         return claimable_rewards_count
    171 
    172     def get_local_claimed_rewards(self):
    173         return self._local_claimed_rewards
    174 
    175     def update_local_goal_progress(self, goal_id, progress):
    176         self._load_states()
    177         goal = self.get_goal(goal_id)
    178         if goal:
    179             goal.update_local_progress(progress)
    180             signal.on_goal_progress_changed(goal_id, progress)
    181 
    182     def mark_local_goal_completed(self, goal_id):
    183         self._load_states()
    184         goal = self.get_goal(goal_id)
    185         if goal:
    186             goal.mark_local_completed()
    187             self._local_completed_goals.append(goal_id)
    188             signal.on_goal_progress_changed(goal_id, goal.definition.target_value)
    189             signal.on_goal_completed(goal_id)
    190 
    191     def mark_local_reward_label_claimed(self, goal_id, reward_label, success):
    192         self._load_states()
    193         if not success:
    194             signal.on_reward_claimed_failed(goal_id, reward_label)
    195         else:
    196             if goal_id not in self._local_claimed_rewards:
    197                 self._local_claimed_rewards[goal_id] = []
    198             self._local_claimed_rewards[goal_id].append(reward_label)
    199             goal = self.get_goal(goal_id)
    200             if goal:
    201                 goal.mark_local_reward_label_claimed(reward_label)
    202                 signal.on_reward_claimed(goal_id, reward_label)
    203 
    204     def get_local_completed_goals_per_career(self):
    205         self._load_states()
    206         result = {}
    207         for goal_id in self._local_completed_goals:
    208             goal = self.get_goal(goal_id)
    209             if goal.definition.career not in result:
    210                 result[goal.definition.career] = []
    211             result[goal.definition.career].append(goal)
    212 
    213         return result
    214 
    215     def get_local_completed_career_points(self):
    216         self._load_states()
    217         result = 0
    218         for goal_id in self._local_completed_goals:
    219             goal = self.get_goal(goal_id)
    220             if goal:
    221                 result += goal.definition.career_points
    222 
    223         return result
    224 
    225     def clear_state_cache(self):
    226         logger.info('CAREER GOALS - clearing state cache')
    227         self._goals = None
    228 
    229     def clear_definitions_cache(self):
    230         logger.info('CAREER GOALS - clearing definitions cache')
    231         self._goal_definitions_per_career = None
    232         self._overall_goal_definitions = None
    233         self.clear_state_cache()
    234         self.clear_local_cache()
    235 
    236     def clear_local_cache(self):
    237         logger.info('CAREER GOALS - clearing local cache')
    238         self._local_claimed_rewards = {}
    239         self._local_completed_goals = []
    240         self.clear_local_completed_goals()
    241 
    242     def clear_local_completed_goals(self):
    243         logger.info('CAREER GOALS - clearing local completed goals')
    244         self._local_completed_goals = []
    245 
    246     def admin_complete_goal(self, goal_id):
    247         if not session.role & ROLE_QA:
    248             return
    249         goal = self._goals.get(goal_id, None)
    250         if goal and not goal.is_completed():
    251             self._request_messenger.admin_complete_goal_request(goal_id)
    252 
    253     def admin_progress_goal(self, goal_id, progress):
    254         if not session.role & ROLE_QA:
    255             return
    256         self._request_messenger.admin_progress_goal_request(goal_id, progress)