Merge pull request #17 from PiratesIRC/claude/merge-pagination-fix-with-v0.6.0b-01GdAHdP7Hr9wKGc1d8XsZDB
Merge pagination fixes from PR #16 into v0.6.0b, thanks @wdmitchelluk
This commit is contained in:
@@ -1691,13 +1691,30 @@ class Plugin:
|
|||||||
all_groups = []
|
all_groups = []
|
||||||
page = 1
|
page = 1
|
||||||
while True:
|
while True:
|
||||||
api_groups = self._get_api_data(f"/api/channels/groups/?page={page}", token, settings, logger)
|
try:
|
||||||
|
api_groups = self._get_api_data(f"/api/channels/groups/?page={page}", token, settings, logger)
|
||||||
|
except Exception as e:
|
||||||
|
# If we get an error (e.g., 404 for non-existent page), we've reached the end
|
||||||
|
if page > 1:
|
||||||
|
logger.info(f"[Stream-Mapparr] No more group pages available (attempted page {page})")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# If error on first page, re-raise
|
||||||
|
raise
|
||||||
|
|
||||||
if isinstance(api_groups, dict) and 'results' in api_groups:
|
if isinstance(api_groups, dict) and 'results' in api_groups:
|
||||||
all_groups.extend(api_groups['results'])
|
results = api_groups['results']
|
||||||
|
if not results:
|
||||||
|
logger.info("[Stream-Mapparr] Reached last page of groups (empty results)")
|
||||||
|
break
|
||||||
|
all_groups.extend(results)
|
||||||
if not api_groups.get('next'):
|
if not api_groups.get('next'):
|
||||||
break
|
break
|
||||||
page += 1
|
page += 1
|
||||||
elif isinstance(api_groups, list):
|
elif isinstance(api_groups, list):
|
||||||
|
if not api_groups:
|
||||||
|
logger.info("[Stream-Mapparr] Reached last page of groups (empty results)")
|
||||||
|
break
|
||||||
all_groups.extend(api_groups)
|
all_groups.extend(api_groups)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
@@ -2000,15 +2017,34 @@ class Plugin:
|
|||||||
all_groups = []
|
all_groups = []
|
||||||
page = 1
|
page = 1
|
||||||
while True:
|
while True:
|
||||||
api_groups = self._get_api_data(f"/api/channels/groups/?page={page}", token, settings, logger, limiter=limiter)
|
try:
|
||||||
|
api_groups = self._get_api_data(f"/api/channels/groups/?page={page}", token, settings, logger, limiter=limiter)
|
||||||
|
except Exception as e:
|
||||||
|
# If we get an error (e.g., 404 for non-existent page), we've reached the end
|
||||||
|
if page > 1:
|
||||||
|
logger.info(f"[Stream-Mapparr] No more group pages available (attempted page {page})")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# If error on first page, re-raise
|
||||||
|
raise
|
||||||
|
|
||||||
if isinstance(api_groups, dict) and 'results' in api_groups:
|
if isinstance(api_groups, dict) and 'results' in api_groups:
|
||||||
all_groups.extend(api_groups['results'])
|
results = api_groups['results']
|
||||||
if not api_groups.get('next'): break
|
if not results:
|
||||||
|
logger.info("[Stream-Mapparr] Reached last page of groups (empty results)")
|
||||||
|
break
|
||||||
|
all_groups.extend(results)
|
||||||
|
if not api_groups.get('next'):
|
||||||
|
break
|
||||||
page += 1
|
page += 1
|
||||||
elif isinstance(api_groups, list):
|
elif isinstance(api_groups, list):
|
||||||
|
if not api_groups:
|
||||||
|
logger.info("[Stream-Mapparr] Reached last page of groups (empty results)")
|
||||||
|
break
|
||||||
all_groups.extend(api_groups)
|
all_groups.extend(api_groups)
|
||||||
break
|
break
|
||||||
else: break
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
group_name_to_id = {g['name']: g['id'] for g in all_groups if 'name' in g and 'id' in g}
|
group_name_to_id = {g['name']: g['id'] for g in all_groups if 'name' in g and 'id' in g}
|
||||||
|
|
||||||
@@ -2052,18 +2088,55 @@ class Plugin:
|
|||||||
page = 1
|
page = 1
|
||||||
while True:
|
while True:
|
||||||
endpoint = f"/api/channels/streams/?page={page}&page_size=100"
|
endpoint = f"/api/channels/streams/?page={page}&page_size=100"
|
||||||
streams_response = self._get_api_data(endpoint, token, settings, logger, limiter=limiter)
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
streams_response = self._get_api_data(endpoint, token, settings, logger, limiter=limiter)
|
||||||
|
except Exception as e:
|
||||||
|
# If we get an error (e.g., 404 for non-existent page), we've reached the end
|
||||||
|
if page > 1:
|
||||||
|
logger.info(f"[Stream-Mapparr] No more pages available (attempted page {page})")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# If error on first page, re-raise
|
||||||
|
raise
|
||||||
|
|
||||||
|
# Handle both paginated and non-paginated responses
|
||||||
if isinstance(streams_response, dict) and 'results' in streams_response:
|
if isinstance(streams_response, dict) and 'results' in streams_response:
|
||||||
results = streams_response['results']
|
results = streams_response['results']
|
||||||
|
|
||||||
|
# Check if we got empty results
|
||||||
|
if not results:
|
||||||
|
logger.info("[Stream-Mapparr] Reached last page of streams (empty results)")
|
||||||
|
break
|
||||||
|
|
||||||
all_streams_data.extend(results)
|
all_streams_data.extend(results)
|
||||||
if not streams_response.get('next') or len(results) < 100: break
|
logger.debug(f"[Stream-Mapparr] Fetched page {page}: {len(results)} streams (total so far: {len(all_streams_data)})")
|
||||||
|
|
||||||
|
# Stop if this page had fewer results than page_size (last page)
|
||||||
|
if len(results) < 100:
|
||||||
|
logger.info("[Stream-Mapparr] Reached last page of streams")
|
||||||
|
break
|
||||||
|
|
||||||
page += 1
|
page += 1
|
||||||
elif isinstance(streams_response, list):
|
elif isinstance(streams_response, list):
|
||||||
|
# Check if we got empty results
|
||||||
|
if not streams_response:
|
||||||
|
logger.info("[Stream-Mapparr] Reached last page of streams (empty results)")
|
||||||
|
break
|
||||||
|
|
||||||
|
# List response - could still be paginated
|
||||||
all_streams_data.extend(streams_response)
|
all_streams_data.extend(streams_response)
|
||||||
if len(streams_response) < 100: break
|
logger.debug(f"[Stream-Mapparr] Fetched page {page}: {len(streams_response)} streams (total so far: {len(all_streams_data)})")
|
||||||
page += 1
|
|
||||||
else: break
|
# If we got exactly 100 results, there might be more pages
|
||||||
|
if len(streams_response) == 100:
|
||||||
|
page += 1
|
||||||
|
else:
|
||||||
|
logger.info("[Stream-Mapparr] Reached last page of streams")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
logger.warning("[Stream-Mapparr] Unexpected streams response format")
|
||||||
|
break
|
||||||
|
|
||||||
self.loaded_channels = channels_to_process
|
self.loaded_channels = channels_to_process
|
||||||
self.loaded_streams = all_streams_data
|
self.loaded_streams = all_streams_data
|
||||||
|
|||||||
Reference in New Issue
Block a user