feat(mobile): Manual asset upload (#3445)

* fix: exclude albums filter in backup provider

* refactor: Separate builder methods for Top Control App Bar buttons

* fix: Show download button only for Remote only assets

* fix(mobile): Force Refresh duration is too low to trigger it consistently

* feat(mobile): Make Buttons dynamic in Home Selection DraggableScrollableSheet

* feat(mobile): Manual Asset upload

* refactor(mobile): Replace _showToast with ImmichToast calls

* refactor(mobile): home_page selectionAssetState handling

* chore(mobile): min and initial size of DraggableScrollState increased

This is to prevent the buttons in the bottom sheet getting clipped behind the 3 way navigation buttons
in the default density of Android devices

* feat(mobile): notifications for manual upload progress

* wording

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
shalong-tanwen 2023-08-06 02:40:50 +00:00 committed by GitHub
parent f1b92718d5
commit deaf81e2a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 887 additions and 163 deletions

View file

@ -388,7 +388,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
if (state.backupProgress != BackUpProgressEnum.inBackground) {
await _getBackupAlbumsInfo();
await _updateServerInfo();
await updateServerInfo();
await _updateBackupAssetCount();
}
}
@ -465,7 +465,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
_onSetCurrentBackupAsset,
_onBackupError,
);
await _notifyBackgroundServiceCanRun();
await notifyBackgroundServiceCanRun();
} else {
openAppSettings();
}
@ -487,7 +487,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
void cancelBackup() {
if (state.backupProgress != BackUpProgressEnum.inProgress) {
_notifyBackgroundServiceCanRun();
notifyBackgroundServiceCanRun();
}
state.cancelToken.cancel();
state = state.copyWith(
@ -537,7 +537,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
_updatePersistentAlbumsSelection();
}
_updateServerInfo();
updateServerInfo();
}
void _onUploadProgress(int sent, int total) {
@ -546,7 +546,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
);
}
Future<void> _updateServerInfo() async {
Future<void> updateServerInfo() async {
final serverInfo = await _serverInfoService.getServerInfo();
// Update server info
@ -569,9 +569,9 @@ class BackupNotifier extends StateNotifier<BackUpState> {
// Check if this device is enable backup by the user
if (state.autoBackup) {
// check if backup is alreayd in process - then return
// check if backup is already in process - then return
if (state.backupProgress == BackUpProgressEnum.inProgress) {
log.info("[_resumeBackup] Backup is already in progress - abort");
log.info("[_resumeBackup] Auto Backup is already in progress - abort");
return;
}
@ -580,6 +580,11 @@ class BackupNotifier extends StateNotifier<BackUpState> {
return;
}
if (state.backupProgress == BackUpProgressEnum.manualInProgress) {
log.info("[_resumeBackup] Manual upload is running - abort");
return;
}
// Run backup
log.info("[_resumeBackup] Start back up");
await startBackupProcess();
@ -594,7 +599,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
.findAll();
final List<BackupAlbum> excludedBackupAlbums = await _db.backupAlbums
.filter()
.selectionEqualTo(BackupSelection.select)
.selectionEqualTo(BackupSelection.exclude)
.findAll();
Set<AvailableAlbum> selectedAlbums = state.selectedBackupAlbums;
Set<AvailableAlbum> excludedAlbums = state.excludedBackupAlbums;
@ -646,7 +651,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
return result;
}
Future<void> _notifyBackgroundServiceCanRun() async {
Future<void> notifyBackgroundServiceCanRun() async {
const allowedStates = [
AppStateEnum.inactive,
AppStateEnum.paused,
@ -656,6 +661,11 @@ class BackupNotifier extends StateNotifier<BackUpState> {
_backgroundService.releaseLock();
}
}
BackUpProgressEnum get backupProgress => state.backupProgress;
void updateBackupProgress(BackUpProgressEnum backupProgress) {
state = state.copyWith(backupProgress: backupProgress);
}
}
final backupProvider =