collectGallery static method

Future<GalleryMedia?> collectGallery({
  1. Locale? locale,
  2. required GalleryMediaType mediaType,
  3. bool eagerLoad = true,
})

Implementation

static Future<GalleryMedia?> collectGallery({
  Locale? locale,
  required GalleryMediaType mediaType,
  bool eagerLoad = true,
}) async {
  if (await promptPermissionSetting(mediaType: mediaType)) {
    List<GalleryAlbum> tempGalleryAlbums = [];
    List<Album> photoAlbums = [];
    List<Album> videoAlbums = [];

    if (!eagerLoad) {
      if (mediaType == GalleryMediaType.image) {
        photoAlbums = await PhotoGallery.listAlbums(
          mediumType: MediumType.image,
          approximateCount: true,
        );
      }

      if (mediaType == GalleryMediaType.video) {
        videoAlbums = await PhotoGallery.listAlbums(
          mediumType: MediumType.video,
          approximateCount: true,
        );
      }

      if (mediaType == GalleryMediaType.all) {
        final mixedAlbums = await PhotoGallery.listAlbums(
          approximateCount: true,
        );
        for (final mixedAlbum in mixedAlbums) {
          final entry = GalleryAlbum.album(mixedAlbum);
          entry.setType = AlbumType.mixed;
          tempGalleryAlbums.add(entry);
        }
      } else if (mediaType == GalleryMediaType.image) {
        for (var photoAlbum in photoAlbums) {
          GalleryAlbum entry = GalleryAlbum.album(photoAlbum);
          entry.setType = AlbumType.image;
          tempGalleryAlbums.add(entry);
        }
      } else {
        for (var videoAlbum in videoAlbums) {
          GalleryAlbum entry = GalleryAlbum.album(videoAlbum);
          entry.setType = AlbumType.video;
          tempGalleryAlbums.add(entry);
        }
      }

      return GalleryMedia(tempGalleryAlbums);
    }

    if (mediaType == GalleryMediaType.image ||
        mediaType == GalleryMediaType.all) {
      photoAlbums = await PhotoGallery.listAlbums(
        mediumType: MediumType.image,
      );
      if (mediaType == GalleryMediaType.all) {
        videoAlbums = await PhotoGallery.listAlbums(
          mediumType: MediumType.video,
        );
      }
      for (var photoAlbum in photoAlbums) {
        GalleryAlbum entireGalleryAlbum = GalleryAlbum.album(photoAlbum);
        await entireGalleryAlbum.initialize(
          locale: locale,
          onChanged: null,
          lightWeight: false,
        );
        entireGalleryAlbum.setType = AlbumType.image;
        if (videoAlbums.any((element) => element.id == photoAlbum.id)) {
          Album videoAlbum = videoAlbums.singleWhere(
            (element) => element.id == photoAlbum.id,
          );
          GalleryAlbum videoGalleryAlbum = GalleryAlbum.album(videoAlbum);
          await videoGalleryAlbum.initialize(
            locale: locale,
            onChanged: null,
            lightWeight: false,
          );
          DateTime? lastPhotoDate = entireGalleryAlbum.lastDate;
          DateTime? lastVideoDate = videoGalleryAlbum.lastDate;

          if (lastPhotoDate == null) {
            try {
              entireGalleryAlbum.thumbnail = await videoAlbum.getThumbnail(
                highQuality: true,
              );
            } catch (e) {
              if (kDebugMode) {
                print(e);
              }
            }
          } else if (lastVideoDate == null) {
          } else {
            if (lastVideoDate.isAfter(lastPhotoDate)) {
              try {
                entireGalleryAlbum.thumbnail = await videoAlbum.getThumbnail(
                  highQuality: true,
                );
              } catch (e) {
                entireGalleryAlbum.thumbnail = null;
                if (kDebugMode) {
                  print(e);
                }
              }
            }
          }
          for (var file in videoGalleryAlbum.files) {
            entireGalleryAlbum.addFile(file, locale: locale);
          }
          entireGalleryAlbum.sort();
          entireGalleryAlbum.setType = AlbumType.mixed;
          videoAlbums.remove(videoAlbum);
        }
        tempGalleryAlbums.add(entireGalleryAlbum);
      }
    }

    if (mediaType == GalleryMediaType.video) {
      videoAlbums = await PhotoGallery.listAlbums(
        mediumType: MediumType.video,
      );
    }

    if (mediaType == GalleryMediaType.video ||
        mediaType == GalleryMediaType.all) {
      for (var videoAlbum in videoAlbums) {
        GalleryAlbum galleryVideoAlbum = GalleryAlbum.album(videoAlbum);
        await galleryVideoAlbum.initialize(
          locale: locale,
          onChanged: null,
          lightWeight: false,
        );
        galleryVideoAlbum.setType = AlbumType.video;
        tempGalleryAlbums.add(galleryVideoAlbum);
      }
    }

    return GalleryMedia(tempGalleryAlbums);
  } else {
    return null;
  }
}