import 'dart:convert'; import 'package:collection/collection.dart'; import 'package:immich_mobile/shared/models/immich_asset.model.dart'; class AssetSelectionPageResult { final Set selectedNewAsset; final Set selectedAdditionalAsset; final bool isAlbumExist; AssetSelectionPageResult({ required this.selectedNewAsset, required this.selectedAdditionalAsset, required this.isAlbumExist, }); AssetSelectionPageResult copyWith({ Set? selectedNewAsset, Set? selectedAdditionalAsset, bool? isAlbumExist, }) { return AssetSelectionPageResult( selectedNewAsset: selectedNewAsset ?? this.selectedNewAsset, selectedAdditionalAsset: selectedAdditionalAsset ?? this.selectedAdditionalAsset, isAlbumExist: isAlbumExist ?? this.isAlbumExist, ); } Map toMap() { final result = {}; result.addAll({'selectedNewAsset': selectedNewAsset.map((x) => x.toMap()).toList()}); result.addAll({'selectedAdditionalAsset': selectedAdditionalAsset.map((x) => x.toMap()).toList()}); result.addAll({'isAlbumExist': isAlbumExist}); return result; } factory AssetSelectionPageResult.fromMap(Map map) { return AssetSelectionPageResult( selectedNewAsset: Set.from(map['selectedNewAsset']?.map((x) => ImmichAsset.fromMap(x))), selectedAdditionalAsset: Set.from(map['selectedAdditionalAsset']?.map((x) => ImmichAsset.fromMap(x))), isAlbumExist: map['isAlbumExist'] ?? false, ); } String toJson() => json.encode(toMap()); factory AssetSelectionPageResult.fromJson(String source) => AssetSelectionPageResult.fromMap(json.decode(source)); @override String toString() => 'AssetSelectionPageResult(selectedNewAsset: $selectedNewAsset, selectedAdditionalAsset: $selectedAdditionalAsset, isAlbumExist: $isAlbumExist)'; @override bool operator ==(Object other) { if (identical(this, other)) return true; final setEquals = const DeepCollectionEquality().equals; return other is AssetSelectionPageResult && setEquals(other.selectedNewAsset, selectedNewAsset) && setEquals(other.selectedAdditionalAsset, selectedAdditionalAsset) && other.isAlbumExist == isAlbumExist; } @override int get hashCode => selectedNewAsset.hashCode ^ selectedAdditionalAsset.hashCode ^ isAlbumExist.hashCode; }