findScenes method

  1. @override
Future<List<Scene>> findScenes({
  1. int? page,
  2. int? perPage,
  3. String? filter,
  4. String? sort,
  5. bool descending = true,
  6. bool? organized,
  7. bool? performerFavorite,
  8. String? performerId,
  9. String? studioId,
  10. String? tagId,
  11. SceneFilter? sceneFilter,
})
override

Implementation

@override
Future<List<Scene>> findScenes({
  int? page,
  int? perPage,
  String? filter,
  String? sort,
  bool descending = true,
  bool? organized,
  bool? performerFavorite,
  String? performerId,
  String? studioId,
  String? tagId,
  SceneFilter? sceneFilter,
}) async {
  String? effectiveSort = sort == 'rating100' ? 'rating' : sort;
  var result = await _runFindScenes(
    page: page,
    perPage: perPage,
    filter: filter,
    sort: effectiveSort,
    descending: descending,
    organized: organized,
    performerFavorite: performerFavorite,
    performerId: performerId,
    studioId: studioId,
    tagId: tagId,
    sceneFilter: sceneFilter,
  );

  if (result.hasException &&
      effectiveSort == 'rating' &&
      _isInvalidSort(result.exception!, 'rating')) {
    effectiveSort = 'rating100';
    result = await _runFindScenes(
      page: page,
      perPage: perPage,
      filter: filter,
      sort: effectiveSort,
      descending: descending,
      organized: organized,
      performerFavorite: performerFavorite,
      performerId: performerId,
      studioId: studioId,
      tagId: tagId,
      sceneFilter: sceneFilter,
    );
  }

  if (result.hasException) throw result.exception!;

  return result.parsedData!.findScenes.scenes
      .map(
        (s) => Scene(
          id: s.id,
          title: s.title ?? '',
          details: null,
          path: s.files.isNotEmpty ? s.files.first.path : null,
          date: DateTime.tryParse(s.date ?? '') ?? DateTime.now(),
          rating100: s.rating100,
          oCounter: s.o_counter ?? 0,
          organized: s.organized,
          interactive: s.interactive,
          resumeTime: s.resume_time,
          playCount: s.play_count ?? 0,
          files: s.files
              .map(
                (f) => SceneFile(
                  format: null,
                  width: null,
                  height: null,
                  videoCodec: null,
                  audioCodec: null,
                  bitRate: null,
                  duration: f.duration,
                  frameRate: null,
                ),
              )
              .toList(),
          paths: ScenePaths(
            screenshot: resolveGraphqlMediaUrl(
              rawUrl: s.paths.screenshot,
              graphqlEndpoint: _graphqlEndpoint,
            ),
            preview: resolveGraphqlMediaUrl(
              rawUrl: s.paths.preview,
              graphqlEndpoint: _graphqlEndpoint,
            ),
            stream: resolveGraphqlMediaUrl(
              rawUrl: s.paths.stream,
              graphqlEndpoint: _graphqlEndpoint,
            ),
          ),
          studioId: s.studio?.id,
          studioName: s.studio?.name,
          studioImagePath: resolveGraphqlMediaUrl(
            rawUrl: s.studio?.image_path,
            graphqlEndpoint: _graphqlEndpoint,
          ),
          performerIds: s.performers.map((p) => p.id).toList(),
          performerNames: s.performers.map((p) => p.name).toList(),
          performerImagePaths: s.performers
              .map(
                (p) => resolveGraphqlMediaUrl(
                  rawUrl: p.image_path,
                  graphqlEndpoint: _graphqlEndpoint,
                ),
              )
              .toList(),
          tagIds: [],
          tagNames: [],
        ),
      )
      .toList();
}