339 lines
5.7 KiB
Markdown
339 lines
5.7 KiB
Markdown
# Settings API
|
|
|
|
Endpunkte für Einstellungen, Skripte, Skript-Ketten und User-Presets.
|
|
|
|
---
|
|
|
|
## GET /api/settings
|
|
|
|
Liefert alle Einstellungen kategorisiert.
|
|
|
|
**Response (Struktur):**
|
|
|
|
```json
|
|
{
|
|
"categories": [
|
|
{
|
|
"category": "Pfade",
|
|
"settings": [
|
|
{
|
|
"key": "raw_dir",
|
|
"label": "Raw Ausgabeordner",
|
|
"type": "path",
|
|
"required": true,
|
|
"description": "...",
|
|
"defaultValue": "data/output/raw",
|
|
"options": [],
|
|
"validation": { "minLength": 1 },
|
|
"value": "data/output/raw",
|
|
"orderIndex": 100
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## PUT /api/settings/:key
|
|
|
|
Aktualisiert eine einzelne Einstellung.
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{ "value": "/mnt/storage/raw" }
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"setting": {
|
|
"key": "raw_dir",
|
|
"value": "/mnt/storage/raw"
|
|
},
|
|
"reviewRefresh": {
|
|
"triggered": false,
|
|
"reason": "not_ready"
|
|
}
|
|
}
|
|
```
|
|
|
|
`reviewRefresh` ist `null` oder ein Objekt mit Status der optionalen Review-Neuberechnung.
|
|
|
|
---
|
|
|
|
## PUT /api/settings
|
|
|
|
Aktualisiert mehrere Einstellungen atomar.
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{
|
|
"settings": {
|
|
"raw_dir": "/mnt/storage/raw",
|
|
"movie_dir": "/mnt/storage/movies",
|
|
"handbrake_preset_bluray": "H.264 MKV 1080p30"
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"changes": [
|
|
{ "key": "raw_dir", "value": "/mnt/storage/raw" },
|
|
{ "key": "movie_dir", "value": "/mnt/storage/movies" }
|
|
],
|
|
"reviewRefresh": {
|
|
"triggered": true,
|
|
"jobId": 42,
|
|
"relevantKeys": ["handbrake_preset_bluray"]
|
|
}
|
|
}
|
|
```
|
|
|
|
Bei Validierungsfehlern kommt `400` mit `error.details[]`.
|
|
|
|
---
|
|
|
|
## GET /api/settings/handbrake-presets
|
|
|
|
Liest Preset-Liste via `HandBrakeCLI -z` (mit Fallback auf konfigurierte Presets).
|
|
|
|
**Response (Beispiel):**
|
|
|
|
```json
|
|
{
|
|
"source": "handbrake-cli",
|
|
"message": null,
|
|
"options": [
|
|
{ "label": "General/", "value": "__group__general", "disabled": true, "category": "General" },
|
|
{ "label": " Fast 1080p30", "value": "Fast 1080p30", "category": "General" }
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## POST /api/settings/pushover/test
|
|
|
|
Sendet Testnachricht über aktuelle PushOver-Settings.
|
|
|
|
**Request (optional):**
|
|
|
|
```json
|
|
{
|
|
"title": "Test",
|
|
"message": "Ripster Test"
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"result": {
|
|
"sent": true,
|
|
"eventKey": "test",
|
|
"requestId": "..."
|
|
}
|
|
}
|
|
```
|
|
|
|
Wenn PushOver deaktiviert ist oder Credentials fehlen, kommt i. d. R. ebenfalls `200` mit `sent: false` + `reason`.
|
|
|
|
---
|
|
|
|
## Skripte
|
|
|
|
Basis: `/api/settings/scripts`
|
|
|
|
### GET /api/settings/scripts
|
|
|
|
```json
|
|
{ "scripts": [ { "id": 1, "name": "...", "scriptBody": "...", "orderIndex": 1, "createdAt": "...", "updatedAt": "..." } ] }
|
|
```
|
|
|
|
### POST /api/settings/scripts
|
|
|
|
```json
|
|
{ "name": "Move", "scriptBody": "mv \"$RIPSTER_OUTPUT_PATH\" /mnt/movies/" }
|
|
```
|
|
|
|
Response: `201` mit `{ "script": { ... } }`
|
|
|
|
### PUT /api/settings/scripts/:id
|
|
|
|
Body wie `POST`, Response `{ "script": { ... } }`.
|
|
|
|
### DELETE /api/settings/scripts/:id
|
|
|
|
Response `{ "removed": { ... } }`.
|
|
|
|
### POST /api/settings/scripts/reorder
|
|
|
|
```json
|
|
{ "orderedScriptIds": [3, 1, 2] }
|
|
```
|
|
|
|
Response `{ "scripts": [ ... ] }`.
|
|
|
|
### POST /api/settings/scripts/:id/test
|
|
|
|
Führt Skript als Testlauf aus.
|
|
|
|
```json
|
|
{
|
|
"result": {
|
|
"scriptId": 1,
|
|
"scriptName": "Move",
|
|
"success": true,
|
|
"exitCode": 0,
|
|
"signal": null,
|
|
"timedOut": false,
|
|
"durationMs": 120,
|
|
"stdout": "...",
|
|
"stderr": "...",
|
|
"stdoutTruncated": false,
|
|
"stderrTruncated": false
|
|
}
|
|
}
|
|
```
|
|
|
|
### Umgebungsvariablen für Skripte
|
|
|
|
Diese Variablen werden beim Ausführen gesetzt:
|
|
|
|
- `RIPSTER_SCRIPT_RUN_AT`
|
|
- `RIPSTER_JOB_ID`
|
|
- `RIPSTER_JOB_TITLE`
|
|
- `RIPSTER_MODE`
|
|
- `RIPSTER_INPUT_PATH`
|
|
- `RIPSTER_OUTPUT_PATH`
|
|
- `RIPSTER_RAW_PATH`
|
|
- `RIPSTER_SCRIPT_ID`
|
|
- `RIPSTER_SCRIPT_NAME`
|
|
- `RIPSTER_SCRIPT_SOURCE`
|
|
|
|
---
|
|
|
|
## Skript-Ketten
|
|
|
|
Basis: `/api/settings/script-chains`
|
|
|
|
Eine Kette hat Schritte vom Typ:
|
|
|
|
- `script` (`scriptId` erforderlich)
|
|
- `wait` (`waitSeconds` 1..3600)
|
|
|
|
### GET /api/settings/script-chains
|
|
|
|
Response `{ "chains": [ ... ] }` (inkl. `steps[]`).
|
|
|
|
### GET /api/settings/script-chains/:id
|
|
|
|
Response `{ "chain": { ... } }`.
|
|
|
|
### POST /api/settings/script-chains
|
|
|
|
```json
|
|
{
|
|
"name": "After Encode",
|
|
"steps": [
|
|
{ "stepType": "script", "scriptId": 1 },
|
|
{ "stepType": "wait", "waitSeconds": 15 },
|
|
{ "stepType": "script", "scriptId": 2 }
|
|
]
|
|
}
|
|
```
|
|
|
|
Response: `201` mit `{ "chain": { ... } }`
|
|
|
|
### PUT /api/settings/script-chains/:id
|
|
|
|
Body wie `POST`, Response `{ "chain": { ... } }`.
|
|
|
|
### DELETE /api/settings/script-chains/:id
|
|
|
|
Response `{ "removed": { ... } }`.
|
|
|
|
### POST /api/settings/script-chains/reorder
|
|
|
|
```json
|
|
{ "orderedChainIds": [2, 1, 3] }
|
|
```
|
|
|
|
Response `{ "chains": [ ... ] }`.
|
|
|
|
### POST /api/settings/script-chains/:id/test
|
|
|
|
Response:
|
|
|
|
```json
|
|
{
|
|
"result": {
|
|
"chainId": 2,
|
|
"chainName": "After Encode",
|
|
"steps": 3,
|
|
"succeeded": 3,
|
|
"failed": 0,
|
|
"aborted": false,
|
|
"results": []
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## User-Presets
|
|
|
|
Basis: `/api/settings/user-presets`
|
|
|
|
### GET /api/settings/user-presets
|
|
|
|
Optionaler Query-Parameter: `media_type=bluray|dvd|other|all`
|
|
|
|
```json
|
|
{
|
|
"presets": [
|
|
{
|
|
"id": 1,
|
|
"name": "Blu-ray HQ",
|
|
"mediaType": "bluray",
|
|
"handbrakePreset": "H.264 MKV 1080p30",
|
|
"extraArgs": "--encoder-preset slow",
|
|
"description": "...",
|
|
"createdAt": "...",
|
|
"updatedAt": "..."
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### POST /api/settings/user-presets
|
|
|
|
```json
|
|
{
|
|
"name": "Blu-ray HQ",
|
|
"mediaType": "bluray",
|
|
"handbrakePreset": "H.264 MKV 1080p30",
|
|
"extraArgs": "--encoder-preset slow",
|
|
"description": "optional"
|
|
}
|
|
```
|
|
|
|
Response: `201` mit `{ "preset": { ... } }`
|
|
|
|
### PUT /api/settings/user-presets/:id
|
|
|
|
Body mit beliebigen Feldern aus `POST`, Response `{ "preset": { ... } }`.
|
|
|
|
### DELETE /api/settings/user-presets/:id
|
|
|
|
Response `{ "removed": { ... } }`.
|