Streamline issue reporting and automate repairs
Magent CI/CD / verify (push) Successful in 10m41s
Magent CI/CD / deploy-prod (push) Skipped
Magent CI/CD / deploy-beta (push) Successful in 19s

This commit is contained in:
2026-09-01 13:44:13 +12:00
parent 2adbed7259
commit e58614305e
12 changed files with 1223 additions and 333 deletions
+23 -3
View File
@@ -1,10 +1,10 @@
'use client'
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { useRouter } from 'next/navigation'
import { authFetch, clearToken, getApiBase, getToken, getEventStreamToken } from '../lib/auth'
import AdminShell from '../ui/AdminShell'
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { authFetch, clearToken, getApiBase, getEventStreamToken, getToken } from '../lib/auth'
import AdminDiagnosticsPanel from '../ui/AdminDiagnosticsPanel'
import AdminShell from '../ui/AdminShell'
type AdminSetting = {
key: string
@@ -36,6 +36,7 @@ const SECTION_LABELS: Record<string, string> = {
cache: 'Request cache',
sonarr: 'Sonarr',
radarr: 'Radarr',
bazarr: 'Bazarr',
prowlarr: 'Prowlarr',
qbittorrent: 'qBittorrent',
logs: 'Activity log',
@@ -83,6 +84,7 @@ const URL_SETTINGS = new Set([
'jellyfin_public_url',
'sonarr_base_url',
'radarr_base_url',
'bazarr_base_url',
'prowlarr_base_url',
'qbittorrent_base_url',
])
@@ -115,6 +117,7 @@ const SECTION_DESCRIPTIONS: Record<string, string> = {
cache: 'Manage saved requests cache and refresh behavior.',
sonarr: 'Sonarr connection and the default profile and library location for TV requests.',
radarr: 'Radarr connection and the default profile and library location for movie requests.',
bazarr: 'Bazarr connection used to find and replace movie and episode subtitles.',
prowlarr: 'Prowlarr connection used by Sonarr and Radarr for release searches.',
qbittorrent: 'qBittorrent connection used for collector-owned download progress and diagnostics.',
requests: 'Control how often requests are refreshed and cleaned up.',
@@ -134,6 +137,7 @@ const SETTINGS_SECTION_MAP: Record<string, string | null> = {
artwork: null,
sonarr: 'sonarr',
radarr: 'radarr',
bazarr: 'bazarr',
prowlarr: 'prowlarr',
qbittorrent: 'qbittorrent',
requests: 'requests',
@@ -361,6 +365,14 @@ const STANDARD_SECTION_GROUPS: Record<
keys: ['radarr_quality_profile_id', 'radarr_root_folder'],
},
],
bazarr: [
{
key: 'bazarr-connection',
title: 'Connection',
description: 'Bazarr endpoint, API credential, and default language used by subtitle issue repairs.',
keys: ['bazarr_base_url', 'bazarr_api_key', 'bazarr_default_language'],
},
],
prowlarr: [
{
key: 'prowlarr-connection',
@@ -430,6 +442,9 @@ const STANDARD_SECTION_GROUPS: Record<
}
const SETTING_LABEL_OVERRIDES: Record<string, string> = {
bazarr_base_url: 'Bazarr base URL',
bazarr_api_key: 'Bazarr API key',
bazarr_default_language: 'Default subtitle language',
issue_confirmation_contact_attempts: 'Confirmation emails before auto-close',
issue_confirmation_interval_value: 'Confirmation interval',
issue_confirmation_interval_unit: 'Interval unit',
@@ -993,6 +1008,9 @@ export default function SettingsPage({ section }: SettingsPageProps) {
artwork_cache_mode: 'Choose whether posters are cached locally or loaded from the web.',
sonarr_base_url: 'Sonarr server URL for TV tracking (FQDN or IP). Scheme is optional.',
sonarr_api_key: 'API key for Sonarr.',
bazarr_base_url: 'Bazarr server URL used for movie and episode subtitle repairs. Scheme is optional.',
bazarr_api_key: 'API key used to ask Bazarr for fresh subtitles.',
bazarr_default_language: 'Language code Bazarr should search for by default, such as en.',
sonarr_quality_profile_id: 'Quality profile used when adding TV shows.',
sonarr_root_folder: 'Root folder where Sonarr stores TV shows.',
radarr_base_url: 'Radarr server URL for movies (FQDN or IP). Scheme is optional.',
@@ -1067,6 +1085,8 @@ export default function SettingsPage({ section }: SettingsPageProps) {
jellyfin_base_url: 'https://jelly.example.com or 10.40.0.80:8096',
jellyfin_public_url: 'https://jelly.example.com',
sonarr_base_url: 'https://sonarr.example.com or 10.30.1.81:8989',
bazarr_base_url: 'https://bazarr.example.com or 10.30.1.81:6767',
bazarr_default_language: 'en',
radarr_base_url: 'https://radarr.example.com or 10.30.1.81:7878',
prowlarr_base_url: 'https://prowlarr.example.com or 10.30.1.81:9696',
qbittorrent_base_url: 'https://qb.example.com or 10.30.1.81:8080',