Reconcile verified account IDs and make language repairs observable
This commit is contained in:
@@ -116,7 +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 [acceptOriginalLanguage, setAcceptOriginalLanguage] = useState<boolean | null>(null)
|
||||
const [submitting, setSubmitting] = useState(false)
|
||||
const [operation, setOperation] = useState<OperationProgress | null>(null)
|
||||
const [error, setError] = useState<string | null>(null)
|
||||
@@ -134,7 +134,7 @@ export default function NewRequestClient() {
|
||||
const changeTitle = () => {
|
||||
setSelected(null)
|
||||
setOptions(null)
|
||||
setAcceptOriginalLanguage(false)
|
||||
setAcceptOriginalLanguage(null)
|
||||
setSelectedSeasons([])
|
||||
setOperation(null)
|
||||
setError(null)
|
||||
@@ -149,7 +149,7 @@ export default function NewRequestClient() {
|
||||
setSearchAttempted(false)
|
||||
setSelected(null)
|
||||
setOptions(null)
|
||||
setAcceptOriginalLanguage(false)
|
||||
setAcceptOriginalLanguage(null)
|
||||
setSelectedSeasons([])
|
||||
setOperation(null)
|
||||
setError(null)
|
||||
@@ -169,7 +169,7 @@ export default function NewRequestClient() {
|
||||
setSearchAttempted(true)
|
||||
setSelected(null)
|
||||
setOptions(null)
|
||||
setAcceptOriginalLanguage(false)
|
||||
setAcceptOriginalLanguage(null)
|
||||
setOperation(null)
|
||||
setError(null)
|
||||
setSuccess(null)
|
||||
@@ -212,7 +212,7 @@ export default function NewRequestClient() {
|
||||
const selectResult = async (item: DiscoveryResult) => {
|
||||
setSelected(item)
|
||||
setOptions(null)
|
||||
setAcceptOriginalLanguage(false)
|
||||
setAcceptOriginalLanguage(null)
|
||||
setSelectedSeasons([])
|
||||
setOperation(null)
|
||||
setError(null)
|
||||
@@ -270,6 +270,7 @@ export default function NewRequestClient() {
|
||||
|
||||
const submitRequest = async () => {
|
||||
if (!selected || !options) return
|
||||
if (options.media.originalLanguage && acceptOriginalLanguage === null) { setError('Choose an audio language option before requesting.'); return }
|
||||
if (selected.type === 'tv' && selectedSeasons.length === 0) {
|
||||
setError('Select at least one season.')
|
||||
return
|
||||
@@ -291,7 +292,7 @@ export default function NewRequestClient() {
|
||||
body: JSON.stringify({
|
||||
mediaType: selected.type,
|
||||
tmdbId: selected.tmdbId,
|
||||
acceptOriginalLanguage,
|
||||
acceptOriginalLanguage: acceptOriginalLanguage === true,
|
||||
seasons: selected.type === 'tv' ? selectedSeasons : undefined,
|
||||
}),
|
||||
})
|
||||
@@ -497,14 +498,15 @@ export default function NewRequestClient() {
|
||||
)}
|
||||
|
||||
{options.media.originalLanguage && <div className="request-language-notice">
|
||||
<h3>Check the audio language</h3>
|
||||
<h3>Choose your audio language</h3>
|
||||
<p>This title’s 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>I’m 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>
|
||||
<label><input type="radio" name="request-audio" checked={acceptOriginalLanguage === true} onChange={() => setAcceptOriginalLanguage(true)} disabled={submitting} /><span>Original {new Intl.DisplayNames(['en'], { type: 'language' }).of(options.media.originalLanguage.code)} audio — I’m happy to watch in the original language.</span></label>
|
||||
<label><input type="radio" name="request-audio" checked={acceptOriginalLanguage === false} onChange={() => setAcceptOriginalLanguage(false)} disabled={submitting} /><span>Keep standard audio requirements. This title may remain waiting for an English release.</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.') : 'Choose an option to continue. 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)}>
|
||||
<button type="button" onClick={() => void submitRequest()} disabled={submitting || (Boolean(options.media.originalLanguage) && acceptOriginalLanguage === null) || (selected.type === 'tv' && selectedSeasons.length === 0)}>
|
||||
{submitting ? 'Sending request…' : `Request ${selected.type === 'tv' ? 'show' : 'movie'}`}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user