mirror of
https://github.com/immich-app/immich.git
synced 2026-06-06 14:55:17 -04:00
refactor: begin moving code into web//services
This commit is contained in:
@@ -1,16 +1,10 @@
|
||||
<script lang="ts">
|
||||
import { handleDeleteDatabaseBackup, handleRestoreDatabaseBackup } from '$lib/services/database-backups.service';
|
||||
import { locale } from '$lib/stores/preferences.store';
|
||||
import { uploadRequest } from '$lib/utils';
|
||||
import { openFilePicker } from '$lib/utils/file-uploader';
|
||||
import { handleError } from '$lib/utils/handle-error';
|
||||
import {
|
||||
deleteDatabaseBackup,
|
||||
getBaseUrl,
|
||||
listDatabaseBackups,
|
||||
MaintenanceAction,
|
||||
setMaintenanceMode,
|
||||
type DatabaseBackupUploadDto,
|
||||
} from '@immich/sdk';
|
||||
import { getBaseUrl, listDatabaseBackups, type DatabaseBackupUploadDto } from '@immich/sdk';
|
||||
import {
|
||||
Button,
|
||||
Card,
|
||||
@@ -18,7 +12,6 @@
|
||||
HStack,
|
||||
IconButton,
|
||||
menuManager,
|
||||
modalManager,
|
||||
ProgressBar,
|
||||
Stack,
|
||||
Text,
|
||||
@@ -61,51 +54,14 @@
|
||||
}
|
||||
});
|
||||
|
||||
async function restore(filename: string) {
|
||||
const confirm = await modalManager.showDialog({
|
||||
confirmText: $t('restore'),
|
||||
title: $t('admin.maintenance_restore_backup'),
|
||||
prompt: $t('admin.maintenance_restore_backup_description'),
|
||||
});
|
||||
|
||||
if (confirm) {
|
||||
try {
|
||||
await setMaintenanceMode({
|
||||
setMaintenanceModeDto: {
|
||||
action: MaintenanceAction.RestoreDatabase,
|
||||
restoreBackupFilename: filename,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
handleError(error, $t('admin.maintenance_start_error'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function remove(filename: string) {
|
||||
const confirm = await modalManager.showDialog({
|
||||
confirmText: $t('delete'),
|
||||
title: $t('admin.maintenance_delete_backup'),
|
||||
prompt: $t('admin.maintenance_delete_backup_description'),
|
||||
});
|
||||
deleting.add(filename);
|
||||
|
||||
if (confirm) {
|
||||
try {
|
||||
deleting.add(filename);
|
||||
|
||||
await deleteDatabaseBackup({
|
||||
databaseBackupDeleteDto: {
|
||||
backups: [filename],
|
||||
},
|
||||
});
|
||||
|
||||
backups = backups.filter((backup) => backup.filename !== filename);
|
||||
} catch (error) {
|
||||
handleError(error, $t('admin.maintenance_delete_error'));
|
||||
} finally {
|
||||
deleting.delete(filename);
|
||||
}
|
||||
if (await handleDeleteDatabaseBackup(filename)) {
|
||||
backups = backups.filter((backup) => backup.filename !== filename);
|
||||
}
|
||||
|
||||
deleting.delete(filename);
|
||||
}
|
||||
|
||||
function download(filename: string) {
|
||||
@@ -191,8 +147,10 @@
|
||||
{/if}
|
||||
</Stack>
|
||||
|
||||
<Button size="small" disabled={deleting.has(backup.filename)} onclick={() => restore(backup.filename)}
|
||||
>{$t('restore')}</Button
|
||||
<Button
|
||||
size="small"
|
||||
disabled={deleting.has(backup.filename)}
|
||||
onclick={() => handleRestoreDatabaseBackup(backup.filename)}>{$t('restore')}</Button
|
||||
>
|
||||
|
||||
<IconButton
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import { handleError } from '$lib/utils/handle-error';
|
||||
import { getFormatter } from '$lib/utils/i18n';
|
||||
import { deleteDatabaseBackup, MaintenanceAction, setMaintenanceMode } from '@immich/sdk';
|
||||
import { modalManager } from '@immich/ui';
|
||||
|
||||
export const handleRestoreDatabaseBackup = async (filename: string) => {
|
||||
const $t = await getFormatter();
|
||||
const confirm = await modalManager.showDialog({
|
||||
confirmText: $t('restore'),
|
||||
title: $t('admin.maintenance_restore_backup'),
|
||||
prompt: $t('admin.maintenance_restore_backup_description'),
|
||||
});
|
||||
|
||||
if (!confirm) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await setMaintenanceMode({
|
||||
setMaintenanceModeDto: {
|
||||
action: MaintenanceAction.RestoreDatabase,
|
||||
restoreBackupFilename: filename,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
handleError(error, $t('admin.maintenance_start_error'));
|
||||
}
|
||||
};
|
||||
|
||||
export const handleDeleteDatabaseBackup = async (...filenames: string[]) => {
|
||||
const $t = await getFormatter();
|
||||
const confirm = await modalManager.showDialog({
|
||||
confirmText: $t('delete'),
|
||||
title: $t('admin.maintenance_delete_backup'),
|
||||
prompt: $t('admin.maintenance_delete_backup_description'),
|
||||
});
|
||||
|
||||
if (!confirm) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await deleteDatabaseBackup({
|
||||
databaseBackupDeleteDto: {
|
||||
backups: filenames,
|
||||
},
|
||||
});
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
handleError(error, $t('admin.maintenance_delete_error'));
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
import { handleError } from '$lib/utils/handle-error';
|
||||
import { getFormatter } from '$lib/utils/i18n';
|
||||
import { MaintenanceAction, setMaintenanceMode, type SetMaintenanceModeDto } from '@immich/sdk';
|
||||
import type { ActionItem } from '@immich/ui';
|
||||
import { mdiProgressWrench } from '@mdi/js';
|
||||
import type { MessageFormatter } from 'svelte-i18n';
|
||||
|
||||
export const getMaintenanceAdminActions = ($t: MessageFormatter) => {
|
||||
const StartMaintenance: ActionItem = {
|
||||
title: $t('admin.maintenance_start'),
|
||||
onAction: () =>
|
||||
handleSetMaintenanceMode({
|
||||
action: MaintenanceAction.Start,
|
||||
}),
|
||||
icon: mdiProgressWrench,
|
||||
};
|
||||
|
||||
return { StartMaintenance };
|
||||
};
|
||||
|
||||
export const handleSetMaintenanceMode = async (dto: SetMaintenanceModeDto) => {
|
||||
const $t = await getFormatter();
|
||||
|
||||
try {
|
||||
await setMaintenanceMode({
|
||||
setMaintenanceModeDto: dto,
|
||||
});
|
||||
} catch (error) {
|
||||
handleError(error, $t('admin.maintenance_start_error'));
|
||||
}
|
||||
};
|
||||
@@ -4,9 +4,8 @@
|
||||
import SettingAccordionState from '$lib/components/shared-components/settings/setting-accordion-state.svelte';
|
||||
import SettingAccordion from '$lib/components/shared-components/settings/setting-accordion.svelte';
|
||||
import { QueryParameter } from '$lib/constants';
|
||||
import { handleError } from '$lib/utils/handle-error';
|
||||
import { MaintenanceAction, setMaintenanceMode } from '@immich/sdk';
|
||||
import { mdiProgressWrench, mdiRefresh } from '@mdi/js';
|
||||
import { getMaintenanceAdminActions } from '$lib/services/maintenance.service';
|
||||
import { mdiRefresh } from '@mdi/js';
|
||||
import { t } from 'svelte-i18n';
|
||||
import type { PageData } from './$types';
|
||||
|
||||
@@ -14,31 +13,11 @@
|
||||
data: PageData;
|
||||
};
|
||||
|
||||
let { data }: Props = $props();
|
||||
|
||||
async function switchToMaintenance() {
|
||||
try {
|
||||
await setMaintenanceMode({
|
||||
setMaintenanceModeDto: {
|
||||
action: MaintenanceAction.Start,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
handleError(error, $t('admin.maintenance_start_error'));
|
||||
}
|
||||
}
|
||||
const { data }: Props = $props();
|
||||
const { StartMaintenance } = $derived(getMaintenanceAdminActions($t));
|
||||
</script>
|
||||
|
||||
<AdminPageLayout
|
||||
breadcrumbs={[{ title: data.meta.title }]}
|
||||
actions={[
|
||||
{
|
||||
title: $t('admin.maintenance_start'),
|
||||
onAction: switchToMaintenance,
|
||||
icon: mdiProgressWrench,
|
||||
},
|
||||
]}
|
||||
>
|
||||
<AdminPageLayout breadcrumbs={[{ title: data.meta.title }]} actions={[StartMaintenance]}>
|
||||
<section id="setting-content" class="flex place-content-center sm:mx-4">
|
||||
<section class="w-full pb-28 sm:w-5/6 md:w-[850px]">
|
||||
<SettingAccordionState queryParam={QueryParameter.IS_OPEN}>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
import AuthPageLayout from '$lib/components/layouts/AuthPageLayout.svelte';
|
||||
import MaintenanceRestoreFlow from '$lib/components/maintenance/MaintenanceRestoreFlow.svelte';
|
||||
import FormatMessage from '$lib/elements/FormatMessage.svelte';
|
||||
import { handleSetMaintenanceMode } from '$lib/services/maintenance.service';
|
||||
import { maintenanceStore } from '$lib/stores/maintenance.store';
|
||||
import { handleError } from '$lib/utils/handle-error';
|
||||
import { MaintenanceAction, setMaintenanceMode } from '@immich/sdk';
|
||||
import { MaintenanceAction } from '@immich/sdk';
|
||||
import { Button, Heading, Link, ProgressBar, Scrollable, Text } from '@immich/ui';
|
||||
import { t } from 'svelte-i18n';
|
||||
|
||||
@@ -17,17 +17,10 @@
|
||||
history.replaceState({}, document.title, url);
|
||||
}
|
||||
|
||||
async function end() {
|
||||
try {
|
||||
await setMaintenanceMode({
|
||||
setMaintenanceModeDto: {
|
||||
action: MaintenanceAction.End,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
handleError(error, $t('maintenance_end_error'));
|
||||
}
|
||||
}
|
||||
const end = () =>
|
||||
handleSetMaintenanceMode({
|
||||
action: MaintenanceAction.End,
|
||||
});
|
||||
|
||||
let error = $derived(
|
||||
$status?.error
|
||||
|
||||
Reference in New Issue
Block a user