0.9.1-2 Metadata Fix

This commit is contained in:
2026-03-14 09:32:13 +00:00
parent 241b097ea9
commit 59bcb54492
9 changed files with 57 additions and 13 deletions

View File

@@ -1,12 +1,12 @@
{ {
"name": "ripster-backend", "name": "ripster-backend",
"version": "0.9.1-1", "version": "0.9.1-2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ripster-backend", "name": "ripster-backend",
"version": "0.9.1-1", "version": "0.9.1-2",
"dependencies": { "dependencies": {
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.4.7", "dotenv": "^16.4.7",

View File

@@ -1,6 +1,6 @@
{ {
"name": "ripster-backend", "name": "ripster-backend",
"version": "0.9.1-1", "version": "0.9.1-2",
"private": true, "private": true,
"type": "commonjs", "type": "commonjs",
"scripts": { "scripts": {

View File

@@ -641,13 +641,25 @@ function buildRawPathForJobId(rawPath, jobId) {
const absRawPath = normalizeComparablePath(rawPath); const absRawPath = normalizeComparablePath(rawPath);
const folderName = path.basename(absRawPath); const folderName = path.basename(absRawPath);
// Replace existing job ID suffix if present
const replaced = folderName.replace(/(\s-\sRAW\s-\sjob-)\d+\s*$/i, `$1${Math.trunc(normalizedJobId)}`); const replaced = folderName.replace(/(\s-\sRAW\s-\sjob-)\d+\s*$/i, `$1${Math.trunc(normalizedJobId)}`);
if (replaced === folderName) { if (replaced !== folderName) {
return absRawPath;
}
return path.join(path.dirname(absRawPath), replaced); return path.join(path.dirname(absRawPath), replaced);
} }
// No existing job ID suffix — add canonical suffix
// Strip any state prefix (Rip_Complete_ / Incomplete_), append suffix, restore prefix
const statePrefix = /^Rip_Complete_/i.test(folderName)
? RAW_RIP_COMPLETE_PREFIX
: /^Incomplete_/i.test(folderName)
? RAW_INCOMPLETE_PREFIX
: '';
const stripped = stripRawFolderStatePrefix(folderName);
const withJobId = `${statePrefix}${stripped} - RAW - job-${Math.trunc(normalizedJobId)}`;
return path.join(path.dirname(absRawPath), withJobId);
}
function deleteFilesRecursively(rootPath, keepRoot = true) { function deleteFilesRecursively(rootPath, keepRoot = true) {
const result = { const result = {
filesDeleted: 0, filesDeleted: 0,

View File

@@ -1,12 +1,12 @@
{ {
"name": "ripster-frontend", "name": "ripster-frontend",
"version": "0.9.1-1", "version": "0.9.1-2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ripster-frontend", "name": "ripster-frontend",
"version": "0.9.1-1", "version": "0.9.1-2",
"dependencies": { "dependencies": {
"primeicons": "^7.0.0", "primeicons": "^7.0.0",
"primereact": "^10.9.2", "primereact": "^10.9.2",

View File

@@ -1,6 +1,6 @@
{ {
"name": "ripster-frontend", "name": "ripster-frontend",
"version": "0.9.1-1", "version": "0.9.1-2",
"private": true, "private": true,
"type": "module", "type": "module",
"scripts": { "scripts": {

View File

@@ -294,6 +294,7 @@ export default function PipelineStatusCard({
onAnalyze, onAnalyze,
onReanalyze, onReanalyze,
onOpenMetadata, onOpenMetadata,
onReassignOmdb,
onStart, onStart,
onRemoveFromQueue, onRemoveFromQueue,
onRestartEncode, onRestartEncode,
@@ -653,6 +654,17 @@ export default function PipelineStatusCard({
/> />
) : null} ) : null}
{!running && state !== 'METADATA_SELECTION' && state !== 'WAITING_FOR_USER_DECISION' && state !== 'IDLE' && state !== 'DISC_DETECTED' && retryJobId && typeof onReassignOmdb === 'function' ? (
<Button
label="OMDb neu zuordnen"
icon="pi pi-search"
severity="secondary"
size="small"
onClick={() => onReassignOmdb?.(retryJobId)}
loading={busy}
/>
) : null}
{state === 'READY_TO_START' && retryJobId ? ( {state === 'READY_TO_START' && retryJobId ? (
<Button <Button
label="Job starten" label="Job starten"

View File

@@ -728,6 +728,7 @@ export default function DashboardPage({
}; };
const [metadataDialogVisible, setMetadataDialogVisible] = useState(false); const [metadataDialogVisible, setMetadataDialogVisible] = useState(false);
const [metadataDialogContext, setMetadataDialogContext] = useState(null); const [metadataDialogContext, setMetadataDialogContext] = useState(null);
const [metadataDialogReassignMode, setMetadataDialogReassignMode] = useState(false);
const [cdMetadataDialogVisible, setCdMetadataDialogVisible] = useState(false); const [cdMetadataDialogVisible, setCdMetadataDialogVisible] = useState(false);
const [cdMetadataDialogContext, setCdMetadataDialogContext] = useState(null); const [cdMetadataDialogContext, setCdMetadataDialogContext] = useState(null);
const [cdRipPanelJobId, setCdRipPanelJobId] = useState(null); const [cdRipPanelJobId, setCdRipPanelJobId] = useState(null);
@@ -1040,6 +1041,18 @@ export default function DashboardPage({
showError(new Error('Kein Job mit offener Metadaten-Auswahl gefunden.')); showError(new Error('Kein Job mit offener Metadaten-Auswahl gefunden.'));
return; return;
} }
setMetadataDialogReassignMode(false);
setMetadataDialogContext(context);
setMetadataDialogVisible(true);
};
const handleOpenReassignOmdbDialog = (jobId) => {
const context = buildMetadataContextForJob(jobId);
if (!context?.jobId) {
showError(new Error('Job nicht gefunden.'));
return;
}
setMetadataDialogReassignMode(true);
setMetadataDialogContext(context); setMetadataDialogContext(context);
setMetadataDialogVisible(true); setMetadataDialogVisible(true);
}; };
@@ -1516,11 +1529,16 @@ export default function DashboardPage({
const handleMetadataSubmit = async (payload) => { const handleMetadataSubmit = async (payload) => {
setBusy(true); setBusy(true);
try { try {
if (metadataDialogReassignMode) {
await api.assignJobOmdb(payload.jobId, payload);
} else {
await api.selectMetadata(payload); await api.selectMetadata(payload);
}
await refreshPipeline(); await refreshPipeline();
await loadDashboardJobs(); await loadDashboardJobs();
setMetadataDialogVisible(false); setMetadataDialogVisible(false);
setMetadataDialogContext(null); setMetadataDialogContext(null);
setMetadataDialogReassignMode(false);
} catch (error) { } catch (error) {
showError(error); showError(error);
} finally { } finally {
@@ -2348,6 +2366,7 @@ export default function DashboardPage({
onAnalyze={handleAnalyze} onAnalyze={handleAnalyze}
onReanalyze={handleReanalyze} onReanalyze={handleReanalyze}
onOpenMetadata={handleOpenMetadataDialog} onOpenMetadata={handleOpenMetadataDialog}
onReassignOmdb={handleOpenReassignOmdbDialog}
onStart={handleStartJob} onStart={handleStartJob}
onRestartEncode={handleRestartEncodeWithLastSettings} onRestartEncode={handleRestartEncodeWithLastSettings}
onRestartReview={handleRestartReviewFromRaw} onRestartReview={handleRestartReviewFromRaw}
@@ -2469,6 +2488,7 @@ export default function DashboardPage({
onHide={() => { onHide={() => {
setMetadataDialogVisible(false); setMetadataDialogVisible(false);
setMetadataDialogContext(null); setMetadataDialogContext(null);
setMetadataDialogReassignMode(false);
}} }}
onSubmit={handleMetadataSubmit} onSubmit={handleMetadataSubmit}
onSearch={handleOmdbSearch} onSearch={handleOmdbSearch}

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "ripster", "name": "ripster",
"version": "0.9.1-1", "version": "0.9.1-2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ripster", "name": "ripster",
"version": "0.9.1-1", "version": "0.9.1-2",
"devDependencies": { "devDependencies": {
"concurrently": "^9.1.2" "concurrently": "^9.1.2"
} }

View File

@@ -1,7 +1,7 @@
{ {
"name": "ripster", "name": "ripster",
"private": true, "private": true,
"version": "0.9.1-1", "version": "0.9.1-2",
"scripts": { "scripts": {
"dev": "concurrently \"npm run dev --prefix backend\" \"npm run dev --prefix frontend\"", "dev": "concurrently \"npm run dev --prefix backend\" \"npm run dev --prefix frontend\"",
"dev:backend": "npm run dev --prefix backend", "dev:backend": "npm run dev --prefix backend",