Skip to content

Commit 4c1020d

Browse files
authored
Revert "fix: firefox backup download issues (#4679)" (#4683)
This reverts commit c74460f.
1 parent 00f9cf0 commit 4c1020d

File tree

4 files changed

+15
-164
lines changed

4 files changed

+15
-164
lines changed

apps/frontend/src/components/ui/servers/BackupItem.vue

Lines changed: 15 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,14 @@ import {
1313
TrashIcon,
1414
XIcon,
1515
} from '@modrinth/assets'
16-
import {
17-
ButtonStyled,
18-
commonMessages,
19-
injectNotificationManager,
20-
OverflowMenu,
21-
ProgressBar,
22-
} from '@modrinth/ui'
16+
import { ButtonStyled, commonMessages, OverflowMenu, ProgressBar } from '@modrinth/ui'
2317
import type { Backup } from '@modrinth/utils'
2418
import { defineMessages, useVIntl } from '@vintl/vintl'
2519
import dayjs from 'dayjs'
26-
import { computed, ref } from 'vue'
27-
28-
import type { ModrinthServer } from '~/composables/servers/modrinth-servers.ts'
20+
import { computed } from 'vue'
2921
3022
const flags = useFeatureFlags()
3123
const { formatMessage } = useVIntl()
32-
const { addNotification } = injectNotificationManager()
3324
3425
const emit = defineEmits<{
3526
(e: 'download' | 'rename' | 'restore' | 'lock' | 'retry'): void
@@ -42,13 +33,11 @@ const props = withDefaults(
4233
preview?: boolean
4334
kyrosUrl?: string
4435
jwt?: string
45-
server?: ModrinthServer
4636
}>(),
4737
{
4838
preview: false,
4939
kyrosUrl: undefined,
5040
jwt: undefined,
51-
server: undefined,
5241
},
5342
)
5443
@@ -135,48 +124,7 @@ const messages = defineMessages({
135124
id: 'servers.backups.item.retry',
136125
defaultMessage: 'Retry',
137126
},
138-
downloadingBackup: {
139-
id: 'servers.backups.item.downloading-backup',
140-
defaultMessage: 'Downloading backup...',
141-
},
142-
downloading: {
143-
id: 'servers.backups.item.downloading',
144-
defaultMessage: 'Downloading',
145-
},
146127
})
147-
148-
const downloadingState = ref<{ progress: number; state: string } | undefined>(undefined)
149-
150-
const downloading = computed(() => downloadingState.value)
151-
152-
const handleDownload = async () => {
153-
if (!props.server?.backups || downloading.value) {
154-
return
155-
}
156-
157-
downloadingState.value = { progress: 0, state: 'ongoing' }
158-
159-
try {
160-
const download = props.server.backups.downloadBackup(props.backup.id, props.backup.name)
161-
162-
download.onProgress((p) => {
163-
downloadingState.value = { progress: p.progress, state: 'ongoing' }
164-
})
165-
166-
await download.promise
167-
168-
emit('download')
169-
} catch (error) {
170-
console.error('Failed to download backup:', error)
171-
addNotification({
172-
type: 'error',
173-
title: 'Download failed',
174-
text: error instanceof Error ? error.message : 'Failed to download backup',
175-
})
176-
} finally {
177-
downloadingState.value = undefined
178-
}
179-
}
180128
</script>
181129
<template>
182130
<div
@@ -244,15 +192,6 @@ const handleDownload = async () => {
244192
class="max-w-full"
245193
/>
246194
</div>
247-
<div v-else-if="downloading" class="col-span-2 flex flex-col gap-3 text-blue">
248-
{{ formatMessage(messages.downloadingBackup) }}
249-
<ProgressBar
250-
:progress="downloading.progress >= 0 ? downloading.progress : 0"
251-
color="blue"
252-
:waiting="downloading.progress <= 0"
253-
class="max-w-full"
254-
/>
255-
</div>
256195
<template v-else>
257196
<div class="col-span-2">
258197
{{ dayjs(backup.created_at).format('MMMM D, YYYY [at] h:mm A') }}
@@ -284,32 +223,34 @@ const handleDownload = async () => {
284223
</button>
285224
</ButtonStyled>
286225
<template v-else>
287-
<ButtonStyled v-show="!downloading">
288-
<button :disabled="!server?.backups" @click="handleDownload">
226+
<ButtonStyled>
227+
<a
228+
:class="{
229+
disabled: !kyrosUrl || !jwt,
230+
}"
231+
:href="`https://${kyrosUrl}/modrinth/v0/backups/${backup.id}/download?auth=${jwt}`"
232+
@click="() => emit('download')"
233+
>
289234
<DownloadIcon />
290235
{{ formatMessage(commonMessages.downloadButton) }}
291-
</button>
236+
</a>
292237
</ButtonStyled>
293238
<ButtonStyled circular type="transparent">
294239
<OverflowMenu
295240
:options="[
296-
{
297-
id: 'rename',
298-
action: () => emit('rename'),
299-
disabled: !!restoring || !!downloading,
300-
},
241+
{ id: 'rename', action: () => emit('rename') },
301242
{
302243
id: 'restore',
303244
action: () => emit('restore'),
304-
disabled: !!restoring || !!downloading,
245+
disabled: !!restoring,
305246
},
306-
{ id: 'lock', action: () => emit('lock'), disabled: !!restoring || !!downloading },
247+
{ id: 'lock', action: () => emit('lock') },
307248
{ divider: true },
308249
{
309250
id: 'delete',
310251
color: 'red',
311252
action: () => emit('delete'),
312-
disabled: !!restoring || !!downloading,
253+
disabled: !!restoring,
313254
},
314255
]"
315256
>

