import 'package:copy_with/copy_with.dart'; import 'package:equatable/equatable.dart'; import 'package:nc_photos/account.dart'; import 'package:nc_photos/api/api_util.dart' as api_util; import 'package:nc_photos/entity/album.dart'; import 'package:nc_photos/entity/album/provider.dart'; import 'package:nc_photos/entity/collection.dart'; import 'package:nc_photos/entity/collection/util.dart'; import 'package:nc_photos/entity/collection_item/util.dart'; import 'package:nc_photos/remote_storage_util.dart' as remote_storage_util; import 'package:to_string/to_string.dart'; part 'album.g.dart'; /// Album provided by our app @genCopyWith @toString class CollectionAlbumProvider with EquatableMixin implements CollectionContentProvider { const CollectionAlbumProvider({ required this.account, required this.album, }); @override String toString() => _$toString(); @override String get fourCc => "ALBM"; @override String get id => album.albumFile!.fileId!.toString(); @override int? get count { if (album.provider is AlbumStaticProvider) { return (album.provider as AlbumStaticProvider).items.length; } else { return null; } } @override DateTime get lastModified => album.provider.latestItemTime ?? album.lastUpdated; @override List get capabilities => [ CollectionCapability.sort, CollectionCapability.rename, CollectionCapability.manualCover, if (album.provider is AlbumStaticProvider) ...[ CollectionCapability.manualItem, CollectionCapability.manualSort, CollectionCapability.labelItem, CollectionCapability.share, ], ]; /// Capabilities when this album is shared to this user by someone else List get guestCapabilities => [ if (album.provider is AlbumStaticProvider) ...[ CollectionCapability.manualItem, CollectionCapability.labelItem, ], ]; @override CollectionItemSort get itemSort => album.sortProvider.toCollectionItemSort(); @override List get shares => album.shares ?.where((s) => s.userId != account.userId) .map((s) => CollectionShare( userId: s.userId, username: s.displayName ?? s.userId.raw, )) .toList() ?? const []; @override String? getCoverUrl( int width, int height, { bool? isKeepAspectRatio, }) { final fd = album.coverProvider.getCover(album); if (fd == null) { return null; } else { return api_util.getFilePreviewUrlByFileId( account, fd.fdId, width: width, height: height, isKeepAspectRatio: isKeepAspectRatio ?? false, ); } } @override bool get isDynamicCollection => album.provider is! AlbumStaticProvider; @override bool get isPendingSharedAlbum => album.albumFile?.path.startsWith( remote_storage_util.getRemotePendingSharedAlbumsDir(account)) == true; @override List get props => [account, album]; final Account account; final Album album; }