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

skinListingsPaginationController.py (4758B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\client\skinListingsPaginationController.py
      2 from cosmetics.client.ships.skins.errors import get_listing_error_text
      3 from cosmetics.client.ships.skins.live_data.paginationController import BasePaginationController
      4 from player_messaging.client.ui_message import message_player
      5 from localization import GetByLabel
      6 from publicGateway.grpc.exceptions import GenericException
      7 from stackless_response_router.exceptions import TimeoutException
      8 
      9 class SkinListingsPaginationController(BasePaginationController):
     10 
     11     def __init__(self, get_page_method):
     12         super(SkinListingsPaginationController, self).__init__()
     13         self._get_page_method = get_page_method
     14         self._ship_type_filter = None
     15         self._sort_method = None
     16         self._ascending = None
     17         self._listing_target_type = None
     18         self._seller_membership_type = None
     19         self._pages_loaded = None
     20 
     21     @property
     22     def initialized(self):
     23         return self._pages_loaded is not None
     24 
     25     def reset(self, ship_type_filter, sort_method, ascending, num_per_page, listing_target_type = None, seller_membership_type = None):
     26         self._ship_type_filter = ship_type_filter
     27         self._sort_method = sort_method
     28         self._ascending = ascending
     29         self._listing_target_type = listing_target_type
     30         self._seller_membership_type = seller_membership_type
     31         self.num_per_page = num_per_page
     32         self._pages_loaded = []
     33         try:
     34             error = self._get_more_pages_from_server()
     35             if error is not None:
     36                 message_player(GetByLabel(get_listing_error_text(error)))
     37         except (GenericException, TimeoutException):
     38             message_player(GetByLabel('UI/Common/CannotConnectToServer'))
     39 
     40     def clear(self, ship_type_filter, sort_method, ascending, num_per_page, listing_target = None, seller_membership_type = None):
     41         self.reset(ship_type_filter, sort_method, ascending, num_per_page, listing_target, seller_membership_type)
     42         self.page_num = 0
     43 
     44     def _is_last_page_loaded(self):
     45         if not self._pages_loaded:
     46             return False
     47         return self._pages_loaded[-1].is_last_page()
     48 
     49     def _get_more_pages_from_server(self, num_pages = 3):
     50         for i in range(0, num_pages):
     51             listings, next_page_token, error = self._get_page_method(self._ship_type_filter, self._sort_method, self._ascending, self._listing_target_type, self._seller_membership_type, self._get_last_token(), self.num_per_page)
     52             if error is not None:
     53                 return error
     54             new_page = SkinListingPage(listings, next_page_token)
     55             self._pages_loaded.append(new_page)
     56             if next_page_token is None:
     57                 break
     58 
     59     def _get_last_token(self):
     60         if not self._pages_loaded:
     61             return None
     62         return self._pages_loaded[-1].next_page_token
     63 
     64     def get_page(self, page_num):
     65         _page = self._get_page(page_num)
     66         self.page_num = page_num
     67         return _page.listings
     68 
     69     def _get_page(self, page_num):
     70         self._check_load_more_pages(page_num)
     71         if page_num >= len(self._pages_loaded):
     72             raise ValueError("Unable to return page that hasn't been loaded")
     73         _page = self._pages_loaded[page_num]
     74         return _page
     75 
     76     def _check_load_more_pages(self, page_num):
     77         if self._is_last_page_loaded():
     78             return
     79         num_loaded = len(self._pages_loaded)
     80         if page_num >= num_loaded:
     81             try:
     82                 error = self._get_more_pages_from_server()
     83                 if error is not None:
     84                     message_player(GetByLabel(get_listing_error_text(error)))
     85             except (GenericException, TimeoutException):
     86                 message_player(GetByLabel('UI/Common/CannotConnectToServer'))
     87 
     88     def is_num_pages_known(self):
     89         return self._is_last_page_loaded()
     90 
     91     def has_more_than_one_page(self):
     92         if not self._pages_loaded:
     93             return False
     94         return not self._pages_loaded[0].is_last_page()
     95 
     96     def has_next_page(self):
     97         page = self._get_page(self.page_num)
     98         return not page.is_last_page()
     99 
    100     def has_prev_page(self):
    101         return self.page_num > 0
    102 
    103 
    104 class SkinListingPage(object):
    105 
    106     def __init__(self, listings, next_page_token):
    107         self._listings = listings
    108         self._next_page_token = next_page_token
    109 
    110     @property
    111     def listings(self):
    112         return self._listings
    113 
    114     @property
    115     def nb_listings(self):
    116         return len(self._listings)
    117 
    118     @property
    119     def next_page_token(self):
    120         return self._next_page_token
    121 
    122     def is_last_page(self):
    123         return self._next_page_token is None