This commit is contained in:
Linrador 2026-04-07 12:16:26 +02:00
parent 144a8492d7
commit fbe9f306a3
3 changed files with 46 additions and 35 deletions

View File

@ -6,7 +6,6 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
@ -335,10 +334,6 @@ func runRegenerateAssetsJob(job *regenerateAssetsJob) {
failJob := func(queue, phase, msg string) { failJob := func(queue, phase, msg string) {
msg = strings.TrimSpace(msg) msg = strings.TrimSpace(msg)
if msg != "" {
fmt.Printf("❌ regenerate-assets error file=%s queue=%s phase=%s error=%s\n", file, queue, phase, msg)
}
if queue != "" && phase != "" { if queue != "" && phase != "" {
publishFinishedPostworkPhase(file, id, queue, phase, "error", "Fehler", msg) publishFinishedPostworkPhase(file, id, queue, phase, "error", "Fehler", msg)
} }

View File

@ -2102,7 +2102,7 @@ export default function App() {
if (alreadyRunning) return true if (alreadyRunning) return true
// ✅ Nur Auto-/Silent-Starts: Chaturbate ggf. in Warteschlange statt Sofortstart // ✅ Nur Auto-/Silent-Starts: Chaturbate ggf. in Warteschlange statt Sofortstart
if (silent && provider === 'chaturbate' && recSettingsRef.current.useChaturbateApi) { if (provider === 'chaturbate' && recSettingsRef.current.useChaturbateApi) {
try { try {
const parsed = await apiJSON<ParsedModel>('/api/models/parse', { const parsed = await apiJSON<ParsedModel>('/api/models/parse', {
method: 'POST', method: 'POST',
@ -2712,10 +2712,7 @@ export default function App() {
}, [playerJob, modelsByKey]) }, [playerJob, modelsByKey])
async function onStart() { async function onStart() {
const ok = enqueueStart({ const ok = await startUrl(sourceUrl, { silent: false })
url: sourceUrl,
silent: false,
})
if (ok) { if (ok) {
setSourceUrl('') setSourceUrl('')

View File

@ -245,7 +245,13 @@ export default function RecorderSettings({ onAssetsGenerated }: Props) {
assetsError.toLowerCase() === 'cancelled' || assetsError.toLowerCase() === 'cancelled' ||
assetsError.toLowerCase() === 'canceled' assetsError.toLowerCase() === 'canceled'
setAssetsTask((t) => ({ setAssetsTask((t) => {
// Wenn schon idle oder bereits am Ausfaden: nicht wieder "sichtbar reaktivieren"
if (cancelled && (t.status === 'idle' || t.fading)) {
return t
}
const next: TaskItem = {
...t, ...t,
status: cancelled ? 'cancelled' : 'error', status: cancelled ? 'cancelled' : 'error',
title: 'Assets generieren', title: 'Assets generieren',
@ -254,8 +260,11 @@ export default function RecorderSettings({ onAssetsGenerated }: Props) {
total: Number(assets.total ?? 0), total: Number(assets.total ?? 0),
err: cancelled ? undefined : assetsError, err: cancelled ? undefined : assetsError,
cancellable: false, cancellable: false,
fading: false, fading: t.fading ?? false,
})) }
return next
})
} else if (assets?.text || assets?.finishedAt) { } else if (assets?.text || assets?.finishedAt) {
setAssetsTask((t) => ({ setAssetsTask((t) => ({
...t, ...t,
@ -721,7 +730,17 @@ export default function RecorderSettings({ onAssetsGenerated }: Props) {
assetsAbortRef.current = null assetsAbortRef.current = null
// UI sofort // UI sofort
setAssetsTask((t: TaskItem) => ({ ...t, status: 'cancelled', text: 'Abgebrochen.' })) setAssetsTask((t: TaskItem) => ({
...t,
status: 'cancelled',
title: 'Assets generieren',
text: 'Abgebrochen.',
err: undefined,
cancellable: false,
fading: false,
}))
fadeOutTask(setAssetsTask)
if (ac) { if (ac) {
ac.abort() ac.abort()
@ -734,7 +753,7 @@ export default function RecorderSettings({ onAssetsGenerated }: Props) {
} catch { } catch {
// ignore // ignore
} }
} }
async function cancelRegenerateAssetsTask(file: string) { async function cancelRegenerateAssetsTask(file: string) {
const cleanFile = String(file || '').trim() const cleanFile = String(file || '').trim()