diff --git a/ycast/server.py b/ycast/server.py index 92bc589..e014911 100644 --- a/ycast/server.py +++ b/ycast/server.py @@ -37,17 +37,7 @@ def get_directories_page(subdir, directories, requestargs): if len(directories) == 0: page.add(vtuner.Display("No entries found.")) return page - offset = 0 - limit = len(directories) - if get_element_offset(requestargs) is not None and get_element_limit(requestargs) is not None: - offset = get_element_offset(requestargs) - limit = get_element_limit(requestargs) - if offset > len(directories): - offset = len(directories) - if limit > len(directories): - limit = len(directories) - for directory_num in range(offset, limit): - directory = directories[directory_num] + for directory in get_paged_elements(directories, requestargs): page.add(vtuner.Directory(directory, url_for(subdir, _external=True, directory=directory))) return page @@ -57,37 +47,31 @@ def get_stations_page(stations, requestargs): if len(stations) == 0: page.add(vtuner.Display("No stations found.")) return page - offset = 0 - limit = len(stations) - if get_element_offset(requestargs) is not None and get_element_limit(requestargs) is not None: - offset = get_element_offset(requestargs) - limit = get_element_limit(requestargs) - if offset > len(stations): - offset = len(stations) - if limit > len(stations): - limit = len(stations) - for station_num in range(offset, limit): - station = stations[station_num] + for station in get_paged_elements(stations, requestargs): page.add(station.to_vtuner()) return page -def get_element_offset(requestargs): +def get_paged_elements(items, requestargs): if requestargs.get('startitems'): - return int(requestargs.get('startitems')) - 1 + offset = int(requestargs.get('startitems')) - 1 elif requestargs.get('start'): - return int(requestargs.get('start')) - 1 + offset = int(requestargs.get('start')) - 1 else: - return None - - -def get_element_limit(requestargs): + offset = 0 if requestargs.get('enditems'): - return int(requestargs.get('enditems')) + limit = int(requestargs.get('enditems')) elif requestargs.get('start') and requestargs.get('howmany'): - return int(requestargs.get('start')) - 1 + int(requestargs.get('howmany')) + limit = int(requestargs.get('start')) - 1 + int(requestargs.get('howmany')) else: - return None + limit = len(items) + if offset > len(items): + offset = len(items) + if limit > len(items): + limit = len(items) + if limit < offset: + limit = offset + return items[offset:limit] # TODO: vtuner doesn't do https (e.g. for logos). make an icon cache