apps/frontend/src/composables/servers/modules/backups.ts

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -106,87 +106,4 @@ export class BackupsModule extends ServerModule {
106106
async getAutoBackup(): Promise<AutoBackupSettings> {
107107
return await useServersFetch(`servers/${this.serverId}/autobackup`)
108108
}
109-
110-
downloadBackup(
111-
backupId: string,
112-
backupName: string,
113-
): {
114-
promise: Promise<void>
115-
onProgress: (cb: (p: { loaded: number; total: number; progress: number }) => void) => void
116-
cancel: () => void
117-
} {
118-
const progressSubject = new EventTarget()
119-
const abortController = new AbortController()
120-
121-
const downloadPromise = new Promise<void>((resolve, reject) => {
122-
const auth = this.server.general?.node
123-
if (!auth?.instance || !auth?.token) {
124-
reject(new Error('Missing authentication credentials'))
125-
return
126-
}
127-
128-
const xhr = new XMLHttpRequest()
129-
130-
xhr.addEventListener('progress', (e) => {
131-
if (e.lengthComputable) {
132-
const progress = e.loaded / e.total
133-
progressSubject.dispatchEvent(
134-
new CustomEvent('progress', {
135-
detail: { loaded: e.loaded, total: e.total, progress },
136-
}),
137-
)
138-
} else {
139-
// progress = -1 to indicate indeterminate size
140-
progressSubject.dispatchEvent(
141-
new CustomEvent('progress', {
142-
detail: { loaded: e.loaded, total: 0, progress: -1 },
143-
}),
144-
)
145-
}
146-
})
147-
148-
xhr.onload = () => {
149-
if (xhr.status >= 200 && xhr.status < 300) {
150-
try {
151-
const blob = xhr.response
152-
const url = window.URL.createObjectURL(blob)
153-
const a = document.createElement('a')
154-
a.href = url
155-
a.download = `${backupName}.zip`
156-
document.body.appendChild(a)
157-
a.click()
158-
document.body.removeChild(a)
159-
window.URL.revokeObjectURL(url)
160-
resolve()
161-
} catch (error) {
162-
reject(error)
163-
}
164-
} else {
165-
reject(new Error(`Download failed with status ${xhr.status}`))
166-
}
167-
}
168-
169-
xhr.onerror = () => reject(new Error('Download failed'))
170-
xhr.onabort = () => reject(new Error('Download cancelled'))
171-
172-
xhr.open(
173-
'GET',
174-
`https://${auth.instance}/modrinth/v0/backups/${backupId}/download?auth=${auth.token}`,
175-
)
176-
xhr.responseType = 'blob'
177-
xhr.send()
178-
179-
abortController.signal.addEventListener('abort', () => xhr.abort())
180-
})
181-
182-
return {
183-
promise: downloadPromise,
184-
onProgress: (cb: (p: { loaded: number; total: number; progress: number }) => void) => {
185-
progressSubject.addEventListener('progress', ((e: CustomEvent) => {
186-
cb(e.detail)
187-
}) as EventListener)
188-
},
189-
cancel: () => abortController.abort(),
190-
}
191-
}
192109
}

apps/frontend/src/locales/en-US/index.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1934,12 +1934,6 @@
19341934
"servers.backups.item.creating-backup": {
19351935
"message": "Creating backup..."
19361936
},
1937-
"servers.backups.item.downloading": {
1938-
"message": "Downloading"
1939-
},
1940-
"servers.backups.item.downloading-backup": {
1941-
"message": "Downloading backup..."
1942-
},
19431937
"servers.backups.item.failed-to-create-backup": {
19441938
"message": "Failed to create backup"
19451939
},

apps/frontend/src/pages/servers/manage/[id]/backups.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@
105105
v-for="backup in backups"
106106
:key="`backup-${backup.id}`"
107107
:backup="backup"
108-
:server="props.server"
109108
:kyros-url="props.server.general?.node.instance"
110109
:jwt="props.server.general?.node.token"
111110
@download="() => triggerDownloadAnimation()"

0 commit comments

Comments
 (0)