diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json
index 27013ccc00..50b33febbf 100644
--- a/open-api/immich-openapi-specs.json
+++ b/open-api/immich-openapi-specs.json
@@ -360,11 +360,11 @@
"x-immich-admin-only": true,
"x-immich-history": [
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Added"
},
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Alpha"
}
],
@@ -405,11 +405,11 @@
"x-immich-admin-only": true,
"x-immich-history": [
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Added"
},
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Alpha"
}
],
@@ -433,11 +433,11 @@
],
"x-immich-history": [
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Added"
},
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Alpha"
}
],
@@ -483,11 +483,11 @@
"x-immich-admin-only": true,
"x-immich-history": [
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Added"
},
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Alpha"
}
],
@@ -541,11 +541,11 @@
"x-immich-admin-only": true,
"x-immich-history": [
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Added"
},
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Alpha"
}
],
@@ -638,11 +638,11 @@
"x-immich-admin-only": true,
"x-immich-history": [
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Added"
},
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Alpha"
}
],
@@ -717,11 +717,11 @@
],
"x-immich-history": [
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Added"
},
{
- "version": "v2.4.0",
+ "version": "v2.5.0",
"state": "Alpha"
}
],
diff --git a/web/src/lib/components/maintenance/MaintenanceBackupsList.svelte b/web/src/lib/components/maintenance/MaintenanceBackupsList.svelte
index 6d62fbd6c6..30a56fac62 100644
--- a/web/src/lib/components/maintenance/MaintenanceBackupsList.svelte
+++ b/web/src/lib/components/maintenance/MaintenanceBackupsList.svelte
@@ -1,7 +1,7 @@
+
+
{#if uploadProgress === -1}
{$t('admin.maintenance_upload_backup')}
-
+
{:else}
diff --git a/web/src/lib/components/maintenance/MaintenanceRestoreFlow.svelte b/web/src/lib/components/maintenance/MaintenanceRestoreFlow.svelte
index 5e767aff35..38c0aef9f9 100644
--- a/web/src/lib/components/maintenance/MaintenanceRestoreFlow.svelte
+++ b/web/src/lib/components/maintenance/MaintenanceRestoreFlow.svelte
@@ -19,7 +19,7 @@
detectedInstall = await detectPriorInstall();
}
- onMount(reload);
+ onMount(() => void reload());
{#if stage === 0}
diff --git a/web/src/lib/managers/event-manager.svelte.ts b/web/src/lib/managers/event-manager.svelte.ts
index 6038c3c3f0..75861add66 100644
--- a/web/src/lib/managers/event-manager.svelte.ts
+++ b/web/src/lib/managers/event-manager.svelte.ts
@@ -29,6 +29,9 @@ export type Events = {
AlbumUpdate: [AlbumResponseDto];
AlbumDelete: [AlbumResponseDto];
+ BackupDelete: [{ filename: string; isDeleting: boolean; isDeleted: boolean }];
+ BackupUpload: [{ progress: number; isComplete: boolean }];
+
QueueUpdate: [QueueResponseDto];
SharedLinkCreate: [SharedLinkResponseDto];
diff --git a/web/src/lib/services/database-backups.service.ts b/web/src/lib/services/database-backups.service.ts
index 540d532e92..1a9a9f126a 100644
--- a/web/src/lib/services/database-backups.service.ts
+++ b/web/src/lib/services/database-backups.service.ts
@@ -1,3 +1,4 @@
+import { eventManager } from '$lib/managers/event-manager.svelte';
import { uploadRequest } from '$lib/utils';
import { openFilePicker } from '$lib/utils/file-uploader';
import { handleError } from '$lib/utils/handle-error';
@@ -13,7 +14,7 @@ import { modalManager, type ActionItem } from '@immich/ui';
import { mdiDownload, mdiTrashCanOutline } from '@mdi/js';
import type { MessageFormatter } from 'svelte-i18n';
-export const getDatabaseBackupActions = ($t: MessageFormatter, filename: string, remove: () => void) => {
+export const getDatabaseBackupActions = ($t: MessageFormatter, filename: string) => {
const Download: ActionItem = {
title: $t('download'),
icon: mdiDownload,
@@ -26,7 +27,9 @@ export const getDatabaseBackupActions = ($t: MessageFormatter, filename: string,
title: $t('delete'),
icon: mdiTrashCanOutline,
color: 'danger',
- onAction: remove,
+ onAction() {
+ void handleDeleteDatabaseBackup(filename);
+ },
};
return { Download, Delete };
@@ -69,15 +72,25 @@ export const handleDeleteDatabaseBackup = async (...filenames: string[]) => {
}
try {
+ for (const filename of filenames) {
+ eventManager.emit('BackupDelete', { filename, isDeleting: true, isDeleted: false });
+ }
+
await deleteDatabaseBackup({
databaseBackupDeleteDto: {
backups: filenames,
},
});
- return true;
+ for (const filename of filenames) {
+ eventManager.emit('BackupDelete', { filename, isDeleting: false, isDeleted: true });
+ }
} catch (error) {
handleError(error, $t('admin.maintenance_delete_error'));
+
+ for (const filename of filenames) {
+ eventManager.emit('BackupDelete', { filename, isDeleting: false, isDeleted: false });
+ }
}
};
@@ -85,7 +98,7 @@ export const handleDownloadDatabaseBackup = (filename: string) => {
location.href = getBaseUrl() + '/admin/database-backups/' + filename;
};
-export const handleUploadDatabaseBackup = async (progressFn?: (progress: number) => void) => {
+export const handleUploadDatabaseBackup = async () => {
const $t = await getFormatter();
try {
@@ -97,16 +110,14 @@ export const handleUploadDatabaseBackup = async (progressFn?: (progress: number)
url: getBaseUrl() + '/admin/database-backups/upload',
data: formData,
onUploadProgress(event) {
- progressFn?.(event.loaded / event.total);
+ eventManager.emit('BackupUpload', { progress: event.loaded / event.total, isComplete: false });
},
});
- progressFn?.(1);
-
- return true;
+ eventManager.emit('BackupUpload', { progress: 1, isComplete: true });
} catch (error) {
handleError(error, $t('admin.maintenance_upload_backup_error'));
} finally {
- progressFn?.(-1);
+ eventManager.emit('BackupUpload', { progress: -1, isComplete: false });
}
};
diff --git a/web/src/routes/admin/maintenance/+page.svelte b/web/src/routes/admin/maintenance/+page.svelte
index 0e90682f4e..74d09e5a61 100644
--- a/web/src/routes/admin/maintenance/+page.svelte
+++ b/web/src/routes/admin/maintenance/+page.svelte
@@ -19,7 +19,7 @@