findStudios method
- int? page,
- int? perPage,
- String? filter,
- String? sort,
- bool? descending,
- bool favoritesOnly = false,
override
Implementation
@override
Future<List<Studio>> findStudios({
int? page,
int? perPage,
String? filter,
String? sort,
bool? descending,
bool favoritesOnly = false,
}) async {
QueryResult<Query$FindStudios> result;
String? effectiveSort = sort == 'scene_count' ? 'scenes_count' : sort;
result = await _runFindStudios(
page: page,
perPage: perPage,
filter: filter,
sort: effectiveSort,
descending: descending,
favoritesOnly: favoritesOnly,
);
// Some servers may still use scene_count; retry if scenes_count is rejected.
if (result.hasException &&
effectiveSort == 'scenes_count' &&
_isInvalidSort(result.exception!, 'scenes_count')) {
effectiveSort = 'scene_count';
result = await _runFindStudios(
page: page,
perPage: perPage,
filter: filter,
sort: effectiveSort,
descending: descending,
favoritesOnly: favoritesOnly,
);
}
final shouldLocalSortBySceneCount =
(sort == 'scene_count' || sort == 'scenes_count') &&
result.hasException &&
(_isInvalidSort(result.exception!, 'scenes_count') ||
_isInvalidSort(result.exception!, 'scene_count'));
if (shouldLocalSortBySceneCount) {
result = await _runFindStudios(
page: page,
perPage: perPage,
filter: filter,
sort: null,
descending: descending,
favoritesOnly: favoritesOnly,
);
}
if (result.hasException) throw result.exception!;
final studios = result.parsedData!.findStudios.studios
.map(
(s) => Studio(
id: s.id,
name: s.name,
url: s.url,
imagePath: s.image_path,
details: s.details,
rating100: s.rating100,
sceneCount: s.scene_count,
imageCount: s.image_count,
galleryCount: s.gallery_count,
performerCount: s.performer_count,
favorite: s.favorite,
),
)
.toList();
if (shouldLocalSortBySceneCount) {
studios.sort(
(a, b) => (descending == true)
? b.sceneCount.compareTo(a.sceneCount)
: a.sceneCount.compareTo(b.sceneCount),
);
}
return studios;
}