asset_selection_state.model.dart 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import 'dart:convert';
  2. import 'package:collection/collection.dart';
  3. import 'package:immich_mobile/shared/models/immich_asset.model.dart';
  4. class AssetSelectionState {
  5. final Set<String> selectedMonths;
  6. final Set<ImmichAsset> selectedNewAssetsForAlbum;
  7. final Set<ImmichAsset> selectedAdditionalAssetsForAlbum;
  8. final Set<ImmichAsset> selectedAssetsInAlbumViewer;
  9. final bool isMultiselectEnable;
  10. /// Indicate the asset selection page is navigated from existing album
  11. final bool isAlbumExist;
  12. AssetSelectionState({
  13. required this.selectedMonths,
  14. required this.selectedNewAssetsForAlbum,
  15. required this.selectedAdditionalAssetsForAlbum,
  16. required this.selectedAssetsInAlbumViewer,
  17. required this.isMultiselectEnable,
  18. required this.isAlbumExist,
  19. });
  20. AssetSelectionState copyWith({
  21. Set<String>? selectedMonths,
  22. Set<ImmichAsset>? selectedNewAssetsForAlbum,
  23. Set<ImmichAsset>? selectedAdditionalAssetsForAlbum,
  24. Set<ImmichAsset>? selectedAssetsInAlbumViewer,
  25. bool? isMultiselectEnable,
  26. bool? isAlbumExist,
  27. }) {
  28. return AssetSelectionState(
  29. selectedMonths: selectedMonths ?? this.selectedMonths,
  30. selectedNewAssetsForAlbum:
  31. selectedNewAssetsForAlbum ?? this.selectedNewAssetsForAlbum,
  32. selectedAdditionalAssetsForAlbum: selectedAdditionalAssetsForAlbum ??
  33. this.selectedAdditionalAssetsForAlbum,
  34. selectedAssetsInAlbumViewer:
  35. selectedAssetsInAlbumViewer ?? this.selectedAssetsInAlbumViewer,
  36. isMultiselectEnable: isMultiselectEnable ?? this.isMultiselectEnable,
  37. isAlbumExist: isAlbumExist ?? this.isAlbumExist,
  38. );
  39. }
  40. Map<String, dynamic> toMap() {
  41. final result = <String, dynamic>{};
  42. result.addAll({'selectedMonths': selectedMonths.toList()});
  43. result.addAll({
  44. 'selectedNewAssetsForAlbum':
  45. selectedNewAssetsForAlbum.map((x) => x.toMap()).toList()
  46. });
  47. result.addAll({
  48. 'selectedAdditionalAssetsForAlbum':
  49. selectedAdditionalAssetsForAlbum.map((x) => x.toMap()).toList()
  50. });
  51. result.addAll({
  52. 'selectedAssetsInAlbumViewer':
  53. selectedAssetsInAlbumViewer.map((x) => x.toMap()).toList()
  54. });
  55. result.addAll({'isMultiselectEnable': isMultiselectEnable});
  56. result.addAll({'isAlbumExist': isAlbumExist});
  57. return result;
  58. }
  59. factory AssetSelectionState.fromMap(Map<String, dynamic> map) {
  60. return AssetSelectionState(
  61. selectedMonths: Set<String>.from(map['selectedMonths']),
  62. selectedNewAssetsForAlbum: Set<ImmichAsset>.from(
  63. map['selectedNewAssetsForAlbum']?.map((x) => ImmichAsset.fromMap(x))),
  64. selectedAdditionalAssetsForAlbum: Set<ImmichAsset>.from(
  65. map['selectedAdditionalAssetsForAlbum']
  66. ?.map((x) => ImmichAsset.fromMap(x))),
  67. selectedAssetsInAlbumViewer: Set<ImmichAsset>.from(
  68. map['selectedAssetsInAlbumViewer']
  69. ?.map((x) => ImmichAsset.fromMap(x))),
  70. isMultiselectEnable: map['isMultiselectEnable'] ?? false,
  71. isAlbumExist: map['isAlbumExist'] ?? false,
  72. );
  73. }
  74. String toJson() => json.encode(toMap());
  75. factory AssetSelectionState.fromJson(String source) =>
  76. AssetSelectionState.fromMap(json.decode(source));
  77. @override
  78. String toString() {
  79. return 'AssetSelectionState(selectedMonths: $selectedMonths, selectedNewAssetsForAlbum: $selectedNewAssetsForAlbum, selectedAdditionalAssetsForAlbum: $selectedAdditionalAssetsForAlbum, selectedAssetsInAlbumViewer: $selectedAssetsInAlbumViewer, isMultiselectEnable: $isMultiselectEnable, isAlbumExist: $isAlbumExist)';
  80. }
  81. @override
  82. bool operator ==(Object other) {
  83. if (identical(this, other)) return true;
  84. final setEquals = const DeepCollectionEquality().equals;
  85. return other is AssetSelectionState &&
  86. setEquals(other.selectedMonths, selectedMonths) &&
  87. setEquals(other.selectedNewAssetsForAlbum, selectedNewAssetsForAlbum) &&
  88. setEquals(other.selectedAdditionalAssetsForAlbum,
  89. selectedAdditionalAssetsForAlbum) &&
  90. setEquals(
  91. other.selectedAssetsInAlbumViewer, selectedAssetsInAlbumViewer) &&
  92. other.isMultiselectEnable == isMultiselectEnable &&
  93. other.isAlbumExist == isAlbumExist;
  94. }
  95. @override
  96. int get hashCode {
  97. return selectedMonths.hashCode ^
  98. selectedNewAssetsForAlbum.hashCode ^
  99. selectedAdditionalAssetsForAlbum.hashCode ^
  100. selectedAssetsInAlbumViewer.hashCode ^
  101. isMultiselectEnable.hashCode ^
  102. isAlbumExist.hashCode;
  103. }
  104. }