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