backup_state.model.dart 6.6 KB

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