Handle backup task start/stop states

This commit is contained in:
Johannes Zellner
2025-06-11 22:15:11 +02:00
parent 8b91b815ba
commit 2b2123f14d
+21 -3
View File
@@ -127,7 +127,11 @@ async function refreshBackups() {
} }
const startBackupError = ref(''); const startBackupError = ref('');
const startBackupBusy = ref(false);
async function onStartBackup() { async function onStartBackup() {
startBackupBusy.value = true;
const [error] = await backupsModel.create(); const [error] = await backupsModel.create();
if (error) { if (error) {
if (error.status === 409) { if (error.status === 409) {
@@ -139,11 +143,21 @@ async function onStartBackup() {
} }
await refreshTasks(); await refreshTasks();
startBackupBusy.value = false;
} }
const stopBackupBusy = ref(false);
async function onStopBackup() { async function onStopBackup() {
stopBackupBusy.value = true;
const [error] = await tasksModel.stop(lastTask.value.id); const [error] = await tasksModel.stop(lastTask.value.id);
if (error) return console.error(error); if (error) return console.error(error);
await refreshTasks();
stopBackupBusy.value = false;
} }
async function onDownloadConfig(backup) { async function onDownloadConfig(backup) {
@@ -302,15 +316,19 @@ onMounted(async () => {
</template> </template>
</TableView> </TableView>
<br/>
<div v-if="lastTask.active"> <div v-if="lastTask.active">
<ProgressBar :value="lastTask.percent" /> <ProgressBar :value="lastTask.percent" />
<div>{{ lastTask.message }}</div> <div>{{ lastTask.message }}</div>
<br/>
</div> </div>
<div class="button-bar"> <div class="button-bar">
<Button danger @click="onStopBackup()" v-if="lastTask.active">{{ $t('backups.listing.stopTask') }}</Button> <Button danger @click="onStopBackup()" v-if="lastTask.active" :loading="stopBackupBusy" :disabled="stopBackupBusy">{{ $t('backups.listing.stopTask') }}</Button>
<Button @click="onStartBackup()" v-else>{{ $t('backups.listing.backupNow') }}</Button> <Button @click="onStartBackup()" v-else :loading="startBackupBusy" :disabled="startBackupBusy">{{ $t('backups.listing.backupNow') }}</Button>
<div class="error-label" v-if="startBackupError">{{ startBackupError }}</div>
</div> </div>
<div class="text-danger" v-if="startBackupError">{{ startBackupError }}</div>
</Section> </Section>
</template> </template>