From a87ba330b1d824c7e35d81da6e1ab4c086a33c8a Mon Sep 17 00:00:00 2001 From: mboehmlaender Date: Mon, 23 Mar 2026 06:59:51 +0000 Subject: [PATCH] 0.12.0-9 Fix Jobs --- backend/package-lock.json | 4 ++-- backend/package.json | 2 +- backend/src/services/historyService.js | 2 +- backend/src/services/pipelineService.js | 6 ++++-- backend/src/utils/files.js | 12 +++++++++++- frontend/package-lock.json | 4 ++-- frontend/package.json | 2 +- install-dev.sh | 4 ++-- install.sh | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- 11 files changed, 29 insertions(+), 17 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index e763715..af79d08 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,12 +1,12 @@ { "name": "ripster-backend", - "version": "0.12.0-8", + "version": "0.12.0-9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ripster-backend", - "version": "0.12.0-8", + "version": "0.12.0-9", "dependencies": { "archiver": "^7.0.1", "cors": "^2.8.5", diff --git a/backend/package.json b/backend/package.json index 77f22ae..9bab9bb 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "ripster-backend", - "version": "0.12.0-8", + "version": "0.12.0-9", "private": true, "type": "commonjs", "scripts": { diff --git a/backend/src/services/historyService.js b/backend/src/services/historyService.js index 21cae6e..8f8c638 100644 --- a/backend/src/services/historyService.js +++ b/backend/src/services/historyService.js @@ -2968,7 +2968,7 @@ class HistoryService { ` SELECT * FROM jobs - WHERE status IN ('RIPPING', 'ENCODING', 'CD_ANALYZING', 'CD_RIPPING', 'CD_ENCODING') + WHERE status IN ('ANALYZING', 'RIPPING', 'ENCODING', 'MEDIAINFO_CHECK', 'READY_TO_ENCODE', 'CD_ANALYZING', 'CD_READY_TO_RIP', 'CD_RIPPING', 'CD_ENCODING') ORDER BY updated_at ASC, id ASC ` ), diff --git a/backend/src/services/pipelineService.js b/backend/src/services/pipelineService.js index 40306b2..9403f58 100644 --- a/backend/src/services/pipelineService.js +++ b/backend/src/services/pipelineService.js @@ -5065,10 +5065,12 @@ class PipelineService extends EventEmitter { 'WAITING_FOR_USER_DECISION', 'READY_TO_START', 'MEDIAINFO_CHECK', - 'READY_TO_ENCODE', + // READY_TO_ENCODE intentionally excluded: user has confirmed encoding, + // a new analyze must not silently delete a queued encode job. 'CD_ANALYZING', 'CD_METADATA_SELECTION', - 'CD_READY_TO_RIP', + // CD_READY_TO_RIP intentionally excluded: user has confirmed track + // selection, a new analyze must not discard that. 'ERROR', 'CANCELLED' ]); diff --git a/backend/src/utils/files.js b/backend/src/utils/files.js index c0bdcde..9dd610d 100644 --- a/backend/src/utils/files.js +++ b/backend/src/utils/files.js @@ -28,12 +28,21 @@ function transliterateForFilename(input) { function sanitizeFileName(input) { return transliterateForFilename(String(input || 'untitled')) - .replace(/[\\/:*?"<>|]/g, '_') + .replace(/[^a-zA-Z0-9 ()[\]-]/g, '') .replace(/\s+/g, ' ') .trim() .slice(0, 180); } +function sanitizeFileNameWithExtension(input) { + const str = String(input || 'untitled'); + const ext = path.extname(str); + const base = ext ? str.slice(0, -ext.length) : str; + const cleanBase = sanitizeFileName(base); + const cleanExt = ext.toLowerCase().replace(/[^a-z0-9.]/g, ''); + return (cleanBase || 'untitled') + cleanExt; +} + function renderTemplate(template, values) { return String(template || '${title} (${year})').replace(/\$\{([^}]+)\}/g, (_, key) => { const val = values[key.trim()]; @@ -86,6 +95,7 @@ module.exports = { ensureDir, transliterateForFilename, sanitizeFileName, + sanitizeFileNameWithExtension, renderTemplate, findLargestMediaFile, findMediaFiles diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 46eba82..d48cd64 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "ripster-frontend", - "version": "0.12.0-8", + "version": "0.12.0-9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ripster-frontend", - "version": "0.12.0-8", + "version": "0.12.0-9", "dependencies": { "primeicons": "^7.0.0", "primereact": "^10.9.2", diff --git a/frontend/package.json b/frontend/package.json index e83101f..330becd 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "ripster-frontend", - "version": "0.12.0-8", + "version": "0.12.0-9", "private": true, "type": "module", "scripts": { diff --git a/install-dev.sh b/install-dev.sh index 516c362..32ddd2c 100644 --- a/install-dev.sh +++ b/install-dev.sh @@ -868,6 +868,8 @@ Description=Ripster Backend API Documentation=https://github.com/your-repo/ripster After=network.target Wants=network-online.target +StartLimitIntervalSec=60 +StartLimitBurst=3 [Service] Type=simple @@ -877,8 +879,6 @@ WorkingDirectory=${INSTALL_DIR}/backend ExecStart=$(command -v node) src/index.js Restart=on-failure RestartSec=5 -StartLimitIntervalSec=60 -StartLimitBurst=3 # Umgebung Environment=NODE_ENV=production diff --git a/install.sh b/install.sh index fba8afa..9947607 100644 --- a/install.sh +++ b/install.sh @@ -664,6 +664,8 @@ cat > /etc/systemd/system/ripster-backend.service <