Remove "prepare backup" step (#4551)

* Remove "prepare backup" step

* fix post-approval.ts
This commit is contained in:
Prospector
2025-10-14 15:35:50 -07:00
committed by GitHub
parent 4cd8ccd319
commit 03ed64c99f
6 changed files with 8 additions and 111 deletions

View File

@@ -17,13 +17,13 @@ import { ButtonStyled, commonMessages, OverflowMenu, ProgressBar } from '@modrin
import type { Backup } from '@modrinth/utils' import type { Backup } from '@modrinth/utils'
import { defineMessages, useVIntl } from '@vintl/vintl' import { defineMessages, useVIntl } from '@vintl/vintl'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { computed, ref } from 'vue' import { computed } from 'vue'
const flags = useFeatureFlags() const flags = useFeatureFlags()
const { formatMessage } = useVIntl() const { formatMessage } = useVIntl()
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'prepare' | 'download' | 'rename' | 'restore' | 'lock' | 'retry'): void (e: 'download' | 'rename' | 'restore' | 'lock' | 'retry'): void
(e: 'delete', skipConfirmation?: boolean): void (e: 'delete', skipConfirmation?: boolean): void
}>() }>()
@@ -49,14 +49,8 @@ const backupQueued = computed(
const automated = computed(() => props.backup.automated) const automated = computed(() => props.backup.automated)
const failedToCreate = computed(() => props.backup.interrupted) const failedToCreate = computed(() => props.backup.interrupted)
const preparedDownloadStates = ['ready', 'done']
const inactiveStates = ['failed', 'cancelled'] const inactiveStates = ['failed', 'cancelled']
const hasPreparedDownload = computed(() => {
const fileState = props.backup.task?.file?.state ?? ''
return preparedDownloadStates.includes(fileState)
})
const creating = computed(() => { const creating = computed(() => {
const task = props.backup.task?.create const task = props.backup.task?.create
if (task && task.progress < 1 && !inactiveStates.includes(task.state)) { if (task && task.progress < 1 && !inactiveStates.includes(task.state)) {
@@ -79,22 +73,7 @@ const restoring = computed(() => {
return undefined return undefined
}) })
const initiatedPrepare = ref(false)
const preparingFile = computed(() => {
if (hasPreparedDownload.value) {
return false
}
const task = props.backup.task?.file
return (
(!task && initiatedPrepare.value) ||
(task && task.progress < 1 && !inactiveStates.includes(task.state))
)
})
const failedToRestore = computed(() => props.backup.task?.restore?.state === 'failed') const failedToRestore = computed(() => props.backup.task?.restore?.state === 'failed')
const failedToPrepareFile = computed(() => props.backup.task?.file?.state === 'failed')
const messages = defineMessages({ const messages = defineMessages({
locked: { locked: {
@@ -121,22 +100,6 @@ const messages = defineMessages({
id: 'servers.backups.item.queued-for-backup', id: 'servers.backups.item.queued-for-backup',
defaultMessage: 'Queued for backup', defaultMessage: 'Queued for backup',
}, },
preparingDownload: {
id: 'servers.backups.item.preparing-download',
defaultMessage: 'Preparing download...',
},
prepareDownload: {
id: 'servers.backups.item.prepare-download',
defaultMessage: 'Prepare download',
},
prepareDownloadAgain: {
id: 'servers.backups.item.prepare-download-again',
defaultMessage: 'Try preparing again',
},
alreadyPreparing: {
id: 'servers.backups.item.already-preparing',
defaultMessage: 'Already preparing backup for download',
},
creatingBackup: { creatingBackup: {
id: 'servers.backups.item.creating-backup', id: 'servers.backups.item.creating-backup',
defaultMessage: 'Creating backup...', defaultMessage: 'Creating backup...',
@@ -153,10 +116,6 @@ const messages = defineMessages({
id: 'servers.backups.item.failed-to-restore-backup', id: 'servers.backups.item.failed-to-restore-backup',
defaultMessage: 'Failed to restore from backup', defaultMessage: 'Failed to restore from backup',
}, },
failedToPrepareFile: {
id: 'servers.backups.item.failed-to-prepare-backup',
defaultMessage: 'Failed to prepare download',
},
automated: { automated: {
id: 'servers.backups.item.automated', id: 'servers.backups.item.automated',
defaultMessage: 'Automated', defaultMessage: 'Automated',
@@ -200,17 +159,13 @@ const messages = defineMessages({
</span> </span>
<span v-if="(failedToCreate || failedToRestore) && (automated || backup.locked)"></span> <span v-if="(failedToCreate || failedToRestore) && (automated || backup.locked)"></span>
<span <span
v-if="failedToCreate || failedToRestore || failedToPrepareFile" v-if="failedToCreate || failedToRestore"
class="flex items-center gap-1 text-sm text-red" class="flex items-center gap-1 text-sm text-red"
> >
<XIcon /> <XIcon />
{{ {{
formatMessage( formatMessage(
failedToCreate failedToCreate ? messages.failedToCreateBackup : messages.failedToRestoreBackup,
? messages.failedToCreateBackup
: failedToRestore
? messages.failedToRestoreBackup
: messages.failedToPrepareFile,
) )
}} }}
</span> </span>
@@ -270,7 +225,6 @@ const messages = defineMessages({
<template v-else> <template v-else>
<ButtonStyled> <ButtonStyled>
<a <a
v-if="hasPreparedDownload"
:class="{ :class="{
disabled: !kyrosUrl || !jwt, disabled: !kyrosUrl || !jwt,
}" }"
@@ -280,28 +234,6 @@ const messages = defineMessages({
<DownloadIcon /> <DownloadIcon />
{{ formatMessage(commonMessages.downloadButton) }} {{ formatMessage(commonMessages.downloadButton) }}
</a> </a>
<button
v-else
:disabled="!!preparingFile"
@click="
() => {
initiatedPrepare = true
emit('prepare')
}
"
>
<SpinnerIcon v-if="preparingFile" class="animate-spin" />
<DownloadIcon v-else />
{{
formatMessage(
preparingFile
? messages.preparingDownload
: failedToPrepareFile
? messages.prepareDownloadAgain
: messages.prepareDownload,
)
}}
</button>
</ButtonStyled> </ButtonStyled>
<ButtonStyled circular type="transparent"> <ButtonStyled circular type="transparent">
<OverflowMenu <OverflowMenu
@@ -310,7 +242,7 @@ const messages = defineMessages({
{ {
id: 'restore', id: 'restore',
action: () => emit('restore'), action: () => emit('restore'),
disabled: !!restoring || !!preparingFile, disabled: !!restoring,
}, },
{ id: 'lock', action: () => emit('lock') }, { id: 'lock', action: () => emit('lock') },
{ divider: true }, { divider: true },
@@ -318,7 +250,7 @@ const messages = defineMessages({
id: 'delete', id: 'delete',
color: 'red', color: 'red',
action: () => emit('delete'), action: () => emit('delete'),
disabled: !!restoring || !!preparingFile, disabled: !!restoring,
}, },
]" ]"
> >

View File

@@ -41,12 +41,6 @@ export class BackupsModule extends ServerModule {
await this.fetch() // Refresh this module await this.fetch() // Refresh this module
} }
async prepare(backupId: string): Promise<void> {
await useServersFetch(`servers/${this.serverId}/backups/${backupId}/prepare-download`, {
method: 'POST',
})
}
async lock(backupId: string): Promise<void> { async lock(backupId: string): Promise<void> {
await useServersFetch(`servers/${this.serverId}/backups/${backupId}/lock`, { await useServersFetch(`servers/${this.serverId}/backups/${backupId}/lock`, {
method: 'POST', method: 'POST',

View File

@@ -1877,9 +1877,6 @@
"servers.backup.restore.in-progress.tooltip": { "servers.backup.restore.in-progress.tooltip": {
"message": "Backup restore in progress" "message": "Backup restore in progress"
}, },
"servers.backups.item.already-preparing": {
"message": "Already preparing backup for download"
},
"servers.backups.item.automated": { "servers.backups.item.automated": {
"message": "Automated" "message": "Automated"
}, },
@@ -1889,9 +1886,6 @@
"servers.backups.item.failed-to-create-backup": { "servers.backups.item.failed-to-create-backup": {
"message": "Failed to create backup" "message": "Failed to create backup"
}, },
"servers.backups.item.failed-to-prepare-backup": {
"message": "Failed to prepare download"
},
"servers.backups.item.failed-to-restore-backup": { "servers.backups.item.failed-to-restore-backup": {
"message": "Failed to restore from backup" "message": "Failed to restore from backup"
}, },
@@ -1901,15 +1895,6 @@
"servers.backups.item.locked": { "servers.backups.item.locked": {
"message": "Locked" "message": "Locked"
}, },
"servers.backups.item.prepare-download": {
"message": "Prepare download"
},
"servers.backups.item.prepare-download-again": {
"message": "Try preparing again"
},
"servers.backups.item.preparing-download": {
"message": "Preparing download..."
},
"servers.backups.item.queued-for-backup": { "servers.backups.item.queued-for-backup": {
"message": "Queued for backup" "message": "Queued for backup"
}, },

View File

@@ -107,7 +107,6 @@
:backup="backup" :backup="backup"
:kyros-url="props.server.general?.node.instance" :kyros-url="props.server.general?.node.instance"
:jwt="props.server.general?.node.token" :jwt="props.server.general?.node.token"
@prepare="() => prepareDownload(backup.id)"
@download="() => triggerDownloadAnimation()" @download="() => triggerDownloadAnimation()"
@rename="() => renameBackupModal?.show(backup)" @rename="() => renameBackupModal?.show(backup)"
@restore="() => restoreBackupModal?.show(backup)" @restore="() => restoreBackupModal?.show(backup)"
@@ -233,19 +232,6 @@ function triggerDownloadAnimation() {
setTimeout(() => (overTheTopDownloadAnimation.value = false), 500) setTimeout(() => (overTheTopDownloadAnimation.value = false), 500)
} }
const prepareDownload = async (backupId: string) => {
try {
await props.server.backups?.prepare(backupId)
} catch (error) {
console.error('Failed to prepare download:', error)
addNotification({
type: 'error',
title: 'Failed to prepare backup for download',
text: error as string,
})
}
}
const lockBackup = async (backupId: string) => { const lockBackup = async (backupId: string) => {
try { try {
await props.server.backups?.lock(backupId) await props.server.backups?.lock(backupId)

View File

@@ -54,7 +54,7 @@ const postApproval: Stage = {
weight: 1, weight: 1,
severity: 'low', severity: 'low',
message: async () => message: async () =>
(await import('../messages/misc-metadata/dependancies.md?raw')).default, (await import('../messages/misc-metadata/dependencies.md?raw')).default,
relevantExtraInput: [ relevantExtraInput: [
{ {
label: 'Dependency Name', label: 'Dependency Name',

View File

@@ -59,7 +59,7 @@ export interface WSNewModEvent {
event: 'new-mod' event: 'new-mod'
} }
export type WSBackupTask = 'file' | 'create' | 'restore' export type WSBackupTask = 'create' | 'restore'
export type WSBackupState = 'ongoing' | 'done' | 'failed' | 'cancelled' | 'unchanged' export type WSBackupState = 'ongoing' | 'done' | 'failed' | 'cancelled' | 'unchanged'
export interface WSBackupProgressEvent { export interface WSBackupProgressEvent {