import 'package:nc_photos/account.dart'; import 'package:nc_photos/di_container.dart'; import 'package:nc_photos/entity/collection.dart'; import 'package:nc_photos/entity/collection/content_provider/album.dart'; import 'package:nc_photos/entity/collection/content_provider/nc_album.dart'; import 'package:nc_photos/use_case/album/create_album.dart'; import 'package:nc_photos/use_case/nc_album/create_nc_album.dart'; class CreateCollection { CreateCollection(this._c) : assert(require(_c)); static bool require(DiContainer c) => DiContainer.has(c, DiType.albumRepo) && CreateNcAlbum.require(c); Future call(Account account, Collection collection) async { final provider = collection.contentProvider; if (provider is CollectionNcAlbumProvider) { await CreateNcAlbum(_c)(account, provider.album); return collection; } else if (provider is CollectionAlbumProvider) { final album = await CreateAlbum(_c.albumRepo)(account, provider.album); return collection.copyWith( contentProvider: CollectionAlbumProvider( account: account, album: album, ), ); } else { throw UnimplementedError("Unknown type: ${provider.runtimeType}"); } } final DiContainer _c; }