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",
"version": "0.9.1-1",
"version": "0.9.1-2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ripster-backend",
"version": "0.9.1-1",
"version": "0.9.1-2",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^16.4.7",

View File

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

View File

@@ -641,11 +641,23 @@ function buildRawPathForJobId(rawPath, jobId) {
const absRawPath = normalizeComparablePath(rawPath);
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)}`);
if (replaced === folderName) {
return absRawPath;
if (replaced !== folderName) {
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) {

View File

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

View File

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

View File

@@ -294,6 +294,7 @@ export default function PipelineStatusCard({
onAnalyze,
onReanalyze,
onOpenMetadata,
onReassignOmdb,
onStart,
onRemoveFromQueue,
onRestartEncode,
@@ -653,6 +654,17 @@ export default function PipelineStatusCard({
/>
) : 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 ? (
<Button
label="Job starten"

View File

@@ -728,6 +728,7 @@ export default function DashboardPage({
};
const [metadataDialogVisible, setMetadataDialogVisible] = useState(false);
const [metadataDialogContext, setMetadataDialogContext] = useState(null);
const [metadataDialogReassignMode, setMetadataDialogReassignMode] = useState(false);
const [cdMetadataDialogVisible, setCdMetadataDialogVisible] = useState(false);
const [cdMetadataDialogContext, setCdMetadataDialogContext] = 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.'));
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);
setMetadataDialogVisible(true);
};
@@ -1516,11 +1529,16 @@ export default function DashboardPage({
const handleMetadataSubmit = async (payload) => {
setBusy(true);
try {
await api.selectMetadata(payload);
if (metadataDialogReassignMode) {
await api.assignJobOmdb(payload.jobId, payload);
} else {
await api.selectMetadata(payload);
}
await refreshPipeline();
await loadDashboardJobs();
setMetadataDialogVisible(false);
setMetadataDialogContext(null);
setMetadataDialogReassignMode(false);
} catch (error) {
showError(error);
} finally {
@@ -2348,6 +2366,7 @@ export default function DashboardPage({
onAnalyze={handleAnalyze}
onReanalyze={handleReanalyze}
onOpenMetadata={handleOpenMetadataDialog}
onReassignOmdb={handleOpenReassignOmdbDialog}
onStart={handleStartJob}
onRestartEncode={handleRestartEncodeWithLastSettings}
onRestartReview={handleRestartReviewFromRaw}
@@ -2469,6 +2488,7 @@ export default function DashboardPage({
onHide={() => {
setMetadataDialogVisible(false);
setMetadataDialogContext(null);
setMetadataDialogReassignMode(false);
}}
onSubmit={handleMetadataSubmit}
onSearch={handleOmdbSearch}

4
package-lock.json generated
View File

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

View File

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