Support multiple backup sites for manual app backups

This commit is contained in:
Johannes Zellner
2025-09-23 13:53:01 +02:00
parent 2660f673db
commit da818ff577
2 changed files with 19 additions and 9 deletions
+17 -7
View File
@@ -114,7 +114,8 @@ const taskLogsMenu = ref([]);
const lastTask = ref({});
const startBackupBusy = ref(false);
const stopBackupBusy = ref(false);
let backupSites = [];
const backupSitesMenu = ref([]);
const backupSites = ref([]);
async function onChangeAutoBackups(value) {
const [error] = await appsModel.configure(props.app.id, 'automatic_backup', { enable: value });
@@ -162,10 +163,10 @@ async function refreshTasks() {
if (lastTask.value.active) waitForTask();
}
async function onStartBackup() {
async function onStartBackup(backupSiteId) {
startBackupBusy.value = true;
const [error] = await appsModel.backup(props.app.id);
const [error] = await appsModel.backup(props.app.id, backupSiteId);
if (error) return console.error(error);
await refreshTasks();
@@ -270,7 +271,7 @@ async function refreshBackupList() {
if (error) return console.error(error);
result.forEach(backup => {
backup.site = backupSites.find(t => t.id === backup.siteId);
backup.site = backupSites.value.find(t => t.id === backup.siteId);
});
backups.value = result;
}
@@ -281,7 +282,13 @@ onMounted(async () => {
const [error, result] = await backupSitesModel.list();
if (error) return console.error(error);
backupSites = result;
backupSites.value = result;
backupSitesMenu.value = result.map(site => {
return {
label: site.name,
action: onStartBackup.bind(null, site.id),
};
});
await refreshBackupList();
await refreshTasks();
@@ -414,14 +421,17 @@ onMounted(async () => {
<br/>
<div v-if="lastTask.active">
<ProgressBar :value="lastTask.percent" :busy="true" />
<ProgressBar :value="lastTask.percent" :show-label="false" :busy="true" :mode="lastTask.percent <= 0 ? 'indeterminate' : ''"/>
<div>{{ lastTask.message }}</div>
<br/>
</div>
<div class="button-bar">
<Button danger @click="onStopBackup()" v-if="lastTask.active" :loading="stopBackupBusy" :disabled="stopBackupBusy">{{ $t('backups.listing.stopTask') }}</Button>
<Button @click="onStartBackup()" v-else :loading="startBackupBusy" :disabled="app.runState === RSTATES.STOPPED || startBackupBusy || !!app.error">{{ $t('app.backups.backups.createBackupAction') }}</Button>
<div v-else>
<Button v-if="backupSites.length <= 1" @click="onStartBackup(backupSites[0].id)" :loading="startBackupBusy" :disabled="!backupSites.length || app.runState === RSTATES.STOPPED || startBackupBusy || !!app.error">{{ $t('app.backups.backups.createBackupAction') }}</Button>
<Button v-else :menu="backupSitesMenu" :loading="startBackupBusy" :disabled="app.runState === RSTATES.STOPPED || startBackupBusy || !!app.error">{{ $t('app.backups.backups.createBackupAction') }}</Button>
</div>
</div>
</div>
</template>