Skip to content

Commit 7fefdc4

Browse files
committed
[cli/core] Fix fetching more than 1000 entitlements
1 parent 96e07ff commit 7fefdc4

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

legendary/api/egs.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,24 @@ def get_launcher_manifests(self, platform='Windows', label=None):
186186
r.raise_for_status()
187187
return r.json()
188188

189-
def get_user_entitlements(self):
189+
def get_user_entitlements(self, start=0):
190190
user_id = self.user.get('account_id')
191191
r = self.session.get(f'https://{self._entitlements_host}/entitlement/api/account/{user_id}/entitlements',
192-
params=dict(start=0, count=5000), timeout=self.request_timeout)
192+
params=dict(start=start, count=1000), timeout=self.request_timeout)
193193
r.raise_for_status()
194194
return r.json()
195195

196+
def get_user_entitlements_full(self):
197+
ret = []
198+
199+
while True:
200+
resp = self.get_user_entitlements(start=len(ret))
201+
ret.extend(resp)
202+
if len(resp) < 1000:
203+
break
204+
205+
return ret
206+
196207
def get_game_info(self, namespace, catalog_item_id, timeout=None):
197208
r = self.session.get(f'https://{self._catalog_host}/catalog/api/shared/namespace/{namespace}/bulk/items',
198209
params=dict(id=catalog_item_id, includeDLCDetails=True, includeMainGameDetails=True,

legendary/cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,7 +1657,7 @@ def info(self, args):
16571657
else:
16581658
logger.info('Game not installed and offline mode enabled, cannot load manifest.')
16591659
elif game:
1660-
entitlements = self.core.egs.get_user_entitlements()
1660+
entitlements = self.core.egs.get_user_entitlements_full()
16611661
egl_meta = self.core.egs.get_game_info(game.namespace, game.catalog_item_id)
16621662
game.metadata = egl_meta
16631663
# Get manifest if asset exists for current platform
@@ -2046,7 +2046,7 @@ def activate(self, args):
20462046
redeemed = {k['gameId'] for k in key_list if k['redeemedOnUplay']}
20472047

20482048
games = self.core.get_game_list()
2049-
entitlements = self.core.egs.get_user_entitlements()
2049+
entitlements = self.core.egs.get_user_entitlements_full()
20502050
owned_entitlements = {i['entitlementName'] for i in entitlements}
20512051

20522052
uplay_games = []

0 commit comments

Comments
 (0)