CI and images / lint (push) Successful in 2s
CI and images / extension-version (push) Successful in 2s
CI and images / extension-test (push) Successful in 21s
CI and images / frontend-build (push) Successful in 21s
CI and images / backend-lint-and-test (push) Successful in 45s
CI and images / integration (push) Successful in 2m31s
CI and images / sign-extension (push) Successful in 2s
CI and images / build-agent (push) Successful in 4s
CI and images / build-web (push) Successful in 2m1s
CI and images / smoke-web (push) Successful in 49s
CI and images / promote (push) Successful in 1s
CI and images / refresh-dev (push) Skipped
CI and images / unattended-failure (push) Skipped
Most archive attachments never had their images imported. The re-extract action skipped archives without a post, and nothing kept game builds out of an extraction. - An archive holding executables, libraries, or game-engine data (Ren'Py, Unity, Godot, RPG Maker, Python builds) is kept as an attachment and not extracted. The same holds for one nested inside an art pack. - Re-extract now reaches archives imported from a folder without a post. Their images go to the artist, in a folder named after the archive. - Re-extract passes over archives whose members are already recorded. - Re-extract stages each archive by symlink instead of copying it. - The card says what the action does now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
48 lines
1.5 KiB
Vue
48 lines
1.5 KiB
Vue
<template>
|
|
<MaintenanceTile
|
|
icon="mdi-folder-zip-outline"
|
|
title="Re-extract archives"
|
|
blurb="Import the images inside archive attachments that were never extracted."
|
|
:open="busy"
|
|
>
|
|
<p class="text-body-2 mb-3">
|
|
Goes through every stored zip, rar and 7z, including ones imported from
|
|
a folder without a post, and imports the images inside. Archives already
|
|
extracted are passed over, and game or app builds stay whole. Safe to
|
|
run again.
|
|
</p>
|
|
<v-btn color="primary" rounded="pill" :loading="busy" @click="run">
|
|
<v-icon start>mdi-folder-zip-outline</v-icon> Re-extract archives now
|
|
</v-btn>
|
|
<span v-if="queued" class="ml-3 text-caption text-success">Queued ✓</span>
|
|
<QueueStatusBar queue="maintenance_long" queue-label="Long maintenance" />
|
|
</MaintenanceTile>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref } from 'vue'
|
|
|
|
import { useApi } from '../../composables/useApi.js'
|
|
import { toast } from '../../utils/toast.js'
|
|
import MaintenanceTile from '../common/MaintenanceTile.vue'
|
|
import QueueStatusBar from './QueueStatusBar.vue'
|
|
|
|
const api = useApi()
|
|
const busy = ref(false)
|
|
const queued = ref(false)
|
|
|
|
async function run () {
|
|
busy.value = true
|
|
queued.value = false
|
|
try {
|
|
await api.post('/api/admin/maintenance/reextract-archives')
|
|
queued.value = true
|
|
toast({ text: 'Archive re-extract queued', type: 'success' })
|
|
} catch (e) {
|
|
toast({ text: e?.body?.detail || e?.message || 'Failed to queue', type: 'error' })
|
|
} finally {
|
|
busy.value = false
|
|
}
|
|
}
|
|
</script>
|