Support original-language movie requests and fix repair dialog layout
Magent CI/CD / verify (push) Successful in 1m54s
Magent CI/CD / deploy-prod (push) Skipped
Magent CI/CD / deploy-beta (push) Skipped

This commit is contained in:
2026-09-11 18:05:18 +12:00
parent 52c85daae3
commit 38169b881e
11 changed files with 238 additions and 5 deletions
@@ -28,6 +28,7 @@ type RequestOptions = {
episodeCount: number
airDate?: string | null
}>
originalLanguage?: { code: string } | null
existingRequestId?: number | null
}
destination: {
@@ -115,6 +116,7 @@ export default function NewRequestClient() {
const [options, setOptions] = useState<RequestOptions | null>(null)
const [loadingOptions, setLoadingOptions] = useState(false)
const [selectedSeasons, setSelectedSeasons] = useState<number[]>([])
const [acceptOriginalLanguage, setAcceptOriginalLanguage] = useState(false)
const [submitting, setSubmitting] = useState(false)
const [operation, setOperation] = useState<OperationProgress | null>(null)
const [error, setError] = useState<string | null>(null)
@@ -132,6 +134,7 @@ export default function NewRequestClient() {
const changeTitle = () => {
setSelected(null)
setOptions(null)
setAcceptOriginalLanguage(false)
setSelectedSeasons([])
setOperation(null)
setError(null)
@@ -146,6 +149,7 @@ export default function NewRequestClient() {
setSearchAttempted(false)
setSelected(null)
setOptions(null)
setAcceptOriginalLanguage(false)
setSelectedSeasons([])
setOperation(null)
setError(null)
@@ -165,6 +169,7 @@ export default function NewRequestClient() {
setSearchAttempted(true)
setSelected(null)
setOptions(null)
setAcceptOriginalLanguage(false)
setOperation(null)
setError(null)
setSuccess(null)
@@ -207,6 +212,7 @@ export default function NewRequestClient() {
const selectResult = async (item: DiscoveryResult) => {
setSelected(item)
setOptions(null)
setAcceptOriginalLanguage(false)
setSelectedSeasons([])
setOperation(null)
setError(null)
@@ -285,6 +291,7 @@ export default function NewRequestClient() {
body: JSON.stringify({
mediaType: selected.type,
tmdbId: selected.tmdbId,
acceptOriginalLanguage,
seasons: selected.type === 'tv' ? selectedSeasons : undefined,
}),
})
@@ -489,6 +496,12 @@ export default function NewRequestClient() {
</fieldset>
)}
{options.media.originalLanguage && <div className="request-language-notice">
<h3>Check the audio language</h3>
<p>This titles original language is <strong>{new Intl.DisplayNames(['en'], { type: 'language' }).of(options.media.originalLanguage.code) || options.media.originalLanguage.code}</strong>. An English audio track may not be available. Title metadata does not confirm the audio or subtitles in a download.</p>
<label><input type="checkbox" checked={acceptOriginalLanguage} onChange={(event) => setAcceptOriginalLanguage(event.target.checked)} disabled={submitting} /><span>Im happy to watch in the original language.</span></label>
<small>{acceptOriginalLanguage ? (selected.type === 'movie' ? 'Search for original-language audio using the same quality requirements.' : 'Continue with your selected seasons and the configured TV quality requirements.') : 'Leave this unchecked to keep the standard request settings. An English-only profile may leave this title waiting for a suitable release.'}</small>
</div>}
<div className="request-submit-bar">
<div><span>Delivery route</span><strong>Seerr {options.destination.collector} Grizzlyflix</strong><small>Your request uses the default quality set by your administrator.</small></div>
<button type="button" onClick={() => void submitRequest()} disabled={submitting || (selected.type === 'tv' && selectedSeasons.length === 0)}>