backup_state.model.dart 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import 'package:cancellation_token_http/http.dart';
  2. import 'package:collection/collection.dart';
  3. import 'package:openapi/api.dart';
  4. import 'package:photo_manager/photo_manager.dart';
  5. import 'package:immich_mobile/modules/backup/models/available_album.model.dart';
  6. import 'package:immich_mobile/modules/backup/models/current_upload_asset.model.dart';
  7. enum BackUpProgressEnum { idle, inProgress, inBackground, done }
  8. class BackUpState {
  9. // enum
  10. final BackUpProgressEnum backupProgress;
  11. final List<String> allAssetsInDatabase;
  12. final double progressInPercentage;
  13. final CancellationToken cancelToken;
  14. final ServerInfoResponseDto serverInfo;
  15. final bool backgroundBackup;
  16. final bool backupRequireWifi;
  17. final bool backupRequireCharging;
  18. final int backupTriggerDelay;
  19. /// All available albums on the device
  20. final List<AvailableAlbum> availableAlbums;
  21. final Set<AvailableAlbum> selectedBackupAlbums;
  22. final Set<AvailableAlbum> excludedBackupAlbums;
  23. /// Assets that are not overlapping in selected backup albums and excluded backup albums
  24. final Set<AssetEntity> allUniqueAssets;
  25. /// All assets from the selected albums that have been backup
  26. final Set<String> selectedAlbumsBackupAssetsIds;
  27. // Current Backup Asset
  28. final CurrentUploadAsset currentUploadAsset;
  29. const BackUpState({
  30. required this.backupProgress,
  31. required this.allAssetsInDatabase,
  32. required this.progressInPercentage,
  33. required this.cancelToken,
  34. required this.serverInfo,
  35. required this.backgroundBackup,
  36. required this.backupRequireWifi,
  37. required this.backupRequireCharging,
  38. required this.backupTriggerDelay,
  39. required this.availableAlbums,
  40. required this.selectedBackupAlbums,
  41. required this.excludedBackupAlbums,
  42. required this.allUniqueAssets,
  43. required this.selectedAlbumsBackupAssetsIds,
  44. required this.currentUploadAsset,
  45. });
  46. BackUpState copyWith({
  47. BackUpProgressEnum? backupProgress,
  48. List<String>? allAssetsInDatabase,
  49. double? progressInPercentage,
  50. CancellationToken? cancelToken,
  51. ServerInfoResponseDto? serverInfo,
  52. bool? backgroundBackup,
  53. bool? backupRequireWifi,
  54. bool? backupRequireCharging,
  55. int? backupTriggerDelay,
  56. List<AvailableAlbum>? availableAlbums,
  57. Set<AvailableAlbum>? selectedBackupAlbums,
  58. Set<AvailableAlbum>? excludedBackupAlbums,
  59. Set<AssetEntity>? allUniqueAssets,
  60. Set<String>? selectedAlbumsBackupAssetsIds,
  61. CurrentUploadAsset? currentUploadAsset,
  62. }) {
  63. return BackUpState(
  64. backupProgress: backupProgress ?? this.backupProgress,
  65. allAssetsInDatabase: allAssetsInDatabase ?? this.allAssetsInDatabase,
  66. progressInPercentage: progressInPercentage ?? this.progressInPercentage,
  67. cancelToken: cancelToken ?? this.cancelToken,
  68. serverInfo: serverInfo ?? this.serverInfo,
  69. backgroundBackup: backgroundBackup ?? this.backgroundBackup,
  70. backupRequireWifi: backupRequireWifi ?? this.backupRequireWifi,
  71. backupRequireCharging:
  72. backupRequireCharging ?? this.backupRequireCharging,
  73. backupTriggerDelay: backupTriggerDelay ?? this.backupTriggerDelay,
  74. availableAlbums: availableAlbums ?? this.availableAlbums,
  75. selectedBackupAlbums: selectedBackupAlbums ?? this.selectedBackupAlbums,
  76. excludedBackupAlbums: excludedBackupAlbums ?? this.excludedBackupAlbums,
  77. allUniqueAssets: allUniqueAssets ?? this.allUniqueAssets,
  78. selectedAlbumsBackupAssetsIds:
  79. selectedAlbumsBackupAssetsIds ?? this.selectedAlbumsBackupAssetsIds,
  80. currentUploadAsset: currentUploadAsset ?? this.currentUploadAsset,
  81. );
  82. }
  83. @override
  84. String toString() {
  85. return 'BackUpState(backupProgress: $backupProgress, allAssetsInDatabase: $allAssetsInDatabase, progressInPercentage: $progressInPercentage, cancelToken: $cancelToken, serverInfo: $serverInfo, backgroundBackup: $backgroundBackup, backupRequireWifi: $backupRequireWifi, backupRequireCharging: $backupRequireCharging, backupTriggerDelay: $backupTriggerDelay, availableAlbums: $availableAlbums, selectedBackupAlbums: $selectedBackupAlbums, excludedBackupAlbums: $excludedBackupAlbums, allUniqueAssets: $allUniqueAssets, selectedAlbumsBackupAssetsIds: $selectedAlbumsBackupAssetsIds, currentUploadAsset: $currentUploadAsset)';
  86. }
  87. @override
  88. bool operator ==(Object other) {
  89. if (identical(this, other)) return true;
  90. final collectionEquals = const DeepCollectionEquality().equals;
  91. return other is BackUpState &&
  92. other.backupProgress == backupProgress &&
  93. collectionEquals(other.allAssetsInDatabase, allAssetsInDatabase) &&
  94. other.progressInPercentage == progressInPercentage &&
  95. other.cancelToken == cancelToken &&
  96. other.serverInfo == serverInfo &&
  97. other.backgroundBackup == backgroundBackup &&
  98. other.backupRequireWifi == backupRequireWifi &&
  99. other.backupRequireCharging == backupRequireCharging &&
  100. other.backupTriggerDelay == backupTriggerDelay &&
  101. collectionEquals(other.availableAlbums, availableAlbums) &&
  102. collectionEquals(other.selectedBackupAlbums, selectedBackupAlbums) &&
  103. collectionEquals(other.excludedBackupAlbums, excludedBackupAlbums) &&
  104. collectionEquals(other.allUniqueAssets, allUniqueAssets) &&
  105. collectionEquals(
  106. other.selectedAlbumsBackupAssetsIds,
  107. selectedAlbumsBackupAssetsIds,
  108. ) &&
  109. other.currentUploadAsset == currentUploadAsset;
  110. }
  111. @override
  112. int get hashCode {
  113. return backupProgress.hashCode ^
  114. allAssetsInDatabase.hashCode ^
  115. progressInPercentage.hashCode ^
  116. cancelToken.hashCode ^
  117. serverInfo.hashCode ^
  118. backgroundBackup.hashCode ^
  119. backupRequireWifi.hashCode ^
  120. backupRequireCharging.hashCode ^
  121. backupTriggerDelay.hashCode ^
  122. availableAlbums.hashCode ^
  123. selectedBackupAlbums.hashCode ^
  124. excludedBackupAlbums.hashCode ^
  125. allUniqueAssets.hashCode ^
  126. selectedAlbumsBackupAssetsIds.hashCode ^
  127. currentUploadAsset.hashCode;
  128. }
  129. }