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

achievement.py (4937B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\model\state\achievement.py
      2 from datetime import datetime
      3 from achievement_system.client.model.state.achievement_reached_milestone import AchievementReachedMilestone
      4 from eveProto.generated.eve_public.achievement.api.requests_pb2 import GetResponse as ProtoAchievementStateAttributes
      5 from achievement_system.client.model.state.checklist import Checklist
      6 from google.protobuf.timestamp_pb2 import Timestamp
      7 if False:
      8     from typing import List
      9 
     10 class CachedAchievementStateAttributes:
     11 
     12     def __init__(self, achievement_state, expiration):
     13         self._achievement_state = achievement_state
     14         self._expiration = expiration
     15 
     16     @property
     17     def achievement_state(self):
     18         return self._achievement_state
     19 
     20     @property
     21     def expiration(self):
     22         return self._expiration
     23 
     24     @property
     25     def is_expired(self):
     26         return datetime.now() > self._expiration
     27 
     28 
     29 class AchievementStateAttributes:
     30 
     31     def __init__(self, completed_date, checklist, progress, reached_milestones):
     32         self._completed_date = completed_date
     33         self._not_completed = completed_date is None
     34         self._checklist = checklist
     35         self._progress = progress
     36         self._reached_milestones = reached_milestones
     37 
     38     @property
     39     def completed_date(self):
     40         return self._completed_date
     41 
     42     @property
     43     def not_completed(self):
     44         return self._not_completed
     45 
     46     @property
     47     def checklist(self):
     48         return self._checklist
     49 
     50     @property
     51     def progress(self):
     52         return self._progress
     53 
     54     @property
     55     def reached_milestones(self):
     56         return self._reached_milestones
     57 
     58     def is_milestone_reached(self, milestone_id):
     59         for reached_milestone in self._reached_milestones:
     60             if reached_milestone.identifier == milestone_id:
     61                 return True
     62 
     63         return False
     64 
     65     @classmethod
     66     def from_proto(cls, payload):
     67         completed_date = datetime.fromtimestamp(payload.completed_date.seconds) if payload.HasField('completed_date') else None
     68         checklist = Checklist.from_proto(payload=payload.checklist) if payload.HasField('checklist') else None
     69         progress = payload.progress_value if payload.HasField('progress_value') else None
     70         reached_milestones = []
     71         for milestone in payload.reached_milestones:
     72             reached_milestones.append(AchievementReachedMilestone.from_proto(payload=milestone))
     73 
     74         return AchievementStateAttributes(completed_date, checklist, progress, reached_milestones)
     75 
     76     @classmethod
     77     def to_proto(cls, instance):
     78         proto_reached_milestones = []
     79         for reached_milestone in instance.reached_milestones:
     80             proto_milestone = AchievementReachedMilestone.to_proto(instance=reached_milestone)
     81             proto_reached_milestones.append(proto_milestone)
     82 
     83         proto = ProtoAchievementStateAttributes(not_completed=instance.not_completed, reached_milestones=proto_reached_milestones)
     84         if instance.completed_date is not None:
     85             ts = Timestamp()
     86             ts.FromDatetime(instance.completed_date)
     87             proto.completed_date.CopyFrom(ts)
     88         else:
     89             proto.not_completed = True
     90         if instance.checklist is not None:
     91             proto.checklist.CopyFrom(Checklist.to_proto(instance.checklist))
     92         elif instance.progress is not None:
     93             proto.progress_value = instance.progress
     94         return proto
     95 
     96     def __eq__(self, other):
     97         if other is self:
     98             return True
     99         if other is None:
    100             return False
    101         if not isinstance(other, AchievementStateAttributes):
    102             return False
    103         return self._completed_date == other._completed_date and self._checklist == other._checklist and self._progress == other._progress and self._reached_milestones == other._reached_milestones
    104 
    105     def __ne__(self, other):
    106         return not self.__eq__(other)
    107 
    108     def __str__(self):
    109 
    110         def _fmt_dt(dt):
    111             if dt is None:
    112                 return 'None'
    113             try:
    114                 return dt.isoformat()
    115             except Exception:
    116                 return str(dt)
    117 
    118         checklist_str = 'None' if self._checklist is None else str(self._checklist)
    119         milestones = self._reached_milestones or []
    120         preview_count = 3
    121         preview = ', '.join((str(m) for m in milestones[:preview_count]))
    122         if len(milestones) > preview_count:
    123             preview += ', ...'
    124         return 'AchievementStateAttributes(completed_date={completed_date}, not_completed={not_completed}, progress={progress}, checklist={checklist}, reached_milestones_count={rm_count}, reached_milestones=[{rm_preview}])'.format(completed_date=_fmt_dt(self._completed_date), not_completed=self._not_completed, progress=self._progress, checklist=checklist_str, rm_count=len(milestones), rm_preview=preview)