mirror of
https://github.com/immich-app/immich.git
synced 2024-12-29 15:11:58 +00:00
6b6d2a6621
* curating assets with albums to upload * sorting for background backup * background upload works * transform fields string array to javascript array * send json array * generate sql * refactor upload callback * remove albums info from upload payload * mechanism to create album on album selection * album creation * Sync to upload album * Remove unused service * unify name changes * Add mechanism to sync uploaded assets to albums * Put add to album operation after updating the UI state * clean up * background album sync * add to album in background context * remove add to album in callback * refactor * refactor * refactor * fix: make sure all selected albums are selected for building upload candidate * clean up * add manual sync button * lint * revert server changes * pr feedback * revert time filtering * const * sync album on manual upload * linting * pr feedback and proper time filtering * wording
195 lines
8.6 KiB
Dart
195 lines
8.6 KiB
Dart
// ignore_for_file: public_member_api_docs, sort_constructors_first
|
|
|
|
import 'package:cancellation_token_http/http.dart';
|
|
import 'package:collection/collection.dart';
|
|
import 'package:immich_mobile/models/backup/backup_candidate.model.dart';
|
|
|
|
import 'package:immich_mobile/models/backup/available_album.model.dart';
|
|
import 'package:immich_mobile/models/backup/current_upload_asset.model.dart';
|
|
import 'package:immich_mobile/models/server_info/server_disk_info.model.dart';
|
|
|
|
enum BackUpProgressEnum {
|
|
idle,
|
|
inProgress,
|
|
manualInProgress,
|
|
inBackground,
|
|
done
|
|
}
|
|
|
|
class BackUpState {
|
|
// enum
|
|
final BackUpProgressEnum backupProgress;
|
|
final List<String> allAssetsInDatabase;
|
|
final double progressInPercentage;
|
|
final String progressInFileSize;
|
|
final double progressInFileSpeed;
|
|
final List<double> progressInFileSpeeds;
|
|
final DateTime progressInFileSpeedUpdateTime;
|
|
final int progressInFileSpeedUpdateSentBytes;
|
|
final double iCloudDownloadProgress;
|
|
final CancellationToken cancelToken;
|
|
final ServerDiskInfo serverInfo;
|
|
final bool autoBackup;
|
|
final bool backgroundBackup;
|
|
final bool backupRequireWifi;
|
|
final bool backupRequireCharging;
|
|
final int backupTriggerDelay;
|
|
|
|
/// All available albums on the device
|
|
final List<AvailableAlbum> availableAlbums;
|
|
final Set<AvailableAlbum> selectedBackupAlbums;
|
|
final Set<AvailableAlbum> excludedBackupAlbums;
|
|
|
|
/// Assets that are not overlapping in selected backup albums and excluded backup albums
|
|
final Set<BackupCandidate> allUniqueAssets;
|
|
|
|
/// All assets from the selected albums that have been backup
|
|
final Set<String> selectedAlbumsBackupAssetsIds;
|
|
|
|
// Current Backup Asset
|
|
final CurrentUploadAsset currentUploadAsset;
|
|
|
|
const BackUpState({
|
|
required this.backupProgress,
|
|
required this.allAssetsInDatabase,
|
|
required this.progressInPercentage,
|
|
required this.progressInFileSize,
|
|
required this.progressInFileSpeed,
|
|
required this.progressInFileSpeeds,
|
|
required this.progressInFileSpeedUpdateTime,
|
|
required this.progressInFileSpeedUpdateSentBytes,
|
|
required this.iCloudDownloadProgress,
|
|
required this.cancelToken,
|
|
required this.serverInfo,
|
|
required this.autoBackup,
|
|
required this.backgroundBackup,
|
|
required this.backupRequireWifi,
|
|
required this.backupRequireCharging,
|
|
required this.backupTriggerDelay,
|
|
required this.availableAlbums,
|
|
required this.selectedBackupAlbums,
|
|
required this.excludedBackupAlbums,
|
|
required this.allUniqueAssets,
|
|
required this.selectedAlbumsBackupAssetsIds,
|
|
required this.currentUploadAsset,
|
|
});
|
|
|
|
BackUpState copyWith({
|
|
BackUpProgressEnum? backupProgress,
|
|
List<String>? allAssetsInDatabase,
|
|
double? progressInPercentage,
|
|
String? progressInFileSize,
|
|
double? progressInFileSpeed,
|
|
List<double>? progressInFileSpeeds,
|
|
DateTime? progressInFileSpeedUpdateTime,
|
|
int? progressInFileSpeedUpdateSentBytes,
|
|
double? iCloudDownloadProgress,
|
|
CancellationToken? cancelToken,
|
|
ServerDiskInfo? serverInfo,
|
|
bool? autoBackup,
|
|
bool? backgroundBackup,
|
|
bool? backupRequireWifi,
|
|
bool? backupRequireCharging,
|
|
int? backupTriggerDelay,
|
|
List<AvailableAlbum>? availableAlbums,
|
|
Set<AvailableAlbum>? selectedBackupAlbums,
|
|
Set<AvailableAlbum>? excludedBackupAlbums,
|
|
Set<BackupCandidate>? allUniqueAssets,
|
|
Set<String>? selectedAlbumsBackupAssetsIds,
|
|
CurrentUploadAsset? currentUploadAsset,
|
|
}) {
|
|
return BackUpState(
|
|
backupProgress: backupProgress ?? this.backupProgress,
|
|
allAssetsInDatabase: allAssetsInDatabase ?? this.allAssetsInDatabase,
|
|
progressInPercentage: progressInPercentage ?? this.progressInPercentage,
|
|
progressInFileSize: progressInFileSize ?? this.progressInFileSize,
|
|
progressInFileSpeed: progressInFileSpeed ?? this.progressInFileSpeed,
|
|
progressInFileSpeeds: progressInFileSpeeds ?? this.progressInFileSpeeds,
|
|
progressInFileSpeedUpdateTime:
|
|
progressInFileSpeedUpdateTime ?? this.progressInFileSpeedUpdateTime,
|
|
progressInFileSpeedUpdateSentBytes: progressInFileSpeedUpdateSentBytes ??
|
|
this.progressInFileSpeedUpdateSentBytes,
|
|
iCloudDownloadProgress:
|
|
iCloudDownloadProgress ?? this.iCloudDownloadProgress,
|
|
cancelToken: cancelToken ?? this.cancelToken,
|
|
serverInfo: serverInfo ?? this.serverInfo,
|
|
autoBackup: autoBackup ?? this.autoBackup,
|
|
backgroundBackup: backgroundBackup ?? this.backgroundBackup,
|
|
backupRequireWifi: backupRequireWifi ?? this.backupRequireWifi,
|
|
backupRequireCharging:
|
|
backupRequireCharging ?? this.backupRequireCharging,
|
|
backupTriggerDelay: backupTriggerDelay ?? this.backupTriggerDelay,
|
|
availableAlbums: availableAlbums ?? this.availableAlbums,
|
|
selectedBackupAlbums: selectedBackupAlbums ?? this.selectedBackupAlbums,
|
|
excludedBackupAlbums: excludedBackupAlbums ?? this.excludedBackupAlbums,
|
|
allUniqueAssets: allUniqueAssets ?? this.allUniqueAssets,
|
|
selectedAlbumsBackupAssetsIds:
|
|
selectedAlbumsBackupAssetsIds ?? this.selectedAlbumsBackupAssetsIds,
|
|
currentUploadAsset: currentUploadAsset ?? this.currentUploadAsset,
|
|
);
|
|
}
|
|
|
|
@override
|
|
String toString() {
|
|
return 'BackUpState(backupProgress: $backupProgress, allAssetsInDatabase: $allAssetsInDatabase, progressInPercentage: $progressInPercentage, progressInFileSize: $progressInFileSize, progressInFileSpeed: $progressInFileSpeed, progressInFileSpeeds: $progressInFileSpeeds, progressInFileSpeedUpdateTime: $progressInFileSpeedUpdateTime, progressInFileSpeedUpdateSentBytes: $progressInFileSpeedUpdateSentBytes, 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)';
|
|
}
|
|
|
|
@override
|
|
bool operator ==(covariant BackUpState other) {
|
|
if (identical(this, other)) return true;
|
|
final collectionEquals = const DeepCollectionEquality().equals;
|
|
|
|
return other.backupProgress == backupProgress &&
|
|
collectionEquals(other.allAssetsInDatabase, allAssetsInDatabase) &&
|
|
other.progressInPercentage == progressInPercentage &&
|
|
other.progressInFileSize == progressInFileSize &&
|
|
other.progressInFileSpeed == progressInFileSpeed &&
|
|
collectionEquals(other.progressInFileSpeeds, progressInFileSpeeds) &&
|
|
other.progressInFileSpeedUpdateTime == progressInFileSpeedUpdateTime &&
|
|
other.progressInFileSpeedUpdateSentBytes ==
|
|
progressInFileSpeedUpdateSentBytes &&
|
|
other.iCloudDownloadProgress == iCloudDownloadProgress &&
|
|
other.cancelToken == cancelToken &&
|
|
other.serverInfo == serverInfo &&
|
|
other.autoBackup == autoBackup &&
|
|
other.backgroundBackup == backgroundBackup &&
|
|
other.backupRequireWifi == backupRequireWifi &&
|
|
other.backupRequireCharging == backupRequireCharging &&
|
|
other.backupTriggerDelay == backupTriggerDelay &&
|
|
collectionEquals(other.availableAlbums, availableAlbums) &&
|
|
collectionEquals(other.selectedBackupAlbums, selectedBackupAlbums) &&
|
|
collectionEquals(other.excludedBackupAlbums, excludedBackupAlbums) &&
|
|
collectionEquals(other.allUniqueAssets, allUniqueAssets) &&
|
|
collectionEquals(
|
|
other.selectedAlbumsBackupAssetsIds,
|
|
selectedAlbumsBackupAssetsIds,
|
|
) &&
|
|
other.currentUploadAsset == currentUploadAsset;
|
|
}
|
|
|
|
@override
|
|
int get hashCode {
|
|
return backupProgress.hashCode ^
|
|
allAssetsInDatabase.hashCode ^
|
|
progressInPercentage.hashCode ^
|
|
progressInFileSize.hashCode ^
|
|
progressInFileSpeed.hashCode ^
|
|
progressInFileSpeeds.hashCode ^
|
|
progressInFileSpeedUpdateTime.hashCode ^
|
|
progressInFileSpeedUpdateSentBytes.hashCode ^
|
|
iCloudDownloadProgress.hashCode ^
|
|
cancelToken.hashCode ^
|
|
serverInfo.hashCode ^
|
|
autoBackup.hashCode ^
|
|
backgroundBackup.hashCode ^
|
|
backupRequireWifi.hashCode ^
|
|
backupRequireCharging.hashCode ^
|
|
backupTriggerDelay.hashCode ^
|
|
availableAlbums.hashCode ^
|
|
selectedBackupAlbums.hashCode ^
|
|
excludedBackupAlbums.hashCode ^
|
|
allUniqueAssets.hashCode ^
|
|
selectedAlbumsBackupAssetsIds.hashCode ^
|
|
currentUploadAsset.hashCode;
|
|
}
|
|
}
|